solidus_core 2.9.6 → 2.10.3
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/app/helpers/spree/base_helper.rb +4 -4
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +2 -2
- data/app/models/concerns/spree/user_methods.rb +2 -2
- data/app/models/spree/address.rb +13 -17
- data/app/models/spree/adjustment.rb +20 -9
- data/app/models/spree/asset.rb +1 -1
- data/app/models/spree/base.rb +0 -2
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
- data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
- data/app/models/spree/calculator/tiered_percent.rb +6 -6
- data/app/models/spree/carton.rb +3 -3
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/credit_card.rb +4 -4
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/image/paperclip_attachment.rb +1 -1
- data/app/models/spree/inventory_unit.rb +5 -23
- data/app/models/spree/line_item.rb +4 -4
- data/app/models/spree/line_item_action.rb +2 -2
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/option_values_variant.rb +2 -2
- data/app/models/spree/order.rb +11 -27
- data/app/models/spree/order/checkout.rb +1 -1
- data/app/models/spree/order/payments.rb +2 -2
- data/app/models/spree/order_cancellations.rb +1 -1
- data/app/models/spree/order_capturing.rb +2 -2
- data/app/models/spree/order_contents.rb +2 -2
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_promotion.rb +3 -3
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_taxation.rb +3 -3
- data/app/models/spree/payment.rb +8 -45
- data/app/models/spree/payment/processing.rb +3 -3
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/payment_method.rb +5 -2
- data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
- data/app/models/spree/payment_source.rb +1 -1
- data/app/models/spree/price.rb +2 -2
- data/app/models/spree/product.rb +5 -5
- data/app/models/spree/product/scopes.rb +218 -210
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_promotion_rule.rb +2 -2
- data/app/models/spree/product_property.rb +2 -2
- data/app/models/spree/promotion.rb +28 -13
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/option_value.rb +2 -2
- data/app/models/spree/promotion/rules/product.rb +3 -3
- data/app/models/spree/promotion_action.rb +2 -2
- data/app/models/spree/promotion_chooser.rb +2 -2
- data/app/models/spree/promotion_code.rb +11 -10
- data/app/models/spree/promotion_code/batch_builder.rb +3 -3
- data/app/models/spree/promotion_code_batch.rb +1 -1
- data/app/models/spree/promotion_rule.rb +2 -2
- data/app/models/spree/promotion_rule_role.rb +2 -2
- data/app/models/spree/promotion_rule_store.rb +2 -2
- data/app/models/spree/promotion_rule_taxon.rb +2 -2
- data/app/models/spree/promotion_rule_user.rb +2 -2
- data/app/models/spree/refund.rb +5 -5
- data/app/models/spree/reimbursement.rb +5 -13
- data/app/models/spree/reimbursement/credit.rb +2 -2
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
- data/app/models/spree/return_authorization.rb +4 -10
- data/app/models/spree/return_item.rb +13 -52
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/role_user.rb +2 -2
- data/app/models/spree/shipment.rb +7 -41
- data/app/models/spree/shipping_calculator.rb +0 -4
- data/app/models/spree/shipping_manifest.rb +3 -3
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_method_stock_location.rb +2 -2
- data/app/models/spree/shipping_method_zone.rb +2 -2
- data/app/models/spree/shipping_rate.rb +2 -2
- data/app/models/spree/shipping_rate_tax.rb +2 -2
- data/app/models/spree/state.rb +2 -2
- data/app/models/spree/state_change.rb +2 -2
- data/app/models/spree/stock/differentiator.rb +1 -1
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock_item.rb +3 -3
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +13 -12
- data/app/models/spree/store_credit.rb +8 -8
- data/app/models/spree/store_credit_event.rb +3 -3
- data/app/models/spree/store_payment_method.rb +2 -2
- data/app/models/spree/store_shipping_method.rb +2 -2
- data/app/models/spree/tax_calculator/default.rb +0 -4
- data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
- data/app/models/spree/tax_rate.rb +5 -1
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
- data/app/models/spree/unit_cancel.rb +5 -2
- data/app/models/spree/user_address.rb +2 -2
- data/app/models/spree/user_last_url_storer.rb +46 -0
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
- data/app/models/spree/user_stock_location.rb +2 -2
- data/app/models/spree/variant.rb +10 -10
- data/app/models/spree/variant/scopes.rb +37 -29
- data/app/models/spree/variant_property_rule.rb +1 -1
- data/app/models/spree/variant_property_rule_condition.rb +2 -2
- data/app/models/spree/variant_property_rule_value.rb +2 -2
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +1 -1
- data/app/models/spree/zone_member.rb +2 -2
- data/config/initializers/inflections.rb +5 -0
- data/config/initializers/money.rb +2 -0
- data/config/locales/en.yml +34 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
- data/lib/spree/app_configuration.rb +18 -3
- data/lib/spree/core.rb +12 -0
- data/lib/spree/core/controller_helpers/auth.rb +1 -13
- data/lib/spree/core/engine.rb +2 -2
- data/lib/spree/core/importer/order.rb +28 -28
- data/lib/spree/core/importer/product.rb +2 -2
- data/lib/spree/core/product_filters.rb +15 -15
- data/lib/spree/core/role_configuration.rb +2 -2
- data/lib/spree/core/search/variant.rb +1 -1
- data/lib/spree/core/state_machines.rb +78 -0
- data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
- data/lib/spree/core/state_machines/payment.rb +61 -0
- data/lib/spree/core/state_machines/reimbursement.rb +33 -0
- data/lib/spree/core/state_machines/return_authorization.rb +32 -0
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/lib/spree/core/state_machines/shipment.rb +58 -0
- data/lib/spree/core/stock_configuration.rb +1 -0
- data/lib/spree/core/validators/email.rb +1 -8
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permission_sets/default_customer.rb +1 -1
- data/lib/spree/permission_sets/user_management.rb +3 -0
- data/lib/spree/permitted_attributes.rb +3 -3
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/testing_support/dummy_app.rb +4 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -1
- data/solidus_core.gemspec +6 -6
- data/spec/lib/search/base_spec.rb +5 -1
- data/spec/lib/search/variant_spec.rb +1 -1
- data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
- data/spec/lib/spree/core/validators/email_spec.rb +18 -18
- data/spec/lib/spree/event_spec.rb +15 -3
- data/spec/models/spree/ability_spec.rb +1 -1
- data/spec/models/spree/address_spec.rb +23 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
- data/spec/models/spree/carton_spec.rb +10 -2
- data/spec/models/spree/classification_spec.rb +21 -9
- data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
- data/spec/models/spree/concerns/user_methods_spec.rb +5 -4
- data/spec/models/spree/credit_card_spec.rb +2 -2
- data/spec/models/spree/customer_return_spec.rb +1 -1
- data/spec/models/spree/order/checkout_spec.rb +1 -1
- data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
- data/spec/models/spree/order/payment_spec.rb +1 -1
- data/spec/models/spree/order_contents_spec.rb +1 -1
- data/spec/models/spree/order_inventory_spec.rb +3 -3
- data/spec/models/spree/order_merger_spec.rb +3 -3
- data/spec/models/spree/order_shipping_spec.rb +1 -1
- data/spec/models/spree/order_spec.rb +14 -21
- data/spec/models/spree/order_updater_spec.rb +4 -3
- data/spec/models/spree/payment_create_spec.rb +6 -16
- data/spec/models/spree/payment_spec.rb +12 -12
- data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
- data/spec/models/spree/preference_spec.rb +4 -4
- data/spec/models/spree/preferences/preferable_spec.rb +3 -3
- data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
- data/spec/models/spree/promotion_rule_spec.rb +6 -6
- data/spec/models/spree/promotion_spec.rb +71 -54
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +3 -3
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
- data/spec/models/spree/return_item_spec.rb +11 -11
- data/spec/models/spree/returns_calculator_spec.rb +2 -2
- data/spec/models/spree/shipment_spec.rb +6 -6
- data/spec/models/spree/shipping_calculator_spec.rb +1 -13
- data/spec/models/spree/shipping_method_spec.rb +32 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
- data/spec/models/spree/stock/differentiator_spec.rb +2 -2
- data/spec/models/spree/stock/estimator_spec.rb +3 -3
- data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
- data/spec/models/spree/stock/package_spec.rb +28 -28
- data/spec/models/spree/stock/quantifier_spec.rb +2 -2
- data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
- data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
- data/spec/models/spree/stock_quantities_spec.rb +1 -1
- data/spec/models/spree/store_credit_spec.rb +8 -8
- data/spec/models/spree/tax_category_spec.rb +1 -1
- data/spec/models/spree/tax_rate_spec.rb +1 -0
- data/spec/models/spree/taxon_spec.rb +2 -2
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
- data/spec/models/spree/unit_cancel_spec.rb +5 -0
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
- data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
- data/spec/models/spree/user_spec.rb +3 -3
- metadata +49 -43
- data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
- data/spec/models/spree/order/updating_spec.rb +0 -18
|
@@ -152,6 +152,29 @@ RSpec.describe Spree::Address, type: :model do
|
|
|
152
152
|
it "sets up a new record with Spree::Config[:default_country_iso]" do
|
|
153
153
|
expect(Spree::Address.build_default.country).to eq default_country
|
|
154
154
|
end
|
|
155
|
+
|
|
156
|
+
it 'accepts other attributes' do
|
|
157
|
+
address = Spree::Address.build_default(first_name: 'Ryan')
|
|
158
|
+
|
|
159
|
+
expect(address.country).to eq default_country
|
|
160
|
+
expect(address.first_name).to eq 'Ryan'
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it 'accepts a block' do
|
|
164
|
+
address = Spree::Address.build_default do |record|
|
|
165
|
+
record.first_name = 'Ryan'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
expect(address.country).to eq default_country
|
|
169
|
+
expect(address.first_name).to eq 'Ryan'
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it 'can override the country' do
|
|
173
|
+
another_country = build :country
|
|
174
|
+
address = Spree::Address.build_default(country: another_country)
|
|
175
|
+
|
|
176
|
+
expect(address.country).to eq another_country
|
|
177
|
+
end
|
|
155
178
|
end
|
|
156
179
|
|
|
157
180
|
# Regression test for https://github.com/spree/spree/issues/1142
|
|
@@ -36,7 +36,7 @@ RSpec.describe Spree::Calculator::Returns::DefaultRefundAmount, type: :model do
|
|
|
36
36
|
source_type: 'Spree::Order'
|
|
37
37
|
)
|
|
38
38
|
|
|
39
|
-
order.adjustments.first.
|
|
39
|
+
order.adjustments.first.update(amount: adjustment_amount)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
it 'will return the line item amount deducted of refund' do
|
|
@@ -6,7 +6,7 @@ require 'shared_examples/calculator_shared_examples'
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Shipping
|
|
8
8
|
RSpec.describe FlatRate, type: :model do
|
|
9
|
-
subject {
|
|
9
|
+
subject { described_class.new(preferred_amount: 4.00) }
|
|
10
10
|
|
|
11
11
|
it_behaves_like 'a calculator with a description'
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ module Spree
|
|
|
15
15
|
build(:stock_package, variants_contents: { variant1 => 4, variant2 => 6 })
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
let(:subject) {
|
|
18
|
+
let(:subject) { described_class.new }
|
|
19
19
|
|
|
20
20
|
context "compute" do
|
|
21
21
|
it "should compute amount correctly when all fees are 0" do
|
|
@@ -46,7 +46,7 @@ module Spree
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "should allow creation of new object with all the attributes" do
|
|
49
|
-
|
|
49
|
+
described_class.new(preferred_first_item: 1,
|
|
50
50
|
preferred_additional_item: 1,
|
|
51
51
|
preferred_max_items: 1)
|
|
52
52
|
end
|
|
@@ -15,7 +15,7 @@ module Spree
|
|
|
15
15
|
build(:stock_package, variants_contents: { variant1 => 5, variant2 => 3 })
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
subject {
|
|
18
|
+
subject { described_class.new(preferred_amount: 10) }
|
|
19
19
|
|
|
20
20
|
it "correctly calculates per item shipping" do
|
|
21
21
|
expect(subject.compute(package).to_f).to eq(80) # 5 x 10 + 3 x 10
|
|
@@ -5,7 +5,7 @@ require 'shared_examples/calculator_shared_examples'
|
|
|
5
5
|
|
|
6
6
|
RSpec.describe Spree::Calculator::Shipping::PriceSack, type: :model do
|
|
7
7
|
let(:calculator) do
|
|
8
|
-
calculator =
|
|
8
|
+
calculator = described_class.new
|
|
9
9
|
calculator.preferred_minimal_amount = 5
|
|
10
10
|
calculator.preferred_normal_amount = 10
|
|
11
11
|
calculator.preferred_discount_amount = 1
|
|
@@ -14,22 +14,31 @@ RSpec.describe Spree::Calculator::Shipping::PriceSack, type: :model do
|
|
|
14
14
|
|
|
15
15
|
it_behaves_like 'a calculator with a description'
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
describe '#compute' do
|
|
18
|
+
subject { calculator.compute(package) }
|
|
19
|
+
let(:package) { build(:stock_package, variants_contents: { build(:variant) => 1 }) }
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
before do
|
|
22
|
+
# This hack is due to our factories not being so smart to understand
|
|
23
|
+
# that they should create line items with the price of the associated
|
|
24
|
+
# variant by default.
|
|
25
|
+
allow_any_instance_of(Spree::Stock::ContentItem).to receive(:price) { amount }
|
|
26
|
+
end
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
context 'when price < minimal amount' do
|
|
29
|
+
let(:amount) { 2 }
|
|
30
|
+
|
|
31
|
+
it "returns the discounted amount" do
|
|
32
|
+
expect(subject).to eq(10)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context 'when price > minimal amount' do
|
|
37
|
+
let(:amount) { 6 }
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
it "returns the discounted amount" do
|
|
40
|
+
expect(subject).to eq(1)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
34
43
|
end
|
|
35
44
|
end
|
|
@@ -5,6 +5,14 @@ require 'rails_helper'
|
|
|
5
5
|
RSpec.describe Spree::Carton do
|
|
6
6
|
let(:carton) { create(:carton) }
|
|
7
7
|
|
|
8
|
+
describe 'shipping method' do
|
|
9
|
+
it 'returns soft deleted shipping method' do
|
|
10
|
+
carton = create(:carton)
|
|
11
|
+
carton.shipping_method.discard
|
|
12
|
+
expect(carton.reload.shipping_method).to be_present
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
8
16
|
describe "#create" do
|
|
9
17
|
subject { carton }
|
|
10
18
|
|
|
@@ -73,8 +81,8 @@ RSpec.describe Spree::Carton do
|
|
|
73
81
|
let(:email) { 'something@something.com' }
|
|
74
82
|
|
|
75
83
|
before do
|
|
76
|
-
first_order.
|
|
77
|
-
second_order.
|
|
84
|
+
first_order.update!(email: email)
|
|
85
|
+
second_order.update!(email: email)
|
|
78
86
|
end
|
|
79
87
|
|
|
80
88
|
it "returns a unique list of the order emails it is associated to" do
|
|
@@ -34,9 +34,21 @@ module Spree
|
|
|
34
34
|
|
|
35
35
|
context "removing product from taxon" do
|
|
36
36
|
before :each do
|
|
37
|
-
|
|
38
|
-
expect(
|
|
39
|
-
taxon_with_5_products.products.destroy(
|
|
37
|
+
element = taxon_with_5_products.products[1]
|
|
38
|
+
expect(element.classifications.first.position).to eq(2)
|
|
39
|
+
taxon_with_5_products.products.destroy(element)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "resets positions" do
|
|
43
|
+
expect positions_to_be_valid(taxon_with_5_products)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "Discard'ing a product" do
|
|
48
|
+
before :each do
|
|
49
|
+
element = taxon_with_5_products.products[1]
|
|
50
|
+
expect(element.classifications.first.position).to eq(2)
|
|
51
|
+
element.discard
|
|
40
52
|
end
|
|
41
53
|
|
|
42
54
|
it "resets positions" do
|
|
@@ -59,9 +71,9 @@ module Spree
|
|
|
59
71
|
|
|
60
72
|
context "removing taxon from product" do
|
|
61
73
|
before :each do
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
element = taxon_with_5_products.products[1]
|
|
75
|
+
element.taxons.destroy(taxon_with_5_products)
|
|
76
|
+
element.save!
|
|
65
77
|
end
|
|
66
78
|
|
|
67
79
|
it "resets positions" do
|
|
@@ -71,9 +83,9 @@ module Spree
|
|
|
71
83
|
|
|
72
84
|
context "replacing product's taxons" do
|
|
73
85
|
before :each do
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
element = taxon_with_5_products.products[1]
|
|
87
|
+
element.taxons = []
|
|
88
|
+
element.save!
|
|
77
89
|
end
|
|
78
90
|
|
|
79
91
|
it "resets positions" do
|
|
@@ -77,7 +77,7 @@ module Spree
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
context "and changing another address field at the same time" do
|
|
80
|
-
let(:updated_address_attributes) { address.attributes.tap { |
|
|
80
|
+
let(:updated_address_attributes) { address.attributes.tap { |value| value[:first_name] = "Newbie" } }
|
|
81
81
|
|
|
82
82
|
subject { user.save_in_address_book(updated_address_attributes, true) }
|
|
83
83
|
|
|
@@ -104,7 +104,7 @@ module Spree
|
|
|
104
104
|
let(:address1) { create(:address) }
|
|
105
105
|
let(:address2) { create(:address, firstname: "Different") }
|
|
106
106
|
let(:updated_attrs) do
|
|
107
|
-
address2.attributes.tap { |
|
|
107
|
+
address2.attributes.tap { |value| value[:firstname] = "Johnny" }
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
before do
|
|
@@ -191,8 +191,8 @@ module Spree
|
|
|
191
191
|
|
|
192
192
|
it "archives address2" do
|
|
193
193
|
subject
|
|
194
|
-
|
|
195
|
-
expect(
|
|
194
|
+
user_address_two = user.user_addresses.all_historical.find_by(address_id: address2.id)
|
|
195
|
+
expect(user_address_two.archived).to be true
|
|
196
196
|
end
|
|
197
197
|
|
|
198
198
|
context "via a new address that matches an archived one" do
|
|
@@ -62,7 +62,7 @@ RSpec.describe Spree::UserMethods do
|
|
|
62
62
|
|
|
63
63
|
describe '#available_store_credit_total' do
|
|
64
64
|
subject do
|
|
65
|
-
test_user.available_store_credit_total(currency: 'USD')
|
|
65
|
+
test_user.reload.available_store_credit_total(currency: 'USD')
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
context 'when the user does not have any credit' do
|
|
@@ -76,25 +76,26 @@ RSpec.describe Spree::UserMethods do
|
|
|
76
76
|
it { is_expected.to eq(100 + 200) }
|
|
77
77
|
|
|
78
78
|
context 'when some has been used' do
|
|
79
|
-
before { credit_1.
|
|
79
|
+
before { credit_1.update!(amount_used: 35) }
|
|
80
80
|
|
|
81
81
|
it { is_expected.to eq(100 + 200 - 35) }
|
|
82
82
|
|
|
83
83
|
context 'when some has been authorized' do
|
|
84
|
-
before { credit_1.
|
|
84
|
+
before { credit_1.update!(amount_authorized: 10) }
|
|
85
85
|
|
|
86
86
|
it { is_expected.to eq(100 + 200 - 35 - 10) }
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
context 'when some has been authorized' do
|
|
91
|
-
before { credit_1.
|
|
91
|
+
before { credit_1.update!(amount_authorized: 10) }
|
|
92
92
|
|
|
93
93
|
it { is_expected.to eq(100 + 200 - 10) }
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
context 'with credits of multiple currencies' do
|
|
97
97
|
let!(:credit_3) { create(:store_credit, user: test_user, amount: 400, currency: 'GBP') }
|
|
98
|
+
before { test_user.reload }
|
|
98
99
|
|
|
99
100
|
it 'separates the currencies' do
|
|
100
101
|
expect(test_user.available_store_credit_total(currency: 'USD')).to eq(100 + 200)
|
|
@@ -109,10 +109,10 @@ RSpec.describe Spree::CreditCard, type: :model do
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
it "should save and update addresses through nested attributes" do
|
|
112
|
-
persisted_card.
|
|
112
|
+
persisted_card.update({ address_attributes: valid_address_attributes })
|
|
113
113
|
persisted_card.save!
|
|
114
114
|
updated_attributes = { id: persisted_card.address.id, address1: "123 Main St." }
|
|
115
|
-
persisted_card.
|
|
115
|
+
persisted_card.update({ address_attributes: updated_attributes })
|
|
116
116
|
expect(persisted_card.address.address1).to eq "123 Main St."
|
|
117
117
|
end
|
|
118
118
|
end
|
|
@@ -233,7 +233,7 @@ RSpec.describe Spree::CustomerReturn, type: :model do
|
|
|
233
233
|
|
|
234
234
|
context "it was not received" do
|
|
235
235
|
before do
|
|
236
|
-
return_item.
|
|
236
|
+
return_item.update!(reception_status: "lost_in_transit")
|
|
237
237
|
end
|
|
238
238
|
|
|
239
239
|
it 'should not updated inventory unit to returned' do
|
|
@@ -456,7 +456,7 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
456
456
|
order.line_items << FactoryBot.create(:line_item)
|
|
457
457
|
order.line_items.first.variant.stock_items.each do |si|
|
|
458
458
|
si.set_count_on_hand(0)
|
|
459
|
-
si.
|
|
459
|
+
si.update(backorderable: false)
|
|
460
460
|
end
|
|
461
461
|
|
|
462
462
|
Spree::OrderUpdater.new(order).update
|
|
@@ -16,7 +16,7 @@ RSpec.describe "Outstanding balance integration tests" do
|
|
|
16
16
|
let!(:order) { create(:order_with_line_items, line_items_count: 2, line_items_price: 3, shipment_cost: 13) }
|
|
17
17
|
let(:item_1) { order.line_items[0] }
|
|
18
18
|
let(:item_2) { order.line_items[1] }
|
|
19
|
-
before { order.
|
|
19
|
+
before { order.update!(state: 'complete', completed_at: Time.now) }
|
|
20
20
|
|
|
21
21
|
subject do
|
|
22
22
|
order.reload
|
|
@@ -44,11 +44,11 @@ RSpec.describe "Outstanding balance integration tests" do
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
context 'when the order is cancelled' do
|
|
47
|
-
before { order.
|
|
47
|
+
before { order.update!(state: "canceled") }
|
|
48
48
|
it { should eq(-19) }
|
|
49
49
|
|
|
50
50
|
context 'and the payment is voided' do
|
|
51
|
-
before { payment.
|
|
51
|
+
before { payment.update!(state: "void") }
|
|
52
52
|
it { should eq 0 }
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -116,11 +116,11 @@ RSpec.describe "Outstanding balance integration tests" do
|
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
context 'when the order is cancelled' do
|
|
119
|
-
before { order.
|
|
119
|
+
before { order.update!(state: "canceled") }
|
|
120
120
|
it { should eq(-10) }
|
|
121
121
|
|
|
122
122
|
context 'and the payment is voided' do
|
|
123
|
-
before { payment.
|
|
123
|
+
before { payment.update!(state: "void") }
|
|
124
124
|
it { should eq 0 }
|
|
125
125
|
end
|
|
126
126
|
|
|
@@ -134,7 +134,7 @@ RSpec.describe Spree::OrderContents, type: :model do
|
|
|
134
134
|
|
|
135
135
|
context 'when the order does not have a taxable address' do
|
|
136
136
|
before do
|
|
137
|
-
order.
|
|
137
|
+
order.update!(ship_address: nil, bill_address: nil)
|
|
138
138
|
expect(order.tax_address.country_id).to be_nil
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -16,7 +16,7 @@ RSpec.describe Spree::OrderInventory, type: :model do
|
|
|
16
16
|
let(:new_quantity) { 3 }
|
|
17
17
|
|
|
18
18
|
before do
|
|
19
|
-
line_item.
|
|
19
|
+
line_item.update!(quantity: old_quantity)
|
|
20
20
|
|
|
21
21
|
line_item.update_column(:quantity, new_quantity)
|
|
22
22
|
subject.line_item.reload
|
|
@@ -86,7 +86,7 @@ RSpec.describe Spree::OrderInventory, type: :model do
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
context "variant doesnt track inventory" do
|
|
89
|
-
before { variant.
|
|
89
|
+
before { variant.update!(track_inventory: false) }
|
|
90
90
|
let(:new_quantity) { 1 }
|
|
91
91
|
|
|
92
92
|
it "creates on hand inventory units" do
|
|
@@ -164,7 +164,7 @@ RSpec.describe Spree::OrderInventory, type: :model do
|
|
|
164
164
|
let(:new_quantity) { 2 }
|
|
165
165
|
|
|
166
166
|
before do
|
|
167
|
-
line_item.
|
|
167
|
+
line_item.update!(quantity: old_quantity)
|
|
168
168
|
|
|
169
169
|
line_item.update_column(:quantity, new_quantity)
|
|
170
170
|
subject.line_item.reload
|
|
@@ -77,13 +77,13 @@ module Spree
|
|
|
77
77
|
|
|
78
78
|
context "2 equal line items" do
|
|
79
79
|
before do
|
|
80
|
-
@
|
|
81
|
-
@
|
|
80
|
+
@line_item_one = order_1.contents.add(variant, 1, foos: {})
|
|
81
|
+
@line_item_two = order_2.contents.add(variant, 1, foos: {})
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
specify do
|
|
85
85
|
without_partial_double_verification do
|
|
86
|
-
expect(order_1).to receive(:foos_match).with(@
|
|
86
|
+
expect(order_1).to receive(:foos_match).with(@line_item_one, kind_of(Hash)).and_return(true)
|
|
87
87
|
end
|
|
88
88
|
subject.merge!(order_2)
|
|
89
89
|
expect(order_1.line_items.count).to eq(1)
|
|
@@ -181,7 +181,7 @@ RSpec.describe Spree::OrderShipping do
|
|
|
181
181
|
# OrderShipping#ship rather than vice versa
|
|
182
182
|
context "when the tracking number is already on the shipment" do
|
|
183
183
|
before do
|
|
184
|
-
shipment.
|
|
184
|
+
shipment.update!(tracking: 'tracking-number')
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
it "sets the tracking-number" do
|
|
@@ -366,26 +366,19 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
366
366
|
end
|
|
367
367
|
end
|
|
368
368
|
|
|
369
|
-
context "
|
|
370
|
-
|
|
371
|
-
Spree::Order.class_eval do
|
|
372
|
-
register_update_hook :add_awesome_sauce
|
|
373
|
-
end
|
|
374
|
-
end
|
|
369
|
+
context ".register_update_hook", partial_double_verification: false do
|
|
370
|
+
let(:order) { create(:order) }
|
|
375
371
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
end
|
|
372
|
+
before { Spree::Order.register_update_hook :foo }
|
|
373
|
+
after { Spree::Order.update_hooks.clear }
|
|
379
374
|
|
|
380
|
-
it "calls
|
|
381
|
-
order
|
|
382
|
-
expect(order).to receive(:add_awesome_sauce)
|
|
375
|
+
it "calls hooks during #recalculate" do
|
|
376
|
+
expect(order).to receive :foo
|
|
383
377
|
order.recalculate
|
|
384
378
|
end
|
|
385
379
|
|
|
386
|
-
it "calls hook during finalize" do
|
|
387
|
-
order
|
|
388
|
-
expect(order).to receive(:add_awesome_sauce)
|
|
380
|
+
it "calls hook during #finalize!" do
|
|
381
|
+
expect(order).to receive :foo
|
|
389
382
|
order.finalize!
|
|
390
383
|
end
|
|
391
384
|
end
|
|
@@ -678,7 +671,7 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
678
671
|
let!(:payment_method_without_store) { create(:payment_method) }
|
|
679
672
|
|
|
680
673
|
context 'when the store has payment methods' do
|
|
681
|
-
before { order.
|
|
674
|
+
before { order.update!(store: store_with_payment_methods) }
|
|
682
675
|
|
|
683
676
|
it 'returns only the matching payment methods for that store' do
|
|
684
677
|
expect(order.available_payment_methods).to match_array(
|
|
@@ -706,7 +699,7 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
706
699
|
end
|
|
707
700
|
|
|
708
701
|
context 'when the store does not have payment methods' do
|
|
709
|
-
before { order.
|
|
702
|
+
before { order.update!(store: store_without_payment_methods) }
|
|
710
703
|
|
|
711
704
|
it 'returns all matching payment methods regardless of store' do
|
|
712
705
|
expect(order.available_payment_methods).to match_array(
|
|
@@ -1443,12 +1436,12 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
1443
1436
|
|
|
1444
1437
|
describe "#total_applicable_store_credit" do
|
|
1445
1438
|
context "order is in the confirm state" do
|
|
1446
|
-
before { order.
|
|
1439
|
+
before { order.update(state: 'confirm') }
|
|
1447
1440
|
include_examples "check total store credit from payments"
|
|
1448
1441
|
end
|
|
1449
1442
|
|
|
1450
1443
|
context "order is completed" do
|
|
1451
|
-
before { order.
|
|
1444
|
+
before { order.update(state: 'complete') }
|
|
1452
1445
|
include_examples "check total store credit from payments"
|
|
1453
1446
|
end
|
|
1454
1447
|
|
|
@@ -1462,7 +1455,7 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
1462
1455
|
context "the store credit is more than the order total" do
|
|
1463
1456
|
let(:order_total) { store_credit.amount - 1 }
|
|
1464
1457
|
|
|
1465
|
-
before { order.
|
|
1458
|
+
before { order.update(total: order_total) }
|
|
1466
1459
|
|
|
1467
1460
|
it "returns the order total" do
|
|
1468
1461
|
expect(subject.total_applicable_store_credit).to eq order_total
|
|
@@ -1472,7 +1465,7 @@ RSpec.describe Spree::Order, type: :model do
|
|
|
1472
1465
|
context "the store credit is less than the order total" do
|
|
1473
1466
|
let(:order_total) { store_credit.amount * 10 }
|
|
1474
1467
|
|
|
1475
|
-
before { order.
|
|
1468
|
+
before { order.update(total: order_total) }
|
|
1476
1469
|
|
|
1477
1470
|
it "returns the store credit amount" do
|
|
1478
1471
|
expect(subject.total_applicable_store_credit).to eq store_credit.amount
|