require 'spec_helper' describe QuickbooksWebConnector::SoapController do describe 'POST :endpoint' do def do_post post :endpoint, use_route: 'quickbooks_web_connector' end before do request.env['CONTENT_TYPE'] = 'text/xml; charset=utf-8' request.env['RAW_POST_DATA'] = request_xml end let(:result) { REXML::Document.new(response.body).root } context 'serverVersion' do # Request let(:request_xml) do <<-EOT EOT end # Response: # # # # 1.2.3 # # # before do QuickbooksWebConnector.configure { |c| c.server_version = '1.2.3' } post :endpoint, { use_route: 'quickbooks_web_connector' } end it 'responds with success' do expect(response).to be_success end it 'responds as XML' do expect(response.header['Content-Type']).to match(/text\/xml/) end it 'returns the version' do expect(result.text('env:Body/n1:serverVersionResponse/n1:serverVersionResult')).to eq('1.2.3') end end context 'clientVersion' do let(:request_xml) do <<-EOT 2.1.0.30 EOT end # Response # # # # # # before do post :endpoint, { use_route: 'quickbooks_web_connector' } end it 'responds with success' do expect(response).to be_success end it 'returns the version' do expect(result.text('env:Body/n1:clientVersionResponse')).to be_nil end end context 'authenticate' do let(:request_xml) do <<-EOT foo bar EOT end # Response # # # # # # 5c7e2e0d-8912-4f13-ad60-cac3a3e68bf5 # none # # # # # # before do QuickbooksWebConnector.configure do |c| c.username = 'foo' c.password = 'bar' end do_post end after do QuickbooksWebConnector.configure do |c| c.username = 'web_connector' c.password = 'secret' end end it 'responds with success' do expect(response).to be_success end it 'returns a token' do expect(result.text('env:Body/n1:authenticateResponse/n1:authenticateResult/n1:string[1]')).to_not be_nil end it 'returns "none" for having no data to send' do expect(result.text('env:Body/n1:authenticateResponse/n1:authenticateResult/n1:string[2]')).to eq('none') end end context 'sendRequestXML' do let(:request_xml) do <<-EOT 0358d44e-9d87-4d40-8299-3026881951bb C:\\Documents and Settings\\All Users\\Documents\\Intuit\\QuickBooks\\Company Files\\Sample.QBW US 6 0 EOT end # Response # # # # # <some><xml></xml></some> # # # before do SomeBuilder.stub(:perform).with(1).and_return('') QuickbooksWebConnector.enqueue SomeBuilder, SomeHandler, 1 do_post end it 'responds with success' do expect(response).to be_success end it 'returns the request XML' do expect(result.text('env:Body/n1:sendRequestXMLResponse/n1:sendRequestXMLResult')).to eq('') end end context 'receiveResponseXML' do let(:request_xml) do <<-EOT 3dde5f3d-dc68-4500-9391-69f75e824330 <?xml version="1.0" ?> <QBXML> <QBXMLMsgsRs> <CustomerAddRs statusCode="0" statusSeverity="Info" statusMessage="Status OK"> <CustomerRet> <ListID>80000006-1354334808</ListID> <TimeCreated>2012-11-30T23:06:48-05:00</TimeCreated> <TimeModified>2012-11-30T23:06:48-05:00</TimeModified> <EditSequence>1354334808</EditSequence> <Name>Test Inc</Name> <FullName>Test Inc</FullName> <IsActive>true</IsActive> <Sublevel>0</Sublevel> <Balance>0.00</Balance> <TotalBalance>0.00</TotalBalance> <JobStatus>None</JobStatus> </CustomerRet> </CustomerAddRs> </QBXMLMsgsRs> </QBXML> EOT end # Response # # # # # 100 # # # before do QuickbooksWebConnector.enqueue '', SomeHandler, 1 do_post end it 'responds with success' do expect(response).to be_success end it 'returns the percentage done' do expect(result.text('env:Body/n1:receiveResponseXMLResponse/n1:receiveResponseXMLResult')).to eq('100') end end context 'closeConnection' do # Request let(:request_xml) do <<-EOT 934ea5d9-231e-4426-9ae9-720d1020c472 EOT end # Response # # # # # # before { do_post } it 'responds with success' do expect(response).to be_success end it 'returns the closeConnectionResponse' do expect(result.elements['env:Body/n1:closeConnectionResponse']).to_not be_nil end end end end