From 5051e81ef53ad30cfaee718e21c102cfd75c7696 Mon Sep 17 00:00:00 2001 From: cody caughlan Date: Thu, 7 May 2020 06:09:42 -0700 Subject: [PATCH 1/5] WIP --- lib/quickbooks-ruby.rb | 9 +++++++++ lib/quickbooks/model/account.rb | 1 - lib/quickbooks/model/customer.rb | 2 -- lib/quickbooks/model/invoice.rb | 1 - lib/quickbooks/model/item.rb | 1 - lib/quickbooks/model/preferences.rb | 1 - lib/quickbooks/model/purchase_order.rb | 1 - lib/quickbooks/service/base_service.rb | 1 + lib/quickbooks/service/customer.rb | 10 +++++++--- spec/lib/quickbooks/service/customer_spec.rb | 3 ++- 10 files changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/quickbooks-ruby.rb b/lib/quickbooks-ruby.rb index 35a330ae..9a705fae 100644 --- a/lib/quickbooks-ruby.rb +++ b/lib/quickbooks-ruby.rb @@ -191,6 +191,7 @@ module Quickbooks @@sandbox_mode = false @@logger = nil + @@minorversion = 47 class << self def sandbox_mode @@ -201,6 +202,14 @@ def sandbox_mode=(sandbox_mode) @@sandbox_mode = sandbox_mode end + def minorversion=(v) + @@minorversion = v + end + + def minorversion + @@minorversion + end + def logger @@logger ||= ::Logger.new($stdout) # TODO: replace with a real log file end diff --git a/lib/quickbooks/model/account.rb b/lib/quickbooks/model/account.rb index 0ed2fc4c..80af278e 100644 --- a/lib/quickbooks/model/account.rb +++ b/lib/quickbooks/model/account.rb @@ -4,7 +4,6 @@ class Account < BaseModel XML_COLLECTION_NODE = "Account" XML_NODE = "Account" REST_RESOURCE = 'account' - MINORVERSION = 13 ASSET = 'Asset' EQUITY = 'Equity' diff --git a/lib/quickbooks/model/customer.rb b/lib/quickbooks/model/customer.rb index 98e5b5a8..a1f2a4fb 100644 --- a/lib/quickbooks/model/customer.rb +++ b/lib/quickbooks/model/customer.rb @@ -16,8 +16,6 @@ class Customer < BaseModel include NameEntity::Quality include NameEntity::PermitAlterations - MINORVERSION = 33 - xml_name XML_NODE xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/model/invoice.rb b/lib/quickbooks/model/invoice.rb index fcc29c58..1d6ef706 100644 --- a/lib/quickbooks/model/invoice.rb +++ b/lib/quickbooks/model/invoice.rb @@ -17,7 +17,6 @@ class Invoice < BaseModel XML_COLLECTION_NODE = "Invoice" XML_NODE = "Invoice" EMAIL_STATUS_NEED_TO_SEND = 'NeedToSend' - MINORVERSION = 37 xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/model/item.rb b/lib/quickbooks/model/item.rb index aac2ae51..da911879 100644 --- a/lib/quickbooks/model/item.rb +++ b/lib/quickbooks/model/item.rb @@ -10,7 +10,6 @@ class Item < BaseModel XML_COLLECTION_NODE = "Item" XML_NODE = "Item" REST_RESOURCE = 'item' - MINORVERSION = 33 INVENTORY_TYPE = 'Inventory' NON_INVENTORY_TYPE = 'NonInventory' diff --git a/lib/quickbooks/model/preferences.rb b/lib/quickbooks/model/preferences.rb index a4d40e84..cceea55b 100644 --- a/lib/quickbooks/model/preferences.rb +++ b/lib/quickbooks/model/preferences.rb @@ -4,7 +4,6 @@ class Preferences < BaseModel XML_COLLECTION_NODE = "Preferences" XML_NODE = "Preferences" REST_RESOURCE = 'preferences' - MINORVERSION = 32 xml_name XML_NODE diff --git a/lib/quickbooks/model/purchase_order.rb b/lib/quickbooks/model/purchase_order.rb index 7a239faf..eec9b659 100644 --- a/lib/quickbooks/model/purchase_order.rb +++ b/lib/quickbooks/model/purchase_order.rb @@ -8,7 +8,6 @@ class PurchaseOrder < BaseModel REST_RESOURCE = 'purchaseorder' XML_COLLECTION_NODE = "PurchaseOrder" XML_NODE = "PurchaseOrder" - MINORVERSION = 45 xml_accessor :id, :from => 'Id' xml_accessor :sync_token, :from => 'SyncToken', :as => Integer diff --git a/lib/quickbooks/service/base_service.rb b/lib/quickbooks/service/base_service.rb index af7f2d93..7de291b9 100644 --- a/lib/quickbooks/service/base_service.rb +++ b/lib/quickbooks/service/base_service.rb @@ -196,6 +196,7 @@ def do_http_post(url, body = "", params = {}, headers = {}) # throws IntuitReque end def do_http_get(url, params = {}, headers = {}) # throws IntuitRequestException + params['minorversion'] = Quickbooks.minorversion url = add_query_string_to_url(url, params) do_http(:get, url, {}, headers) end diff --git a/lib/quickbooks/service/customer.rb b/lib/quickbooks/service/customer.rb index c108da72..b9a37609 100644 --- a/lib/quickbooks/service/customer.rb +++ b/lib/quickbooks/service/customer.rb @@ -9,17 +9,21 @@ def delete(customer) def url_for_resource(resource) url = super(resource) - "#{url}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" + #{}"#{url}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" + url end def fetch_by_id(id, params = {}) - url = "#{url_for_base}/customer/#{id}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" + url = "#{url_for_base}/customer/#{id}" + #?minorversion=#{Quickbooks::Model::Customer::MINORVERSION} fetch_object(model, url, params) end def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" + #&minorversion=#{Quickbooks::Model::Customer::MINORVERSION} + "#{url}" + end private diff --git a/spec/lib/quickbooks/service/customer_spec.rb b/spec/lib/quickbooks/service/customer_spec.rb index 2ddc0474..11cd7498 100644 --- a/spec/lib/quickbooks/service/customer_spec.rb +++ b/spec/lib/quickbooks/service/customer_spec.rb @@ -18,7 +18,8 @@ it "can fetch a customer by ID" do xml = fixture("fetch_customer_by_id.xml") model = Quickbooks::Model::Customer - stub_http_request(:get, "#{@service.url_for_base}/customer/1?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}", ["200", "OK"], xml) + + stub_http_request(:get, "#{@service.url_for_base}/customer/1?minorversion=#{Quickbooks.minorversion}", ["200", "OK"], xml) customer = @service.fetch_by_id(1) expect(customer.fully_qualified_name).to eq("Thrifty Meats") From 8d793d2f4198a2dcfb880b889e708589544e67dd Mon Sep 17 00:00:00 2001 From: cody caughlan Date: Thu, 7 May 2020 08:29:24 -0700 Subject: [PATCH 2/5] WIP --- lib/quickbooks/service/account.rb | 2 +- lib/quickbooks/service/base_service.rb | 3 +-- lib/quickbooks/service/customer.rb | 7 +------ lib/quickbooks/service/invoice.rb | 7 +++---- lib/quickbooks/service/item.rb | 8 +++----- lib/quickbooks/service/preferences.rb | 3 +-- spec/lib/quickbooks/service/account_spec.rb | 1 + spec/lib/quickbooks/service/base_service_spec.rb | 9 ++++++--- spec/lib/quickbooks/service/customer_spec.rb | 3 ++- spec/lib/quickbooks/service/invoice_spec.rb | 3 ++- spec/lib/quickbooks/service/item_spec.rb | 4 ++-- 11 files changed, 23 insertions(+), 27 deletions(-) diff --git a/lib/quickbooks/service/account.rb b/lib/quickbooks/service/account.rb index 7291b65f..dcea8654 100644 --- a/lib/quickbooks/service/account.rb +++ b/lib/quickbooks/service/account.rb @@ -9,7 +9,7 @@ def delete(account) def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Account::MINORVERSION}" + url end private diff --git a/lib/quickbooks/service/base_service.rb b/lib/quickbooks/service/base_service.rb index 7de291b9..55a75617 100644 --- a/lib/quickbooks/service/base_service.rb +++ b/lib/quickbooks/service/base_service.rb @@ -83,7 +83,7 @@ def url_for_query(query = nil, start_position = 1, max_results = 20, options = { query ||= default_model_query query = "#{query} STARTPOSITION #{start_position} MAXRESULTS #{max_results}" - "#{url_for_base}/query?query=#{CGI.escape(query)}" + "#{url_for_base}/query?query=#{CGI.escape(query)}&minorversion=#{Quickbooks.minorversion}" end private @@ -196,7 +196,6 @@ def do_http_post(url, body = "", params = {}, headers = {}) # throws IntuitReque end def do_http_get(url, params = {}, headers = {}) # throws IntuitRequestException - params['minorversion'] = Quickbooks.minorversion url = add_query_string_to_url(url, params) do_http(:get, url, {}, headers) end diff --git a/lib/quickbooks/service/customer.rb b/lib/quickbooks/service/customer.rb index b9a37609..736c353a 100644 --- a/lib/quickbooks/service/customer.rb +++ b/lib/quickbooks/service/customer.rb @@ -9,21 +9,16 @@ def delete(customer) def url_for_resource(resource) url = super(resource) - #{}"#{url}?minorversion=#{Quickbooks::Model::Customer::MINORVERSION}" url end def fetch_by_id(id, params = {}) url = "#{url_for_base}/customer/#{id}" - #?minorversion=#{Quickbooks::Model::Customer::MINORVERSION} fetch_object(model, url, params) end def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - #&minorversion=#{Quickbooks::Model::Customer::MINORVERSION} - "#{url}" - + super(query, start_position, max_results, options) end private diff --git a/lib/quickbooks/service/invoice.rb b/lib/quickbooks/service/invoice.rb index c1c4492b..8743d964 100644 --- a/lib/quickbooks/service/invoice.rb +++ b/lib/quickbooks/service/invoice.rb @@ -7,17 +7,16 @@ def delete(invoice) end def url_for_resource(resource) - url = super(resource) + super(resource) end def fetch_by_id(id, params = {}) - url = "#{url_for_base}/invoice/#{id}?minorversion=#{Quickbooks::Model::Invoice::MINORVERSION}" + url = "#{url_for_base}/invoice/#{id}" fetch_object(model, url, params) end def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Invoice::MINORVERSION}" + super(query, start_position, max_results, options) end def send(invoice, email_address=nil) diff --git a/lib/quickbooks/service/item.rb b/lib/quickbooks/service/item.rb index ef56735f..5853ea66 100644 --- a/lib/quickbooks/service/item.rb +++ b/lib/quickbooks/service/item.rb @@ -8,18 +8,16 @@ def delete(item) end def url_for_resource(resource) - url = super(resource) - "#{url}?minorversion=#{Quickbooks::Model::Item::MINORVERSION}" + super(resource) end def fetch_by_id(id, params = {}) - url = "#{url_for_base}/item/#{id}?minorversion=#{Quickbooks::Model::Item::MINORVERSION}" + url = "#{url_for_base}/item/#{id}" fetch_object(model, url, params) end def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Item::MINORVERSION}" + super(query, start_position, max_results, options) end private diff --git a/lib/quickbooks/service/preferences.rb b/lib/quickbooks/service/preferences.rb index 474bf8f5..36354854 100644 --- a/lib/quickbooks/service/preferences.rb +++ b/lib/quickbooks/service/preferences.rb @@ -3,8 +3,7 @@ module Service class Preferences < BaseService def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - "#{url}&minorversion=#{Quickbooks::Model::Preferences::MINORVERSION}" + super(query, start_position, max_results, options) end private diff --git a/spec/lib/quickbooks/service/account_spec.rb b/spec/lib/quickbooks/service/account_spec.rb index 0bf9c756..7f5b036d 100644 --- a/spec/lib/quickbooks/service/account_spec.rb +++ b/spec/lib/quickbooks/service/account_spec.rb @@ -5,6 +5,7 @@ it "can query for accounts" do xml = fixture("accounts.xml") + stub_http_request(:get, @service.url_for_query, ["200", "OK"], xml, {}, true) accounts = @service.query diff --git a/spec/lib/quickbooks/service/base_service_spec.rb b/spec/lib/quickbooks/service/base_service_spec.rb index 7bc83eb8..ea1f97da 100644 --- a/spec/lib/quickbooks/service/base_service_spec.rb +++ b/spec/lib/quickbooks/service/base_service_spec.rb @@ -223,8 +223,9 @@ end it "calls before_request" do + v = Quickbooks.minorversion output_string = "BEFORE REQUEST:\nurl: https://quickbooks.api.intuit.com/v3/company/9991111222/query?query=SE"\ - "LECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20\nheaders: {\"Content-Type\"=>\"applicatio"\ + "LECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20&minorversion=#{v}\nheaders: {\"Content-Type\"=>\"applicatio"\ "n/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate\"}\nbody: {}"\ "\nmethod: get\n" @@ -247,8 +248,9 @@ end it "calls after_request" do + v = Quickbooks.minorversion output_string = "AFTER REQUEST:\nurl: https://quickbooks.api.intuit.com/v3/company/9991111222/query?query=SEL"\ - "ECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20\nheaders: {\"Content-Type\"=>\"application"\ + "ECT+%2A+FROM+Vendor+STARTPOSITION+1+MAXRESULTS+20&minorversion=#{v}\nheaders: {\"Content-Type\"=>\"application"\ "/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate\", \"Authoriza"\ "tion\"=>\"Bearer token\"}\nbody: {}\nmethod: get\nresponse: \n\"application/xml\", \"Accept\"=>\"application/xml\", \"Accept-Encoding\"=>\"gzip, deflate"\ "\"}\nbody: {}\nmethod: get\nAROUND REQUEST (AFTER CALL):\nresponse: \n Date: Mon, 11 May 2020 09:32:29 -0700 Subject: [PATCH 3/5] Refactor to cleanup un-necessary methods pointed out by @drewish --- lib/quickbooks/service/account.rb | 5 ----- lib/quickbooks/service/item.rb | 8 -------- lib/quickbooks/service/preferences.rb | 4 ---- 3 files changed, 17 deletions(-) diff --git a/lib/quickbooks/service/account.rb b/lib/quickbooks/service/account.rb index dcea8654..ed8db0f0 100644 --- a/lib/quickbooks/service/account.rb +++ b/lib/quickbooks/service/account.rb @@ -7,11 +7,6 @@ def delete(account) update(account, :sparse => true) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - url = super(query, start_position, max_results, options) - url - end - private def model diff --git a/lib/quickbooks/service/item.rb b/lib/quickbooks/service/item.rb index 5853ea66..51b1c916 100644 --- a/lib/quickbooks/service/item.rb +++ b/lib/quickbooks/service/item.rb @@ -7,19 +7,11 @@ def delete(item) update(item, :sparse => true) end - def url_for_resource(resource) - super(resource) - end - def fetch_by_id(id, params = {}) url = "#{url_for_base}/item/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - super(query, start_position, max_results, options) - end - private def model diff --git a/lib/quickbooks/service/preferences.rb b/lib/quickbooks/service/preferences.rb index 36354854..4623e926 100644 --- a/lib/quickbooks/service/preferences.rb +++ b/lib/quickbooks/service/preferences.rb @@ -2,10 +2,6 @@ module Quickbooks module Service class Preferences < BaseService - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - super(query, start_position, max_results, options) - end - private def model From 1d0e87512f9011918f3350210da10c9d45427c55 Mon Sep 17 00:00:00 2001 From: cody caughlan Date: Tue, 12 May 2020 09:56:23 -0700 Subject: [PATCH 4/5] More refactorings based on @drewish feedback --- lib/quickbooks/service/customer.rb | 9 --------- lib/quickbooks/service/invoice.rb | 8 -------- 2 files changed, 17 deletions(-) diff --git a/lib/quickbooks/service/customer.rb b/lib/quickbooks/service/customer.rb index 736c353a..68f11dc4 100644 --- a/lib/quickbooks/service/customer.rb +++ b/lib/quickbooks/service/customer.rb @@ -7,20 +7,11 @@ def delete(customer) update(customer, :sparse => true) end - def url_for_resource(resource) - url = super(resource) - url - end - def fetch_by_id(id, params = {}) url = "#{url_for_base}/customer/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - super(query, start_position, max_results, options) - end - private def model diff --git a/lib/quickbooks/service/invoice.rb b/lib/quickbooks/service/invoice.rb index 8743d964..ed2dd44c 100644 --- a/lib/quickbooks/service/invoice.rb +++ b/lib/quickbooks/service/invoice.rb @@ -6,19 +6,11 @@ def delete(invoice) delete_by_query_string(invoice) end - def url_for_resource(resource) - super(resource) - end - def fetch_by_id(id, params = {}) url = "#{url_for_base}/invoice/#{id}" fetch_object(model, url, params) end - def url_for_query(query = nil, start_position = 1, max_results = 20, options = {}) - super(query, start_position, max_results, options) - end - def send(invoice, email_address=nil) query = email_address.present? ? "?sendTo=#{email_address}" : "" url = "#{url_for_resource(model::REST_RESOURCE)}/#{invoice.id}/send#{query}" From b6cea338415f75cf0002afe69757076780e0ce21 Mon Sep 17 00:00:00 2001 From: cody caughlan Date: Wed, 10 Jun 2020 12:50:33 -0700 Subject: [PATCH 5/5] updates to specs for ensuring all HTTP requests have a minorversion query string parameter --- lib/quickbooks/service/access_token.rb | 3 ++- lib/quickbooks/service/base_service.rb | 8 ++++++-- lib/quickbooks/service/service_crud_json.rb | 2 +- spec/lib/quickbooks/service/invoice_spec.rb | 14 ++++++++++---- spec/lib/quickbooks/service/purchase_order_spec.rb | 7 +++++-- spec/support/net_helpers.rb | 8 ++++++++ 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/lib/quickbooks/service/access_token.rb b/lib/quickbooks/service/access_token.rb index 010639d6..5e22dc39 100644 --- a/lib/quickbooks/service/access_token.rb +++ b/lib/quickbooks/service/access_token.rb @@ -23,7 +23,8 @@ def renew def disconnect conn = Faraday.new conn.basic_auth oauth.client.id, oauth.client.secret - response = conn.post(DISCONNECT_URL, token: oauth.refresh_token || oauth.token) + url = "#{DISCONNECT_URL}?minorversion=#{Quickbooks.minorversion}" + response = conn.post(url, token: oauth.refresh_token || oauth.token) if response.success? Quickbooks::Model::AccessTokenResponse.new(error_code: "0") diff --git a/lib/quickbooks/service/base_service.rb b/lib/quickbooks/service/base_service.rb index 55a75617..66c879e6 100644 --- a/lib/quickbooks/service/base_service.rb +++ b/lib/quickbooks/service/base_service.rb @@ -83,7 +83,7 @@ def url_for_query(query = nil, start_position = 1, max_results = 20, options = { query ||= default_model_query query = "#{query} STARTPOSITION #{start_position} MAXRESULTS #{max_results}" - "#{url_for_base}/query?query=#{CGI.escape(query)}&minorversion=#{Quickbooks.minorversion}" + "#{url_for_base}/query?query=#{CGI.escape(query)}" end private @@ -229,6 +229,8 @@ def do_http_file_upload(uploadIO, url, metadata = nil) body['file_metadata_0'] = param_part end + url = add_query_string_to_url(url, {}) + do_http(:upload, url, body, headers) end @@ -292,7 +294,9 @@ def oauth_post_with_multipart(url, body, headers) @oauth.post_with_multipart(url, headers: headers, body: body, raise_errors: false) end - def add_query_string_to_url(url, params) + def add_query_string_to_url(url, params = {}) + params ||= {} + params['minorversion'] = Quickbooks.minorversion if params.is_a?(Hash) && !params.empty? keyvalues = params.collect { |k| "#{k.first}=#{k.last}" }.join("&") delim = url.index("?") != nil ? "&" : "?" diff --git a/lib/quickbooks/service/service_crud_json.rb b/lib/quickbooks/service/service_crud_json.rb index 68594bc4..a540747c 100644 --- a/lib/quickbooks/service/service_crud_json.rb +++ b/lib/quickbooks/service/service_crud_json.rb @@ -8,7 +8,7 @@ def fetch_by_id(id, params = {}) def create(entity, options = {}) raise Quickbooks::InvalidModelException.new(entity.errors.full_messages.join(',')) unless entity.valid? - response = do_http(:post, url_for_resource(model.resource_for_singular), entity.to_json, options) + response = do_http_post(url_for_resource(model.resource_for_singular), entity.to_json, options) if response.code.to_i == 200 JSON.parse(response.plain_body) else diff --git a/spec/lib/quickbooks/service/invoice_spec.rb b/spec/lib/quickbooks/service/invoice_spec.rb index 1c0945c4..d29ca3fa 100644 --- a/spec/lib/quickbooks/service/invoice_spec.rb +++ b/spec/lib/quickbooks/service/invoice_spec.rb @@ -7,7 +7,7 @@ xml = fixture("invoices.xml") model = Quickbooks::Model::Invoice - url = "#{@service.url_for_query}&minorversion=#{Quickbooks.minorversion}" + url = @service.url_for_query stub_http_request(:get, url, ["200", "OK"], xml) invoices = @service.query expect(invoices.entries.count).to eq 1 @@ -19,7 +19,10 @@ it "can fetch an Invoice by ID" do xml = fixture("fetch_invoice_by_id.xml") model = Quickbooks::Model::Invoice - stub_http_request(:get, %r{#{@service.url_for_resource(model::REST_RESOURCE)}/1}, ["200", "OK"], xml) + + url = "#{@service.url_for_base}/invoice/1" + stub_http_request(:get, url, ["200", "OK"], xml) + invoice = @service.fetch_by_id(1) expect(invoice.doc_number).to eq "1001" end @@ -248,7 +251,9 @@ it "can read line items from a bundle" do xml = fixture("invoice_with_bundle_line_item.xml") - stub_http_request(:get, %r{#{@service.url_for_resource(Quickbooks::Model::Invoice::REST_RESOURCE)}/186}, ["200", "OK"], xml) + url = "#{@service.url_for_base}/invoice/186" + + stub_http_request(:get, url, ["200", "OK"], xml) invoice = @service.fetch_by_id(186) expect(invoice.valid?).to be true @@ -291,7 +296,8 @@ it "can sparse update an Invoice containing a bundle" do xml = fixture("invoice_with_bundle_line_item.xml") - stub_http_request(:get, %r{#{@service.url_for_resource(Quickbooks::Model::Invoice::REST_RESOURCE)}/186}, ["200", "OK"], xml) + url = "#{@service.url_for_base}/invoice/186" + stub_http_request(:get, url, ["200", "OK"], xml) invoice = @service.fetch_by_id(186) invoice.line_items.each do |l| diff --git a/spec/lib/quickbooks/service/purchase_order_spec.rb b/spec/lib/quickbooks/service/purchase_order_spec.rb index 92f770b2..3dcc8488 100644 --- a/spec/lib/quickbooks/service/purchase_order_spec.rb +++ b/spec/lib/quickbooks/service/purchase_order_spec.rb @@ -4,11 +4,14 @@ construct_service :purchase_order end - it "can delete a vendor" do + it "can delete a purchase order" do model = Quickbooks::Model::PurchaseOrder purchase_order = model.new xml = fixture("deleted_purchase_order.xml") - stub_http_request(:post, %r{#{@service.url_for_resource(model::REST_RESOURCE)}}, ["200", "OK"], xml, {}, false) + + url = "#{@service.url_for_resource(model::REST_RESOURCE)}?operation=delete" + + stub_http_request(:post, url, ["200", "OK"], xml, {}, false) expect(@service.delete(purchase_order)).to eq true end diff --git a/spec/support/net_helpers.rb b/spec/support/net_helpers.rb index ed5eae0d..b3f6752d 100644 --- a/spec/support/net_helpers.rb +++ b/spec/support/net_helpers.rb @@ -1,5 +1,13 @@ module NetHelpers def stub_http_request(method, url, status = ["200", "OK"], body = nil, headers = {}, strict = true) + unless url.index('minorversion') + if url.index('?') + url = "#{url}&minorversion=#{Quickbooks.minorversion}" + else + url = "#{url}?minorversion=#{Quickbooks.minorversion}" + end + end + #puts "URL: #{url}" stub_request(method, url).to_return(body: body, status: status) end end