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