spree_core 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/spree/core/version.rb +1 -1
- data/spree_core.gemspec +1 -1
- metadata +3 -206
- data/spec/fixtures/microdata.html +0 -22
- data/spec/fixtures/microdata_itemref.html +0 -15
- data/spec/fixtures/microdata_no_itemscope.html +0 -20
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -200
- data/spec/helpers/products_helper_spec.rb +0 -289
- data/spec/lib/calculated_adjustments_spec.rb +0 -7
- data/spec/lib/i18n_spec.rb +0 -123
- data/spec/lib/search/base_spec.rb +0 -86
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
- data/spec/lib/spree/core/importer/order_spec.rb +0 -605
- data/spec/lib/spree/core/number_generator_spec.rb +0 -175
- data/spec/lib/spree/core/token_generator_spec.rb +0 -24
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core_spec.rb +0 -23
- data/spec/lib/spree/localized_number_spec.rb +0 -48
- data/spec/lib/spree/migrations_spec.rb +0 -36
- data/spec/lib/spree/money_spec.rb +0 -122
- data/spec/lib/tasks/exchanges_spec.rb +0 -136
- data/spec/mailers/order_mailer_spec.rb +0 -122
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
- data/spec/mailers/shipment_mailer_spec.rb +0 -81
- data/spec/mailers/test_mailer_spec.rb +0 -38
- data/spec/models/option_type_prototype_spec.rb +0 -9
- data/spec/models/spree/ability_spec.rb +0 -251
- data/spec/models/spree/address_spec.rb +0 -402
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
- data/spec/models/spree/adjustment_spec.rb +0 -189
- data/spec/models/spree/app_configuration_spec.rb +0 -26
- data/spec/models/spree/asset_spec.rb +0 -28
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
- data/spec/models/spree/calculator/shipping.rb +0 -8
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
- data/spec/models/spree/calculator_spec.rb +0 -69
- data/spec/models/spree/classification_spec.rb +0 -93
- data/spec/models/spree/concerns/display_money_spec.rb +0 -43
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
- data/spec/models/spree/country_spec.rb +0 -55
- data/spec/models/spree/credit_card_spec.rb +0 -328
- data/spec/models/spree/customer_return_spec.rb +0 -240
- data/spec/models/spree/exchange_spec.rb +0 -75
- data/spec/models/spree/gateway/bogus_simple.rb +0 -20
- data/spec/models/spree/gateway/bogus_spec.rb +0 -13
- data/spec/models/spree/gateway_spec.rb +0 -61
- data/spec/models/spree/image_spec.rb +0 -8
- data/spec/models/spree/inventory_unit_spec.rb +0 -256
- data/spec/models/spree/line_item_spec.rb +0 -346
- data/spec/models/spree/option_type_spec.rb +0 -14
- data/spec/models/spree/option_value_spec.rb +0 -18
- data/spec/models/spree/order/address_spec.rb +0 -50
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -42
- data/spec/models/spree/order/checkout_spec.rb +0 -770
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
- data/spec/models/spree/order/finalizing_spec.rb +0 -114
- data/spec/models/spree/order/helpers_spec.rb +0 -5
- data/spec/models/spree/order/payment_spec.rb +0 -214
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
- data/spec/models/spree/order/shipments_spec.rb +0 -43
- data/spec/models/spree/order/state_machine_spec.rb +0 -212
- data/spec/models/spree/order/store_credit_spec.rb +0 -426
- data/spec/models/spree/order/tax_spec.rb +0 -84
- data/spec/models/spree/order/totals_spec.rb +0 -24
- data/spec/models/spree/order/updating_spec.rb +0 -18
- data/spec/models/spree/order/validations_spec.rb +0 -15
- data/spec/models/spree/order_contents_spec.rb +0 -297
- data/spec/models/spree/order_inventory_spec.rb +0 -239
- data/spec/models/spree/order_merger_spec.rb +0 -135
- data/spec/models/spree/order_spec.rb +0 -1046
- data/spec/models/spree/order_updater_spec.rb +0 -305
- data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
- data/spec/models/spree/payment/store_credit_spec.rb +0 -60
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
- data/spec/models/spree/payment_method_spec.rb +0 -103
- data/spec/models/spree/payment_spec.rb +0 -919
- data/spec/models/spree/preference_spec.rb +0 -80
- data/spec/models/spree/preferences/configuration_spec.rb +0 -30
- data/spec/models/spree/preferences/preferable_spec.rb +0 -344
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
- data/spec/models/spree/preferences/store_spec.rb +0 -46
- data/spec/models/spree/price_spec.rb +0 -128
- data/spec/models/spree/product/scopes_spec.rb +0 -183
- data/spec/models/spree/product_duplicator_spec.rb +0 -103
- data/spec/models/spree/product_filter_spec.rb +0 -26
- data/spec/models/spree/product_option_type_spec.rb +0 -9
- data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
- data/spec/models/spree/product_property_spec.rb +0 -26
- data/spec/models/spree/product_spec.rb +0 -629
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
- data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
- data/spec/models/spree/promotion_action_spec.rb +0 -10
- data/spec/models/spree/promotion_category_spec.rb +0 -17
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
- data/spec/models/spree/promotion_rule_spec.rb +0 -29
- data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
- data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
- data/spec/models/spree/promotion_spec.rb +0 -679
- data/spec/models/spree/property_prototype_spec.rb +0 -9
- data/spec/models/spree/property_spec.rb +0 -5
- data/spec/models/spree/prototype_spec.rb +0 -5
- data/spec/models/spree/prototype_taxon_spec.rb +0 -9
- data/spec/models/spree/refund_reason_spec.rb +0 -20
- data/spec/models/spree/refund_spec.rb +0 -195
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
- data/spec/models/spree/reimbursement_spec.rb +0 -188
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
- data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
- data/spec/models/spree/return_authorization_spec.rb +0 -230
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -731
- data/spec/models/spree/returns_calculator_spec.rb +0 -14
- data/spec/models/spree/role_spec.rb +0 -7
- data/spec/models/spree/shipment_spec.rb +0 -742
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_category_spec.rb +0 -19
- data/spec/models/spree/shipping_method_spec.rb +0 -95
- data/spec/models/spree/shipping_rate_spec.rb +0 -140
- data/spec/models/spree/state_spec.rb +0 -29
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
- data/spec/models/spree/stock/content_item_spec.rb +0 -31
- data/spec/models/spree/stock/coordinator_spec.rb +0 -61
- data/spec/models/spree/stock/differentiator_spec.rb +0 -39
- data/spec/models/spree/stock/estimator_spec.rb +0 -202
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/packer_spec.rb +0 -70
- data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
- data/spec/models/spree/stock/quantifier_spec.rb +0 -126
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
- data/spec/models/spree/stock_item_spec.rb +0 -432
- data/spec/models/spree/stock_location_spec.rb +0 -243
- data/spec/models/spree/stock_movement_spec.rb +0 -120
- data/spec/models/spree/stock_transfer_spec.rb +0 -50
- data/spec/models/spree/store_credit_event_spec.rb +0 -101
- data/spec/models/spree/store_credit_spec.rb +0 -786
- data/spec/models/spree/store_spec.rb +0 -78
- data/spec/models/spree/tax_category_spec.rb +0 -32
- data/spec/models/spree/tax_rate_spec.rb +0 -561
- data/spec/models/spree/taxon_spec.rb +0 -85
- data/spec/models/spree/taxonomy_spec.rb +0 -18
- data/spec/models/spree/tracker_spec.rb +0 -21
- data/spec/models/spree/user_spec.rb +0 -203
- data/spec/models/spree/variant_spec.rb +0 -818
- data/spec/models/spree/zone_member_spec.rb +0 -38
- data/spec/models/spree/zone_spec.rb +0 -472
- data/spec/spec_helper.rb +0 -79
- data/spec/support/big_decimal.rb +0 -5
- data/spec/support/concerns/adjustment_source.rb +0 -23
- data/spec/support/concerns/default_price.rb +0 -37
- data/spec/support/rake.rb +0 -13
- data/spec/support/test_gateway.rb +0 -2
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Store, type: :model do
|
|
4
|
-
|
|
5
|
-
describe ".by_url" do
|
|
6
|
-
let!(:store) { create(:store, url: "website1.com\nwww.subdomain.com") }
|
|
7
|
-
let!(:store_2) { create(:store, url: 'freethewhales.com') }
|
|
8
|
-
|
|
9
|
-
it "should find stores by url" do
|
|
10
|
-
by_domain = Spree::Store.by_url('www.subdomain.com')
|
|
11
|
-
|
|
12
|
-
expect(by_domain).to include(store)
|
|
13
|
-
expect(by_domain).not_to include(store_2)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe '.current' do
|
|
18
|
-
# there is a default store created with the test_app rake task.
|
|
19
|
-
let!(:store_1) { Spree::Store.first || create(:store) }
|
|
20
|
-
|
|
21
|
-
let!(:store_2) { create(:store, default: false, url: 'www.subdomain.com') }
|
|
22
|
-
|
|
23
|
-
it 'should return default when no domain' do
|
|
24
|
-
expect(subject.class.current).to eql(store_1)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'should return store for domain' do
|
|
28
|
-
expect(subject.class.current('spreecommerce.com')).to eql(store_1)
|
|
29
|
-
expect(subject.class.current('www.subdomain.com')).to eql(store_2)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
describe '.default' do
|
|
34
|
-
context 'when a default store is already present' do
|
|
35
|
-
let!(:store) { create(:store) }
|
|
36
|
-
let!(:store_2) { create(:store, default: true) }
|
|
37
|
-
|
|
38
|
-
it 'should return the already existing default store' do
|
|
39
|
-
expect(Spree::Store.default).to eq(store_2)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should ensure there is a default if one doesn't exist yet" do
|
|
43
|
-
expect(store_2.default).to be true
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it 'should ensure there is only one default' do
|
|
47
|
-
[store, store_2].each(&:reload)
|
|
48
|
-
|
|
49
|
-
expect(Spree::Store.where(default: true).count).to eq(1)
|
|
50
|
-
expect(store_2.default).to be true
|
|
51
|
-
expect(store.default).not_to be true
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context 'when store is not saved' do
|
|
55
|
-
before do
|
|
56
|
-
store.default = true
|
|
57
|
-
store.code = nil
|
|
58
|
-
store.save
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'ensure old default location still default' do
|
|
62
|
-
[store, store_2].each(&:reload)
|
|
63
|
-
expect(store.default).to be false
|
|
64
|
-
expect(store_2.default).to be true
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
context 'when a default store is not present' do
|
|
70
|
-
it 'should build a new default store' do
|
|
71
|
-
expect(Spree::Store.default.class).to eq(Spree::Store)
|
|
72
|
-
expect(Spree::Store.default.persisted?).to eq(false)
|
|
73
|
-
expect(Spree::Store.default.default).to be(true)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::TaxCategory, type: :model do
|
|
4
|
-
describe 'Validations' do
|
|
5
|
-
it { is_expected.to validate_presence_of(:name) }
|
|
6
|
-
it { is_expected.to validate_uniqueness_of(:name).scoped_to(:deleted_at).case_insensitive.allow_blank }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
context 'default tax category' do
|
|
10
|
-
let(:tax_category) { create(:tax_category) }
|
|
11
|
-
let(:new_tax_category) { create(:tax_category) }
|
|
12
|
-
|
|
13
|
-
before do
|
|
14
|
-
tax_category.update_column(:is_default, true)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should undefault the previous default tax category" do
|
|
18
|
-
new_tax_category.update_attributes({is_default: true})
|
|
19
|
-
expect(new_tax_category.is_default).to be true
|
|
20
|
-
|
|
21
|
-
tax_category.reload
|
|
22
|
-
expect(tax_category.is_default).to be false
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should undefault the previous default tax category except when updating the existing default tax category" do
|
|
26
|
-
tax_category.update_column(:description, "Updated description")
|
|
27
|
-
|
|
28
|
-
tax_category.reload
|
|
29
|
-
expect(tax_category.is_default).to be true
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,561 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::TaxRate, type: :model do
|
|
4
|
-
context "match" do
|
|
5
|
-
let(:order) { create(:order) }
|
|
6
|
-
let(:country) { create(:country) }
|
|
7
|
-
let(:tax_category) { create(:tax_category) }
|
|
8
|
-
let(:calculator) { Spree::Calculator::FlatRate.new }
|
|
9
|
-
|
|
10
|
-
it "should return an empty array when tax_zone is nil" do
|
|
11
|
-
allow(order).to receive_messages tax_zone: nil
|
|
12
|
-
expect(Spree::TaxRate.match(order.tax_zone)).to eq([])
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
context "when no rate zones match the tax zone" do
|
|
16
|
-
before do
|
|
17
|
-
Spree::TaxRate.create(amount: 1, zone: create(:zone))
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
context "when there is no default tax zone" do
|
|
21
|
-
before do
|
|
22
|
-
@zone = create(:zone, name: "Country Zone", default_tax: false, zone_members: [])
|
|
23
|
-
@zone.zone_members.create(zoneable: country)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should return an empty array" do
|
|
27
|
-
allow(order).to receive_messages tax_zone: @zone
|
|
28
|
-
expect(Spree::TaxRate.match(order.tax_zone)).to eq([])
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should return the rate that matches the rate zone" do
|
|
32
|
-
rate = Spree::TaxRate.create(
|
|
33
|
-
amount: 1,
|
|
34
|
-
zone: @zone,
|
|
35
|
-
tax_category: tax_category,
|
|
36
|
-
calculator: calculator
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
allow(order).to receive_messages tax_zone: @zone
|
|
40
|
-
expect(Spree::TaxRate.match(order.tax_zone)).to eq([rate])
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "should return all rates that match the rate zone" do
|
|
44
|
-
rate1 = Spree::TaxRate.create(
|
|
45
|
-
amount: 1,
|
|
46
|
-
zone: @zone,
|
|
47
|
-
tax_category: tax_category,
|
|
48
|
-
calculator: calculator
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
rate2 = Spree::TaxRate.create(
|
|
52
|
-
amount: 2,
|
|
53
|
-
zone: @zone,
|
|
54
|
-
tax_category: tax_category,
|
|
55
|
-
calculator: Spree::Calculator::FlatRate.new
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
allow(order).to receive_messages tax_zone: @zone
|
|
59
|
-
expect(Spree::TaxRate.match(order.tax_zone)).to match_array([rate1, rate2])
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
context "when the tax_zone is contained within a rate zone" do
|
|
63
|
-
before do
|
|
64
|
-
sub_zone = create(:zone, name: "State Zone", zone_members: [])
|
|
65
|
-
sub_zone.zone_members.create(zoneable: create(:state, country: country))
|
|
66
|
-
allow(order).to receive_messages tax_zone: sub_zone
|
|
67
|
-
@rate = Spree::TaxRate.create(
|
|
68
|
-
amount: 1,
|
|
69
|
-
zone: @zone,
|
|
70
|
-
tax_category: tax_category,
|
|
71
|
-
calculator: calculator
|
|
72
|
-
)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should return the rate zone" do
|
|
76
|
-
expect(Spree::TaxRate.match(order.tax_zone)).to eq([@rate])
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
context "when there is a default tax zone" do
|
|
82
|
-
before do
|
|
83
|
-
@zone = create(:zone, name: "Country Zone", default_tax: true, zone_members: [])
|
|
84
|
-
@zone.zone_members.create(zoneable: country)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
let(:included_in_price) { false }
|
|
88
|
-
let!(:rate) do
|
|
89
|
-
Spree::TaxRate.create(amount: 1,
|
|
90
|
-
zone: @zone,
|
|
91
|
-
tax_category: tax_category,
|
|
92
|
-
calculator: calculator,
|
|
93
|
-
included_in_price: included_in_price)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
subject { Spree::TaxRate.match(order.tax_zone) }
|
|
97
|
-
|
|
98
|
-
context "when the order has the same tax zone" do
|
|
99
|
-
before do
|
|
100
|
-
allow(order).to receive_messages tax_zone: @zone
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
context "when the tax is not a VAT" do
|
|
104
|
-
it { is_expected.to eq([rate]) }
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
context "when the tax is a VAT" do
|
|
108
|
-
let(:included_in_price) { true }
|
|
109
|
-
it { is_expected.to eq([rate]) }
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
context "when the order has a different tax zone" do
|
|
114
|
-
before do
|
|
115
|
-
allow(order).to receive_messages tax_zone: create(:zone, name: "Other Zone")
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
context "when the tax is a VAT" do
|
|
119
|
-
let(:included_in_price) { true }
|
|
120
|
-
# The rate should NOT match in this instance because:
|
|
121
|
-
# The order has a different tax zone, and the price is
|
|
122
|
-
# henceforth a net price and will not change.
|
|
123
|
-
it 'return no tax rate' do
|
|
124
|
-
expect(subject).to be_empty
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
context "when the tax is not VAT" do
|
|
129
|
-
it "returns no tax rate" do
|
|
130
|
-
expect(subject).to be_empty
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
describe ".adjust" do
|
|
139
|
-
let(:order) { stub_model(Spree::Order) }
|
|
140
|
-
let(:tax_category_1) { stub_model(Spree::TaxCategory) }
|
|
141
|
-
let(:tax_category_2) { stub_model(Spree::TaxCategory) }
|
|
142
|
-
let(:rate_1) { stub_model(Spree::TaxRate, tax_category: tax_category_1) }
|
|
143
|
-
let(:rate_2) { stub_model(Spree::TaxRate, tax_category: tax_category_2) }
|
|
144
|
-
|
|
145
|
-
context "with line items" do
|
|
146
|
-
let(:line_item) do
|
|
147
|
-
stub_model(Spree::LineItem,
|
|
148
|
-
price: 10.0,
|
|
149
|
-
quantity: 1,
|
|
150
|
-
tax_category: tax_category_1,
|
|
151
|
-
variant: stub_model(Spree::Variant)
|
|
152
|
-
)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
let(:line_items) { [line_item] }
|
|
156
|
-
|
|
157
|
-
before do
|
|
158
|
-
allow(Spree::TaxRate).to receive_messages match: [rate_1, rate_2]
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should apply adjustments for two tax rates to the order" do
|
|
162
|
-
expect(rate_1).to receive(:adjust)
|
|
163
|
-
expect(rate_2).not_to receive(:adjust)
|
|
164
|
-
Spree::TaxRate.adjust(order, line_items)
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
context "without tax rates" do
|
|
169
|
-
let(:line_item) do
|
|
170
|
-
stub_model(Spree::LineItem,
|
|
171
|
-
:price => 10.0,
|
|
172
|
-
:quantity => 2,
|
|
173
|
-
:tax_category => nil,
|
|
174
|
-
:variant => stub_model(Spree::Variant)
|
|
175
|
-
)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
let(:line_items) { [line_item] }
|
|
179
|
-
|
|
180
|
-
it "should update pre_tax_total to match line item cost if no taxes" do
|
|
181
|
-
line_item.tax_category = nil
|
|
182
|
-
Spree::TaxRate.adjust(order, line_items)
|
|
183
|
-
expect(line_item.pre_tax_amount).to eq line_item.price * line_item.quantity
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
context "with shipments" do
|
|
188
|
-
let(:shipments) { [stub_model(Spree::Shipment, cost: 10.0, tax_category: tax_category_1)] }
|
|
189
|
-
|
|
190
|
-
before do
|
|
191
|
-
allow(Spree::TaxRate).to receive_messages match: [rate_1, rate_2]
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
it "should apply adjustments for two tax rates to the order" do
|
|
195
|
-
expect(rate_1).to receive(:adjust)
|
|
196
|
-
expect(rate_2).not_to receive(:adjust)
|
|
197
|
-
Spree::TaxRate.adjust(order, shipments)
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
context "for MOSS taxation in Europe" do
|
|
202
|
-
let(:germany) { create :country, name: "Germany" }
|
|
203
|
-
let(:india) { create :country, name: "India" }
|
|
204
|
-
let(:france) { create :country, name: "France" }
|
|
205
|
-
let(:france_zone) { create :zone_with_country, name: "France Zone" }
|
|
206
|
-
let(:germany_zone) { create :zone_with_country, name: "Germany Zone", default_tax: true }
|
|
207
|
-
let(:india_zone) { create :zone_with_country, name: "India" }
|
|
208
|
-
let(:moss_category) { Spree::TaxCategory.create(name: "Digital Goods") }
|
|
209
|
-
let(:normal_category) { Spree::TaxCategory.create(name: "Analogue Goods") }
|
|
210
|
-
let(:eu_zone) { create(:zone, name: "EU") }
|
|
211
|
-
|
|
212
|
-
let!(:german_vat) do
|
|
213
|
-
Spree::TaxRate.create(
|
|
214
|
-
name: "German VAT",
|
|
215
|
-
amount: 0.19,
|
|
216
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
217
|
-
tax_category: moss_category,
|
|
218
|
-
zone: germany_zone,
|
|
219
|
-
included_in_price: true
|
|
220
|
-
)
|
|
221
|
-
end
|
|
222
|
-
let!(:french_vat) do
|
|
223
|
-
Spree::TaxRate.create(
|
|
224
|
-
name: "French VAT",
|
|
225
|
-
amount: 0.25,
|
|
226
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
227
|
-
tax_category: moss_category,
|
|
228
|
-
zone: france_zone,
|
|
229
|
-
included_in_price: true
|
|
230
|
-
)
|
|
231
|
-
end
|
|
232
|
-
let!(:eu_vat) do
|
|
233
|
-
Spree::TaxRate.create(
|
|
234
|
-
name: "EU_VAT",
|
|
235
|
-
amount: 0.19,
|
|
236
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
237
|
-
tax_category: normal_category,
|
|
238
|
-
zone: eu_zone,
|
|
239
|
-
included_in_price: true
|
|
240
|
-
)
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
let(:download) { create(:product, tax_category: moss_category, price: 100) }
|
|
244
|
-
let(:tshirt) { create(:product, tax_category: normal_category, price: 100) }
|
|
245
|
-
let(:order) { Spree::Order.create }
|
|
246
|
-
|
|
247
|
-
before do
|
|
248
|
-
germany_zone.zone_members.create(zoneable: germany)
|
|
249
|
-
france_zone.zone_members.create(zoneable: france)
|
|
250
|
-
india_zone.zone_members.create(zoneable: india)
|
|
251
|
-
eu_zone.zone_members.create(zoneable: germany)
|
|
252
|
-
eu_zone.zone_members.create(zoneable: france)
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
context "a download" do
|
|
256
|
-
before do
|
|
257
|
-
order.contents.add(download.master, 1)
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
it "without an adress costs 100 euros including tax" do
|
|
261
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
262
|
-
order.update_with_updater!
|
|
263
|
-
expect(order.display_total).to eq(Spree::Money.new(100))
|
|
264
|
-
expect(order.included_tax_total).to eq(15.97)
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
it "to germany costs 100 euros including tax" do
|
|
268
|
-
allow(order).to receive(:tax_zone).and_return(germany_zone)
|
|
269
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
270
|
-
order.update_with_updater!
|
|
271
|
-
expect(order.display_total).to eq(Spree::Money.new(100))
|
|
272
|
-
expect(order.included_tax_total).to eq(15.97)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "to france costs more including tax" do
|
|
276
|
-
allow(order).to receive(:tax_zone).and_return(france_zone)
|
|
277
|
-
order.update_line_item_prices!
|
|
278
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
279
|
-
order.update_with_updater!
|
|
280
|
-
expect(order.display_total).to eq(Spree::Money.new(105.04))
|
|
281
|
-
expect(order.included_tax_total).to eq(21.01)
|
|
282
|
-
expect(order.additional_tax_total).to eq(0)
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
it "to somewhere else costs the net amount" do
|
|
286
|
-
allow(order).to receive(:tax_zone).and_return(india_zone)
|
|
287
|
-
order.update_line_item_prices!
|
|
288
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
289
|
-
order.update_with_updater!
|
|
290
|
-
expect(order.included_tax_total).to eq(0)
|
|
291
|
-
expect(order.included_tax_total).to eq(0)
|
|
292
|
-
expect(order.display_total).to eq(Spree::Money.new(84.03))
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
context "a t-shirt" do
|
|
297
|
-
before do
|
|
298
|
-
order.contents.add(tshirt.master, 1)
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
it "to germany costs 100 euros including tax" do
|
|
302
|
-
allow(order).to receive(:tax_zone).and_return(germany_zone)
|
|
303
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
304
|
-
order.update_with_updater!
|
|
305
|
-
expect(order.display_total).to eq(Spree::Money.new(100))
|
|
306
|
-
expect(order.included_tax_total).to eq(15.97)
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it "to france costs 100 euros including tax" do
|
|
310
|
-
allow(order).to receive(:tax_zone).and_return(france_zone)
|
|
311
|
-
order.update_line_item_prices!
|
|
312
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
313
|
-
order.update_with_updater!
|
|
314
|
-
expect(order.display_total).to eq(Spree::Money.new(100.00))
|
|
315
|
-
expect(order.included_tax_total).to eq(15.97)
|
|
316
|
-
expect(order.additional_tax_total).to eq(0)
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
it "to somewhere else costs the net amount" do
|
|
320
|
-
allow(order).to receive(:tax_zone).and_return(india_zone)
|
|
321
|
-
order.update_line_item_prices!
|
|
322
|
-
Spree::TaxRate.adjust(order, order.line_items)
|
|
323
|
-
order.update_with_updater!
|
|
324
|
-
expect(order.included_tax_total).to eq(0)
|
|
325
|
-
expect(order.display_total).to eq(Spree::Money.new(84.03))
|
|
326
|
-
end
|
|
327
|
-
end
|
|
328
|
-
end
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
describe ".included_tax_amount_for" do
|
|
332
|
-
let!(:order) { create :order_with_line_items }
|
|
333
|
-
let!(:included_tax_rate) do
|
|
334
|
-
create :tax_rate,
|
|
335
|
-
included_in_price: true,
|
|
336
|
-
tax_category: order.line_items.first.tax_category,
|
|
337
|
-
zone: order.tax_zone,
|
|
338
|
-
amount: 0.4
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
let!(:other_included_tax_rate) do
|
|
342
|
-
create :tax_rate,
|
|
343
|
-
included_in_price: true,
|
|
344
|
-
tax_category: order.line_items.first.tax_category,
|
|
345
|
-
zone: order.tax_zone,
|
|
346
|
-
amount: 0.05
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
let!(:additional_tax_rate) do
|
|
350
|
-
create :tax_rate,
|
|
351
|
-
included_in_price: false,
|
|
352
|
-
tax_category: order.line_items.first.tax_category,
|
|
353
|
-
zone: order.tax_zone,
|
|
354
|
-
amount: 0.2
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
let!(:included_tax_rate_from_somewhere_else) do
|
|
358
|
-
create :tax_rate,
|
|
359
|
-
included_in_price: true,
|
|
360
|
-
tax_category: order.line_items.first.tax_category,
|
|
361
|
-
zone: create(:zone_with_country),
|
|
362
|
-
amount: 0.1
|
|
363
|
-
end
|
|
364
|
-
let(:price_options) do
|
|
365
|
-
{
|
|
366
|
-
tax_zone: order.tax_zone,
|
|
367
|
-
tax_category: line_item.tax_category
|
|
368
|
-
}
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
let(:line_item) { order.line_items.first }
|
|
373
|
-
subject(:included_tax_amount) { Spree::TaxRate.included_tax_amount_for(price_options) }
|
|
374
|
-
|
|
375
|
-
it 'will only get me tax amounts from tax_rates that match' do
|
|
376
|
-
expect(subject).to eq(included_tax_rate.amount + other_included_tax_rate.amount)
|
|
377
|
-
end
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
describe "#adjust" do
|
|
381
|
-
before do
|
|
382
|
-
@country = create(:country)
|
|
383
|
-
@zone = create(:zone, name: "Country Zone", default_tax: true, zone_members: [])
|
|
384
|
-
@zone.zone_members.create(zoneable: @country)
|
|
385
|
-
@category = Spree::TaxCategory.create name: "Taxable Foo"
|
|
386
|
-
@category2 = Spree::TaxCategory.create(name: "Non Taxable")
|
|
387
|
-
@rate1 = Spree::TaxRate.create(
|
|
388
|
-
amount: 0.10,
|
|
389
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
390
|
-
tax_category: @category,
|
|
391
|
-
zone: @zone
|
|
392
|
-
)
|
|
393
|
-
@rate2 = Spree::TaxRate.create(
|
|
394
|
-
amount: 0.05,
|
|
395
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
396
|
-
tax_category: @category,
|
|
397
|
-
zone: @zone
|
|
398
|
-
)
|
|
399
|
-
@order = Spree::Order.create!
|
|
400
|
-
@taxable = create(:product, tax_category: @category)
|
|
401
|
-
@nontaxable = create(:product, tax_category: @category2)
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
context "not taxable line item " do
|
|
405
|
-
let!(:line_item) { @order.contents.add(@nontaxable.master, 1) }
|
|
406
|
-
|
|
407
|
-
it "should not create a tax adjustment" do
|
|
408
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
409
|
-
expect(line_item.adjustments.tax.charge.count).to eq(0)
|
|
410
|
-
end
|
|
411
|
-
|
|
412
|
-
it "should not create a refund" do
|
|
413
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
414
|
-
expect(line_item.adjustments.credit.count).to eq(0)
|
|
415
|
-
end
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
context "taxable line item" do
|
|
419
|
-
let!(:line_item) { @order.contents.add(@taxable.master, 1) }
|
|
420
|
-
|
|
421
|
-
context "when price includes tax" do
|
|
422
|
-
before do
|
|
423
|
-
@rate1.update_column(:included_in_price, true)
|
|
424
|
-
@rate2.update_column(:included_in_price, true)
|
|
425
|
-
Spree::TaxRate.store_pre_tax_amount(line_item, [@rate1, @rate2])
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
context "when zone is contained by default tax zone" do
|
|
429
|
-
it "should create two adjustments, one for each tax rate" do
|
|
430
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
431
|
-
expect(line_item.adjustments.count).to eq(2)
|
|
432
|
-
end
|
|
433
|
-
|
|
434
|
-
it "should not create a tax refund" do
|
|
435
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
436
|
-
expect(line_item.adjustments.credit.count).to eq(0)
|
|
437
|
-
end
|
|
438
|
-
end
|
|
439
|
-
|
|
440
|
-
context "when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone" do
|
|
441
|
-
before do
|
|
442
|
-
new_rate = Spree::TaxRate.create(
|
|
443
|
-
amount: 0.2,
|
|
444
|
-
included_in_price: true,
|
|
445
|
-
calculator: Spree::Calculator::DefaultTax.create,
|
|
446
|
-
tax_category: @category,
|
|
447
|
-
zone: create(:zone_with_country)
|
|
448
|
-
)
|
|
449
|
-
allow(@order).to receive(:tax_zone).and_return(new_rate.zone)
|
|
450
|
-
end
|
|
451
|
-
|
|
452
|
-
it "should create an adjustment" do
|
|
453
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
454
|
-
expect(line_item.adjustments.charge.count).to eq(1)
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
it "should not create a tax refund for each tax rate" do
|
|
458
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
459
|
-
expect(line_item.adjustments.credit.count).to eq(0)
|
|
460
|
-
end
|
|
461
|
-
end
|
|
462
|
-
|
|
463
|
-
context "when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone" do
|
|
464
|
-
before do
|
|
465
|
-
@new_zone = create(:zone, name: "New Zone", default_tax: false)
|
|
466
|
-
@new_country = create(:country, name: "New Country")
|
|
467
|
-
@new_zone.zone_members.create(zoneable: @new_country)
|
|
468
|
-
@order.ship_address = create(:address, country: @new_country)
|
|
469
|
-
@order.save
|
|
470
|
-
@order.reload
|
|
471
|
-
end
|
|
472
|
-
|
|
473
|
-
it "should not create positive adjustments" do
|
|
474
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
475
|
-
expect(line_item.adjustments.charge.count).to eq(0)
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
it "should not create a tax refund for each tax rate" do
|
|
479
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
480
|
-
expect(line_item.adjustments.credit.count).to eq(0)
|
|
481
|
-
end
|
|
482
|
-
end
|
|
483
|
-
|
|
484
|
-
context "when price does not include tax" do
|
|
485
|
-
before do
|
|
486
|
-
allow(@order).to receive_messages tax_zone: @zone
|
|
487
|
-
[@rate1, @rate2].each do |rate|
|
|
488
|
-
rate.included_in_price = false
|
|
489
|
-
rate.zone = @zone
|
|
490
|
-
rate.save
|
|
491
|
-
end
|
|
492
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
493
|
-
end
|
|
494
|
-
|
|
495
|
-
it "should delete adjustments for open order when taxrate is deleted" do
|
|
496
|
-
@rate1.destroy!
|
|
497
|
-
@rate2.destroy!
|
|
498
|
-
expect(line_item.adjustments.count).to eq(0)
|
|
499
|
-
end
|
|
500
|
-
|
|
501
|
-
it "should not delete adjustments for complete order when taxrate is deleted" do
|
|
502
|
-
@order.update_column :completed_at, Time.current
|
|
503
|
-
@rate1.destroy!
|
|
504
|
-
@rate2.destroy!
|
|
505
|
-
expect(line_item.adjustments.count).to eq(2)
|
|
506
|
-
end
|
|
507
|
-
|
|
508
|
-
it "should create an adjustment" do
|
|
509
|
-
expect(line_item.adjustments.count).to eq(2)
|
|
510
|
-
end
|
|
511
|
-
|
|
512
|
-
it "should not create a tax refund" do
|
|
513
|
-
expect(line_item.adjustments.credit.count).to eq(0)
|
|
514
|
-
end
|
|
515
|
-
|
|
516
|
-
describe 'tax adjustments' do
|
|
517
|
-
before { Spree::TaxRate.adjust(@order, @order.line_items) }
|
|
518
|
-
|
|
519
|
-
it "should apply adjustments when a tax zone is present" do
|
|
520
|
-
expect(line_item.adjustments.count).to eq(2)
|
|
521
|
-
line_item.adjustments.each do |adjustment|
|
|
522
|
-
expect(adjustment.label).to eq("#{adjustment.source.tax_category.name} #{adjustment.source.amount * 100}%")
|
|
523
|
-
end
|
|
524
|
-
end
|
|
525
|
-
|
|
526
|
-
describe 'when the tax zone is removed' do
|
|
527
|
-
before { allow(@order).to receive_messages tax_zone: nil }
|
|
528
|
-
|
|
529
|
-
it 'does not apply any adjustments' do
|
|
530
|
-
Spree::TaxRate.adjust(@order, @order.line_items)
|
|
531
|
-
expect(line_item.adjustments.count).to eq(0)
|
|
532
|
-
end
|
|
533
|
-
end
|
|
534
|
-
end
|
|
535
|
-
end
|
|
536
|
-
|
|
537
|
-
context "when two rates apply" do
|
|
538
|
-
before do
|
|
539
|
-
@price_before_taxes = line_item.price / (1 + @rate1.amount + @rate2.amount)
|
|
540
|
-
# Use the same rounding method as in DefaultTax calculator
|
|
541
|
-
@price_before_taxes = BigDecimal.new(@price_before_taxes).round(2, BigDecimal::ROUND_HALF_UP)
|
|
542
|
-
line_item.update_column(:pre_tax_amount, @price_before_taxes)
|
|
543
|
-
# Clear out any previously automatically-applied adjustments
|
|
544
|
-
@order.all_adjustments.delete_all
|
|
545
|
-
@rate1.adjust(@order, line_item)
|
|
546
|
-
@rate2.adjust(@order, line_item)
|
|
547
|
-
end
|
|
548
|
-
|
|
549
|
-
it "should create two price adjustments" do
|
|
550
|
-
expect(@order.line_item_adjustments.count).to eq(2)
|
|
551
|
-
end
|
|
552
|
-
|
|
553
|
-
it "price adjustments should be accurate" do
|
|
554
|
-
included_tax = @order.line_item_adjustments.sum(:amount)
|
|
555
|
-
expect(@price_before_taxes + included_tax).to eq(line_item.total)
|
|
556
|
-
end
|
|
557
|
-
end
|
|
558
|
-
end
|
|
559
|
-
end
|
|
560
|
-
end
|
|
561
|
-
end
|