solidus_core 2.9.5 → 2.10.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/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/controller_helpers/strong_parameters.rb +21 -7
- data/lib/spree/core/engine.rb +2 -2
- data/lib/spree/core/importer/order.rb +29 -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 +78 -9
- 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/controller_helpers/strong_parameters_spec.rb +8 -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/lib/spree/permitted_attributes_spec.rb +41 -0
- 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/rules/taxon_spec.rb +1 -0
- 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 +46 -39
- data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
- data/spec/models/spree/order/updating_spec.rb +0 -18
|
@@ -12,27 +12,27 @@ RSpec.describe Spree::EmailValidator do
|
|
|
12
12
|
|
|
13
13
|
let(:valid_emails) {
|
|
14
14
|
[
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
'valid@email.com',
|
|
16
|
+
'valid@email.com.uk',
|
|
17
|
+
'e@email.com',
|
|
18
|
+
'valid+email@email.com',
|
|
19
|
+
'valid-email@email.com',
|
|
20
|
+
'valid_email@email.com',
|
|
21
|
+
'valid.email@email.com'
|
|
22
|
+
]
|
|
23
23
|
}
|
|
24
24
|
let(:invalid_emails) {
|
|
25
25
|
[
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
'invalid email@email.com',
|
|
27
|
+
'.invalid.email@email.com',
|
|
28
|
+
'invalid.email.@email.com',
|
|
29
|
+
'@email.com',
|
|
30
|
+
'.@email.com',
|
|
31
|
+
'invalidemailemail.com',
|
|
32
|
+
'@invalid.email@email.com',
|
|
33
|
+
'invalid@email@email.com',
|
|
34
|
+
'invalid.email@@email.com'
|
|
35
|
+
]
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
it 'validates valid email addresses' do
|
|
@@ -18,14 +18,26 @@ RSpec.describe Spree::Event do
|
|
|
18
18
|
before do
|
|
19
19
|
# ActiveSupport::Notifications does not provide an interface to clean all
|
|
20
20
|
# subscribers at once, so some low level brittle code is required
|
|
21
|
-
|
|
21
|
+
if Rails.gem_version >= Gem::Version.new('6.0.0')
|
|
22
|
+
@old_string_subscribers = notifier.instance_variable_get('@string_subscribers').dup
|
|
23
|
+
@old_other_subscribers = notifier.instance_variable_get('@other_subscribers').dup
|
|
24
|
+
notifier.instance_variable_get('@string_subscribers').clear
|
|
25
|
+
notifier.instance_variable_get('@other_subscribers').clear
|
|
26
|
+
else
|
|
27
|
+
@old_subscribers = notifier.instance_variable_get('@subscribers').dup
|
|
28
|
+
notifier.instance_variable_get('@subscribers').clear
|
|
29
|
+
end
|
|
22
30
|
@old_listeners = notifier.instance_variable_get('@listeners_for').dup
|
|
23
|
-
notifier.instance_variable_get('@subscribers').clear
|
|
24
31
|
notifier.instance_variable_get('@listeners_for').clear
|
|
25
32
|
end
|
|
26
33
|
|
|
27
34
|
after do
|
|
28
|
-
|
|
35
|
+
if Rails.gem_version >= Gem::Version.new('6.0.0')
|
|
36
|
+
notifier.instance_variable_set '@string_subscribers', @old_string_subscribers
|
|
37
|
+
notifier.instance_variable_set '@other_subscribers', @old_other_subscribers
|
|
38
|
+
else
|
|
39
|
+
notifier.instance_variable_set '@subscribers', @old_subscribers
|
|
40
|
+
end
|
|
29
41
|
notifier.instance_variable_set '@listeners_for', @old_listeners
|
|
30
42
|
end
|
|
31
43
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_helper"
|
|
4
|
+
|
|
5
|
+
RSpec.describe Spree::PermittedAttributes do
|
|
6
|
+
describe ".checkout_attributes" do
|
|
7
|
+
subject(:permitted_attributes) { described_class }
|
|
8
|
+
|
|
9
|
+
it "when read emits a deprecation warning and return all steps attributes" do
|
|
10
|
+
expect(Spree::Deprecation).to receive(:warn)
|
|
11
|
+
all_attributes = permitted_attributes.checkout_attributes
|
|
12
|
+
|
|
13
|
+
expect(all_attributes).to include(*permitted_attributes.checkout_address_attributes)
|
|
14
|
+
expect(all_attributes).to include(*permitted_attributes.checkout_delivery_attributes)
|
|
15
|
+
expect(all_attributes).to include(*permitted_attributes.checkout_payment_attributes)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "when changed emits a deprecation warning and push changes to all steps' attributes" do
|
|
19
|
+
expect(Spree::Deprecation).to receive(:warn).exactly(4).times
|
|
20
|
+
permitted_attributes.checkout_attributes.push :appended_attribute
|
|
21
|
+
permitted_attributes.checkout_attributes.append :appended_with_alias_attribute
|
|
22
|
+
permitted_attributes.checkout_attributes << :another_appended_attribute
|
|
23
|
+
permitted_attributes.checkout_attributes.prepend :prepended_attribute
|
|
24
|
+
|
|
25
|
+
checkout_steps_attributes = [
|
|
26
|
+
permitted_attributes.checkout_address_attributes,
|
|
27
|
+
permitted_attributes.checkout_delivery_attributes,
|
|
28
|
+
permitted_attributes.checkout_payment_attributes,
|
|
29
|
+
permitted_attributes.checkout_confirm_attributes
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
checkout_steps_attributes.each do |step_attributes|
|
|
33
|
+
expect(step_attributes).to include(
|
|
34
|
+
:appended_attribute,
|
|
35
|
+
:appended_with_alias_attribute,
|
|
36
|
+
:another_appended_attribute,
|
|
37
|
+
:prepended_attribute)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -59,7 +59,7 @@ RSpec.describe Spree::Ability, type: :model do
|
|
|
59
59
|
let(:resource) { Object.new }
|
|
60
60
|
|
|
61
61
|
context 'with admin user' do
|
|
62
|
-
let(:user) {
|
|
62
|
+
let(:user) { create :admin_user }
|
|
63
63
|
it_should_behave_like 'access granted'
|
|
64
64
|
it_should_behave_like 'index allowed'
|
|
65
65
|
end
|
|
@@ -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
|