diff --git a/api/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb b/api/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb index 6924f8ac671..d8f103c1831 100644 --- a/api/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +++ b/api/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb @@ -4,6 +4,8 @@ module V2 module Storefront module Account class AddressesController < ::Spree::Api::V2::ResourceController + include Spree::BaseHelper + before_action :require_spree_current_user def create @@ -37,7 +39,7 @@ def collection end def scope - super.where(user: spree_current_user).not_deleted + super.where(user: spree_current_user, country: available_countries).not_deleted end def model_class diff --git a/api/spec/requests/spree/api/v2/storefront/account/addresses_spec.rb b/api/spec/requests/spree/api/v2/storefront/account/addresses_spec.rb index 4fc09c1b705..38c22d8b07b 100644 --- a/api/spec/requests/spree/api/v2/storefront/account/addresses_spec.rb +++ b/api/spec/requests/spree/api/v2/storefront/account/addresses_spec.rb @@ -6,6 +6,7 @@ let!(:addresses) { create_list(:address, 3, user_id: user.id) } let!(:country) { create(:country, iso: 'GBR') } let!(:state) { create(:state, country: country) } + let(:store) { Spree::Store.default } shared_examples 'returns valid user addresses resource JSON' do it 'returns a valid user addresses resource JSON response' do @@ -67,6 +68,40 @@ end end + context 'when address from countries that are supported in the current store' do + let(:country) { create(:country, name: 'France') } + let(:zone) { create(:zone, name: 'EU_VAT', countries: [country], kind: 'country') } + let!(:eu_address) { create(:address, user_id: user.id, country: country) } + + before do + store.update(checkout_zone: zone) + get '/api/v2/storefront/account/addresses', headers: headers_bearer + end + + it 'should return addresses from supported countries' do + expect(user.addresses.size).to eq 4 + expect(json_response['data'].size).to eq 1 + expect(json_response['data'][0]).to have_attribute(:country_name).with_value(eu_address.country.name) + end + end + + context 'when address from countries that are not supported in the current store' do + let(:eu_country) { create(:country, name: 'France') } + let(:zone) { create(:zone, name: 'EU_VAT', countries: [eu_country], kind: 'country') } + let(:country) { create(:country) } + let!(:us_address) { create(:address, user_id: user.id, country: country) } + + before do + store.update(checkout_zone: zone) + get '/api/v2/storefront/account/addresses', headers: headers_bearer + end + + it 'should not return addresses from not supported countries' do + expect(user.addresses.size).to eq 4 + expect(json_response['data'].size).to eq 0 + end + end + context 'when address without user exists' do let!(:address) { create(:address, user_id: nil) }