require 'spec_helper' describe QuickbooksWebConnector::SoapWrapper::QBWebConnectorSvcSoap do let(:servant) { described_class.new } describe 'serverVersion' do subject(:response) { servant.serverVersion(stub :parameters) } before { QuickbooksWebConnector.configure { |c| c.server_version = '1.2.3' } } it { should be_a QuickbooksWebConnector::SoapWrapper::ServerVersionResponse } its(:serverVersionResult) { should eq '1.2.3' } after { QuickbooksWebConnector.configure { |c| c.server_version = '1.0.0' } } end describe 'clientVersion' do subject(:response) { servant.clientVersion(stub :parameters, strVersion: '2.1.0.30') } context 'no minimum version set' do before { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = nil } } it { should be_a QuickbooksWebConnector::SoapWrapper::ClientVersionResponse } its(:clientVersionResult) { should be_nil } after { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = nil } } end context 'current version passes minimum version check' do before { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = '1.0.0' } } it { should be_a QuickbooksWebConnector::SoapWrapper::ClientVersionResponse } its(:clientVersionResult) { should be_nil } after { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = nil } } end context 'current version fails minimum version check' do before { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = '3.0.0' } } it { should be_a QuickbooksWebConnector::SoapWrapper::ClientVersionResponse } its(:clientVersionResult) { should eq 'E:This version of QuickBooks Web Connector is outdated. Version 3.0.0 or greater is required.' } after { QuickbooksWebConnector.configure { |c| c.minimum_web_connector_client_version = nil } } end end describe 'authenticate' do subject(:response) { servant.authenticate(stub :parameters, strUserName: 'foo', strPassword: 'bar') } context 'unauthorized' do it { should be_a QuickbooksWebConnector::SoapWrapper::AuthenticateResponse } it 'returns "nvu" with an invalid user' do expect(response.authenticateResult[1]).to eq('nvu') end end context 'authorized' do before do QuickbooksWebConnector.configure do |c| c.username = 'foo' c.password = 'bar' end end after do QuickbooksWebConnector.configure do |c| c.username = 'web_connector' c.password = 'secret' end end context 'has no data to send' do it 'is "none" for having no data' do expect(response.authenticateResult[1]).to eq('none') end end context 'has work to do' do before do QuickbooksWebConnector.enqueue '', SomeHandler QuickbooksWebConnector.configure { |c| c.company_file_path = '/path/to/company.qbw' } SecureRandom.stub uuid: '71f1f9d9-8012-487c-af33-c84bab4d4ded' end after { QuickbooksWebConnector.configure { |c| c.company_file_path = '' } } it { should be_a QuickbooksWebConnector::SoapWrapper::AuthenticateResponse } it 'is a token for future requests' do expect(response.authenticateResult[0]).to eq('71f1f9d9-8012-487c-af33-c84bab4d4ded') end it 'returns the path to the company file' do expect(response.authenticateResult[1]).to eq('/path/to/company.qbw') end it 'is nil for delay' do expect(response.authenticateResult[2]).to be_nil end it 'is nil for the new MinimumRunEveryNSeconds' do expect(response.authenticateResult[3]).to be_nil end end end end describe 'sendRequestXML' do subject(:response) { servant.sendRequestXML(stub :parameters) } before do SomeBuilder.stub(:perform).with(1).and_return('') QuickbooksWebConnector.enqueue SomeBuilder, SomeHandler, 1 end it { should be_a QuickbooksWebConnector::SoapWrapper::SendRequestXMLResponse } its(:sendRequestXMLResult) { should eq '' } end describe 'receiveResponseXML' do subject(:response) { servant.receiveResponseXML(stub :parameters, response: '') } before do QuickbooksWebConnector.enqueue '', SomeHandler, 1 SomeHandler.should_receive(:perform).with('', 1) end context 'last job' do it { should be_a QuickbooksWebConnector::SoapWrapper::ReceiveResponseXMLResponse } its(:receiveResponseXMLResult) { should eq 100 } end context 'additional jobs' do before { QuickbooksWebConnector.enqueue '', SomeHandler, 2 } it { should be_a QuickbooksWebConnector::SoapWrapper::ReceiveResponseXMLResponse } its(:receiveResponseXMLResult) { should eq 1 } end end describe 'closeConnection' do subject(:response) { servant.closeConnection(stub :parameters) } it { should be_a QuickbooksWebConnector::SoapWrapper::CloseConnectionResponse } end end