summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Norman <jared@super.gd>2019-01-23 17:27:54 -0800
committerJared Norman <jared@super.gd>2019-01-23 17:27:54 -0800
commit8c1df35a32722bf654a7428bed4a868b90dfce4e (patch)
treefb5ab8ed891e28600a75d26e59b67d66aa747c14
parent751ce67631ea6df5ce2aa3baa5874b4c93b6a7c5 (diff)
Add support for fetching tax rates by location
-rw-r--r--lib/super_good/solidus_taxjar/api.rb10
-rw-r--r--spec/super_good/solidus_taxjar/api_spec.rb57
2 files changed, 67 insertions, 0 deletions
diff --git a/lib/super_good/solidus_taxjar/api.rb b/lib/super_good/solidus_taxjar/api.rb
index 1065ae5..ffefd5f 100644
--- a/lib/super_good/solidus_taxjar/api.rb
+++ b/lib/super_good/solidus_taxjar/api.rb
@@ -16,6 +16,16 @@ module SuperGood
taxjar_client.tax_for_order order_params(order)
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
+ )
+ end
+
private
attr_reader :taxjar_client
diff --git a/spec/super_good/solidus_taxjar/api_spec.rb b/spec/super_good/solidus_taxjar/api_spec.rb
index cbacad5..ef1a96d 100644
--- a/spec/super_good/solidus_taxjar/api_spec.rb
+++ b/spec/super_good/solidus_taxjar/api_spec.rb
@@ -132,4 +132,61 @@ RSpec.describe SuperGood::SolidusTaxJar::API do
it { is_expected.to eq({ some_kind_of: "response" }) }
end
+
+ 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
+
+ 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" })
+ end
+
+ it { is_expected.to eq({ some_kind_of: "response" }) }
+ end
end