summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/super_good/solidus_taxjar/api.rb8
-rw-r--r--lib/super_good/solidus_taxjar/api_params.rb16
-rw-r--r--spec/super_good/solidus_taxjar/api_params_spec.rb16
-rw-r--r--spec/super_good/solidus_taxjar/api_spec.rb59
4 files changed, 43 insertions, 56 deletions
diff --git a/lib/super_good/solidus_taxjar/api.rb b/lib/super_good/solidus_taxjar/api.rb
index 1392a47..d52a4a4 100644
--- a/lib/super_good/solidus_taxjar/api.rb
+++ b/lib/super_good/solidus_taxjar/api.rb
@@ -17,13 +17,7 @@ module SuperGood
end
def tax_rates_for(address)
- taxjar_client.rates_for_location(
- address.zipcode,
- street: address.address1,
- city: address.city,
- state: address&.state&.abbr || address.state_name,
- country: address.country.iso
- )
+ taxjar_client.rates_for_location(*APIParams.address_params(address))
end
private
diff --git a/lib/super_good/solidus_taxjar/api_params.rb b/lib/super_good/solidus_taxjar/api_params.rb
index eba0947..4e61253 100644
--- a/lib/super_good/solidus_taxjar/api_params.rb
+++ b/lib/super_good/solidus_taxjar/api_params.rb
@@ -4,14 +4,26 @@ module SuperGood
class << self
def order_params(order)
{}
- .merge(address_params(order.tax_address))
+ .merge(order_address_params(order.tax_address))
.merge(line_items_params(order.line_items))
.merge(shipping: order.shipment_total)
end
+ def address_params(address)
+ [
+ address.zipcode,
+ {
+ street: address.address1,
+ city: address.city,
+ state: address&.state&.abbr || address.state_name,
+ country: address.country.iso
+ }
+ ]
+ end
+
private
- def address_params(address)
+ def order_address_params(address)
{
to_country: address.country.iso,
to_zip: address.zipcode,
diff --git a/spec/super_good/solidus_taxjar/api_params_spec.rb b/spec/super_good/solidus_taxjar/api_params_spec.rb
index d880e7f..8677153 100644
--- a/spec/super_good/solidus_taxjar/api_params_spec.rb
+++ b/spec/super_good/solidus_taxjar/api_params_spec.rb
@@ -122,4 +122,20 @@ RSpec.describe SuperGood::SolidusTaxJar::APIParams do
)
end
end
+
+ describe "#address_params" do
+ subject { described_class.address_params(ship_address) }
+
+ it "returns params for fetching the tax info for that address" do
+ expect(subject).to eq([
+ "90210",
+ {
+ city: "Los Angeles",
+ country: "US",
+ state: "CA",
+ street: "475 N Beverly Dr"
+ }
+ ])
+ end
+ end
end
diff --git a/spec/super_good/solidus_taxjar/api_spec.rb b/spec/super_good/solidus_taxjar/api_spec.rb
index 2c35299..1b6defd 100644
--- a/spec/super_good/solidus_taxjar/api_spec.rb
+++ b/spec/super_good/solidus_taxjar/api_spec.rb
@@ -26,55 +26,20 @@ RSpec.describe SuperGood::SolidusTaxJar::API do
describe "#tax_rates_for" do
subject { api.tax_rates_for address }
- let(:api) do
- described_class.new(taxjar_client: dummy_client)
- end
-
- let(:dummy_client) do
- instance_double ::Taxjar::Client
- end
-
- let(:address) do
- Spree::Address.create!(
- country: country_us,
- state: state_california,
- zipcode: "90210",
- city: "Los Angeles",
- address1: "475 N Beverly Dr",
-
- first_name: "Chuck",
- last_name: "Schuldiner",
- phone: "1-250-555-4444"
- )
- end
-
- let(:country_us) do
- Spree::Country.create!(
- iso_name: "UNITED STATES",
- iso: "US",
- iso3: "USA",
- name: "United States",
- numcode: 840,
- states_required: true
- )
- end
-
- let(:state_california) do
- Spree::State.create!(
- country: country_us,
- name: "California",
- abbr: "CA"
- )
- end
+ let(:api) { described_class.new(taxjar_client: dummy_client) }
+ let(:dummy_client) { instance_double ::Taxjar::Client }
+ let(:address) { Spree::Address.new }
before do
- allow(dummy_client).to receive(:rates_for_location).with(
- "90210",
- country: "US",
- city: "Los Angeles",
- state: "CA",
- street: "475 N Beverly Dr"
- ).and_return({ some_kind_of: "response" })
+ allow(SuperGood::SolidusTaxJar::APIParams)
+ .to receive(:address_params)
+ .with(address)
+ .and_return(["zipcode", { address: "params" }])
+
+ allow(dummy_client)
+ .to receive(:rates_for_location)
+ .with("zipcode", { address: "params" })
+ .and_return({ some_kind_of: "response" })
end
it { is_expected.to eq({ some_kind_of: "response" }) }