solidus_core 2.10.0.beta1 → 2.10.5
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_methods.rb +2 -2
- data/app/models/spree/address.rb +11 -15
- data/app/models/spree/adjustment.rb +11 -0
- 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 +1 -1
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/inventory_unit.rb +1 -19
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/order.rb +3 -2
- data/app/models/spree/order/checkout.rb +1 -1
- data/app/models/spree/order/payments.rb +2 -2
- data/app/models/spree/order_capturing.rb +2 -2
- data/app/models/spree/order_taxation.rb +2 -2
- data/app/models/spree/payment.rb +4 -41
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment_method.rb +2 -2
- data/app/models/spree/product.rb +3 -3
- data/app/models/spree/product/scopes.rb +9 -8
- data/app/models/spree/promotion.rb +27 -12
- 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 +1 -1
- data/app/models/spree/promotion_chooser.rb +2 -2
- data/app/models/spree/promotion_code.rb +9 -8
- data/app/models/spree/promotion_code/batch_builder.rb +3 -3
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +3 -11
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
- data/app/models/spree/return_authorization.rb +1 -7
- data/app/models/spree/return_item.rb +3 -42
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/shipment.rb +4 -38
- data/app/models/spree/shipping_calculator.rb +0 -4
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/state.rb +1 -1
- 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 +1 -1
- data/app/models/spree/stock_quantities.rb +13 -12
- 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 +4 -0
- data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
- 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/variant.rb +9 -9
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
- data/app/models/spree/zone.rb +1 -1
- data/config/initializers/money.rb +2 -0
- data/config/locales/en.yml +12 -0
- data/lib/generators/spree/install/install_generator.rb +3 -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/environment_extension.rb +9 -0
- data/lib/spree/core/importer/order.rb +27 -26
- 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/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/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 +4 -4
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +8 -1
- data/spec/lib/spree/core/environment_extension_spec.rb +12 -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/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/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 +8 -0
- 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 +2 -1
- data/spec/models/spree/order_merger_spec.rb +3 -3
- data/spec/models/spree/order_spec.rb +8 -15
- data/spec/models/spree/order_updater_spec.rb +4 -3
- data/spec/models/spree/payment_create_spec.rb +4 -14
- 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/taxon_spec.rb +1 -0
- data/spec/models/spree/promotion_rule_spec.rb +6 -6
- data/spec/models/spree/promotion_spec.rb +73 -52
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
- data/spec/models/spree/returns_calculator_spec.rb +2 -2
- 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/package_spec.rb +28 -28
- 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 +1 -1
- data/spec/models/spree/tax_rate_spec.rb +1 -0
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -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
- metadata +41 -35
- data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -162
- data/spec/models/spree/order/updating_spec.rb +0 -18
|
@@ -57,7 +57,7 @@ module Spree
|
|
|
57
57
|
context "multiple payment methods" do
|
|
58
58
|
let(:simulate) { true }
|
|
59
59
|
let!(:check_payment) { create(:check_payment, order: reimbursement.order, amount: 5.0, state: "completed") }
|
|
60
|
-
let(:payment) { reimbursement.order.payments.detect { |
|
|
60
|
+
let(:payment) { reimbursement.order.payments.detect { |item| item.payment_method.is_a? Spree::PaymentMethod::BogusCreditCard } }
|
|
61
61
|
let(:refund_amount) { 10.0 }
|
|
62
62
|
|
|
63
63
|
let(:refund_payment_methods) { subject.map { |refund| refund.payment.payment_method } }
|
|
@@ -18,7 +18,7 @@ module Spree
|
|
|
18
18
|
context "product has variants" do
|
|
19
19
|
it "returns all variants for the same product" do
|
|
20
20
|
product = create(:product, variants: Array.new(3) { create(:variant) })
|
|
21
|
-
product.variants.map { |
|
|
21
|
+
product.variants.map { |value| value.stock_items.first.update_column(:count_on_hand, 10) }
|
|
22
22
|
|
|
23
23
|
expect(SameProduct.eligible_variants(product.variants.first).sort).to eq product.variants.sort
|
|
24
24
|
end
|
|
@@ -5,9 +5,9 @@ require 'rails_helper'
|
|
|
5
5
|
module Spree
|
|
6
6
|
RSpec.describe ReturnsCalculator, type: :model do
|
|
7
7
|
let(:return_item) { build(:return_item) }
|
|
8
|
-
subject {
|
|
8
|
+
subject { described_class.new }
|
|
9
9
|
|
|
10
|
-
it '
|
|
10
|
+
it 'compute must be overridden' do
|
|
11
11
|
expect {
|
|
12
12
|
subject.compute(return_item)
|
|
13
13
|
}.to raise_error NotImplementedError
|
|
@@ -21,25 +21,13 @@ module Spree
|
|
|
21
21
|
)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
subject {
|
|
25
|
-
|
|
26
|
-
it 'computes with a shipment' do
|
|
27
|
-
shipment = mock_model(Spree::Shipment)
|
|
28
|
-
expect(subject).to receive(:compute_shipment).with(shipment)
|
|
29
|
-
subject.compute(shipment)
|
|
30
|
-
end
|
|
24
|
+
subject { described_class.new }
|
|
31
25
|
|
|
32
26
|
it 'computes with a package' do
|
|
33
27
|
expect(subject).to receive(:compute_package).with(package)
|
|
34
28
|
subject.compute(package)
|
|
35
29
|
end
|
|
36
30
|
|
|
37
|
-
it 'compute_shipment must be overridden' do
|
|
38
|
-
expect {
|
|
39
|
-
subject.compute_shipment(shipment)
|
|
40
|
-
}.to raise_error NameError
|
|
41
|
-
end
|
|
42
|
-
|
|
43
31
|
it 'compute_package must be overridden' do
|
|
44
32
|
expect {
|
|
45
33
|
subject.compute_package(package)
|
|
@@ -257,4 +257,36 @@ RSpec.describe Spree::ShippingMethod, type: :model do
|
|
|
257
257
|
it { should == 'back_end' }
|
|
258
258
|
end
|
|
259
259
|
end
|
|
260
|
+
|
|
261
|
+
describe '.available_to_store' do
|
|
262
|
+
let(:store) { create(:store) }
|
|
263
|
+
let(:first_shipping_method) { create(:shipping_method, stores: [store]) }
|
|
264
|
+
let(:second_shipping_method) { create(:shipping_method, stores: [store]) }
|
|
265
|
+
|
|
266
|
+
subject { [first_shipping_method, second_shipping_method] }
|
|
267
|
+
|
|
268
|
+
it 'raises an exception if no store is passed as argument' do
|
|
269
|
+
expect {
|
|
270
|
+
described_class.available_to_store(nil)
|
|
271
|
+
}.to raise_exception(ArgumentError, 'You must provide a store')
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
context 'when the store has no shipping methods associated' do
|
|
275
|
+
before { store.shipping_methods = [] }
|
|
276
|
+
|
|
277
|
+
it 'returns all shipping methods' do
|
|
278
|
+
expect(store.shipping_methods).to eq([])
|
|
279
|
+
expect(described_class.available_to_store(store)).to eq(subject)
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
context 'when the store has shipping methods associated' do
|
|
284
|
+
before { create(:shipping_method) }
|
|
285
|
+
|
|
286
|
+
it 'returns the associated records' do
|
|
287
|
+
expect(store.shipping_methods).to eq(subject)
|
|
288
|
+
expect(described_class.available_to_store(store)).to eq(subject)
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
260
292
|
end
|
|
@@ -115,8 +115,8 @@ module Spree
|
|
|
115
115
|
let(:stock_location) { order.shipments.first.stock_location }
|
|
116
116
|
|
|
117
117
|
before do
|
|
118
|
-
|
|
119
|
-
order.contents.add(variant, 1, shipment:
|
|
118
|
+
shipment_two = order.shipments.create!(stock_location: order.shipments.first.stock_location)
|
|
119
|
+
order.contents.add(variant, 1, shipment: shipment_two)
|
|
120
120
|
variant.stock_items.first.update_columns(count_on_hand: count_on_hand, backorderable: false)
|
|
121
121
|
end
|
|
122
122
|
|
|
@@ -19,11 +19,11 @@ module Spree
|
|
|
19
19
|
let(:order) { mock_model(Order, line_items: [line_item1, line_item2]) }
|
|
20
20
|
|
|
21
21
|
let(:package1) do
|
|
22
|
-
Package.new(stock_location).tap { |
|
|
22
|
+
Package.new(stock_location).tap { |package| package.add(inventory_unit1) }
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
let(:package2) do
|
|
26
|
-
Package.new(stock_location).tap { |
|
|
26
|
+
Package.new(stock_location).tap { |package| package.add(inventory_unit2) }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
let(:packages) { [package1, package2] }
|
|
@@ -8,8 +8,8 @@ module Spree
|
|
|
8
8
|
let(:shipping_rate) { 4.00 }
|
|
9
9
|
let!(:shipping_method) { create(:shipping_method, cost: shipping_rate, currency: currency) }
|
|
10
10
|
let(:package) do
|
|
11
|
-
build(:stock_package, contents: inventory_units.map { |
|
|
12
|
-
|
|
11
|
+
build(:stock_package, contents: inventory_units.map { |unit| ContentItem.new(unit) }).tap do |package|
|
|
12
|
+
package.shipment = package.to_shipment
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
let(:order) { create(:order_with_line_items, shipping_method: shipping_method) }
|
|
@@ -61,7 +61,7 @@ module Spree
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
context "when the order's ship address is in a different zone" do
|
|
64
|
-
before { shipping_method.zones.each{ |
|
|
64
|
+
before { shipping_method.zones.each{ |zone| zone.members.delete_all } }
|
|
65
65
|
it_should_behave_like "shipping rate doesn't match"
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -51,41 +51,41 @@ module Spree
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it 'builds the correct list of shipping methods based on stock location and categories' do
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
contents = [ContentItem.new(build(:inventory_unit, variant:
|
|
64
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
65
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
66
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
54
|
+
category_one = create(:shipping_category)
|
|
55
|
+
category_two = create(:shipping_category)
|
|
56
|
+
method_one = create(:shipping_method, available_to_all: true)
|
|
57
|
+
method_two = create(:shipping_method, stock_locations: [stock_location])
|
|
58
|
+
method_one.shipping_categories = [category_one, category_two]
|
|
59
|
+
method_two.shipping_categories = [category_one, category_two]
|
|
60
|
+
variant_one = mock_model(Variant, shipping_category_id: category_one.id)
|
|
61
|
+
variant_two = mock_model(Variant, shipping_category_id: category_two.id)
|
|
62
|
+
variant_three = mock_model(Variant, shipping_category_id: nil)
|
|
63
|
+
contents = [ContentItem.new(build(:inventory_unit, variant: variant_one)),
|
|
64
|
+
ContentItem.new(build(:inventory_unit, variant: variant_one)),
|
|
65
|
+
ContentItem.new(build(:inventory_unit, variant: variant_two)),
|
|
66
|
+
ContentItem.new(build(:inventory_unit, variant: variant_three))]
|
|
67
67
|
|
|
68
68
|
package = Package.new(stock_location, contents)
|
|
69
|
-
expect(package.shipping_methods).to match_array([
|
|
69
|
+
expect(package.shipping_methods).to match_array([method_one, method_two])
|
|
70
70
|
end
|
|
71
71
|
# Contains regression test for https://github.com/spree/spree/issues/2804
|
|
72
72
|
it 'builds a list of shipping methods common to all categories' do
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
contents = [ContentItem.new(build(:inventory_unit, variant:
|
|
83
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
84
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
85
|
-
ContentItem.new(build(:inventory_unit, variant:
|
|
73
|
+
category_one = create(:shipping_category)
|
|
74
|
+
category_two = create(:shipping_category)
|
|
75
|
+
method_one = create(:shipping_method)
|
|
76
|
+
method_two = create(:shipping_method)
|
|
77
|
+
method_one.shipping_categories = [category_one, category_two]
|
|
78
|
+
method_two.shipping_categories = [category_one]
|
|
79
|
+
variant_one = mock_model(Variant, shipping_category_id: category_one.id)
|
|
80
|
+
variant_two = mock_model(Variant, shipping_category_id: category_two.id)
|
|
81
|
+
variant_three = mock_model(Variant, shipping_category_id: nil)
|
|
82
|
+
contents = [ContentItem.new(build(:inventory_unit, variant: variant_one)),
|
|
83
|
+
ContentItem.new(build(:inventory_unit, variant: variant_one)),
|
|
84
|
+
ContentItem.new(build(:inventory_unit, variant: variant_two)),
|
|
85
|
+
ContentItem.new(build(:inventory_unit, variant: variant_three))]
|
|
86
86
|
|
|
87
87
|
package = Package.new(stock_location, contents)
|
|
88
|
-
expect(package.shipping_methods).to match_array([
|
|
88
|
+
expect(package.shipping_methods).to match_array([method_one])
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
it 'builds an empty list of shipping methods when no categories' do
|
|
@@ -90,8 +90,8 @@ module Spree
|
|
|
90
90
|
|
|
91
91
|
expect(shipments.size).to eq 2
|
|
92
92
|
|
|
93
|
-
location_1_shipment = shipments.detect { |
|
|
94
|
-
location_2_shipment = shipments.detect { |
|
|
93
|
+
location_1_shipment = shipments.detect { |shipment| shipment.stock_location == stock_location_1 }
|
|
94
|
+
location_2_shipment = shipments.detect { |shipment| shipment.stock_location == stock_location_2 }
|
|
95
95
|
|
|
96
96
|
expect(location_1_shipment).to be_present
|
|
97
97
|
expect(location_2_shipment).to be_present
|
|
@@ -107,8 +107,8 @@ module Spree
|
|
|
107
107
|
let!(:variant) { create(:variant, track_inventory: true) }
|
|
108
108
|
|
|
109
109
|
before do
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
stock_item_one = variant.stock_items.create!(stock_location: stock_location_1, backorderable: false)
|
|
111
|
+
stock_item_one.set_count_on_hand(location_1_inventory)
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
let!(:order) { create(:order) }
|
|
@@ -119,7 +119,7 @@ module Spree
|
|
|
119
119
|
shared_examples "a fulfillable package" do
|
|
120
120
|
it "packages correctly" do
|
|
121
121
|
expect(shipments).not_to be_empty
|
|
122
|
-
inventory_units = shipments.flat_map { |
|
|
122
|
+
inventory_units = shipments.flat_map { |shipment| shipment.inventory_units }
|
|
123
123
|
expect(inventory_units.size).to eq(5)
|
|
124
124
|
expect(inventory_units.uniq.size).to eq(5)
|
|
125
125
|
end
|
|
@@ -157,8 +157,8 @@ module Spree
|
|
|
157
157
|
context 'with two stock locations' do
|
|
158
158
|
let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) }
|
|
159
159
|
before do
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
stock_item_two = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
|
|
161
|
+
stock_item_two.set_count_on_hand(location_2_inventory)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
context "with no inventory" do
|
|
@@ -214,11 +214,11 @@ module Spree
|
|
|
214
214
|
let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) }
|
|
215
215
|
let!(:stock_location_3) { create(:stock_location, propagate_all_variants: false, active: true) }
|
|
216
216
|
before do
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
stock_item_two = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
|
|
218
|
+
stock_item_two.set_count_on_hand(location_2_inventory)
|
|
219
219
|
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
stock_item_three = variant.stock_items.create!(stock_location: stock_location_3, backorderable: false)
|
|
221
|
+
stock_item_three.set_count_on_hand(location_3_inventory)
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
# Regression test for https://github.com/solidusio/solidus/issues/2122
|
|
@@ -9,12 +9,12 @@ module Spree
|
|
|
9
9
|
let(:stock_location) { mock_model(Spree::StockLocation) }
|
|
10
10
|
|
|
11
11
|
it 'continues to splitter chain' do
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
splitter_one = Base.new(stock_location)
|
|
13
|
+
splitter_two = Base.new(stock_location, splitter_one)
|
|
14
14
|
packages = []
|
|
15
15
|
|
|
16
|
-
expect(
|
|
17
|
-
|
|
16
|
+
expect(splitter_one).to receive(:split).with(packages)
|
|
17
|
+
splitter_two.split(packages)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
end
|
|
@@ -29,15 +29,15 @@ module Spree
|
|
|
29
29
|
subject { described_class.new(stock_location) }
|
|
30
30
|
|
|
31
31
|
it 'splits each package by shipping category' do
|
|
32
|
-
|
|
33
|
-
4.times {
|
|
34
|
-
8.times {
|
|
32
|
+
package_one = Package.new(stock_location)
|
|
33
|
+
4.times { package_one.add inventory_unit1 }
|
|
34
|
+
8.times { package_one.add inventory_unit2 }
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
6.times {
|
|
38
|
-
9.times {
|
|
36
|
+
package_two = Package.new(stock_location)
|
|
37
|
+
6.times { package_two.add inventory_unit1 }
|
|
38
|
+
9.times { package_two.add inventory_unit2, :backordered }
|
|
39
39
|
|
|
40
|
-
packages = subject.split([
|
|
40
|
+
packages = subject.split([package_one, package_two])
|
|
41
41
|
expect(packages[0].quantity).to eq 4
|
|
42
42
|
expect(packages[1].quantity).to eq 8
|
|
43
43
|
expect(packages[2].quantity).to eq 6
|
|
@@ -777,7 +777,7 @@ RSpec.describe Spree::StoreCredit do
|
|
|
777
777
|
let!(:store_credits) do
|
|
778
778
|
[
|
|
779
779
|
create(:store_credit, user: user, amount: store_credit_amount),
|
|
780
|
-
create(:store_credit, user: user, amount: additional_store_credit_amount)
|
|
780
|
+
create(:store_credit, user: user.reload, amount: additional_store_credit_amount)
|
|
781
781
|
]
|
|
782
782
|
end
|
|
783
783
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe "Spree::Taxon::PaperclipAttachment", type: :model do
|
|
6
|
+
describe "#destroy_attachment" do
|
|
7
|
+
let(:taxon) { create(:taxon) }
|
|
8
|
+
|
|
9
|
+
context "when trying to destroy a valid attachment definition" do
|
|
10
|
+
context "and taxon has a file attached " do
|
|
11
|
+
it "removes the attachment" do
|
|
12
|
+
taxon.update(icon: File.new(Rails.root.join('..', '..', 'spec', 'fixtures', 'thinking-cat.jpg')))
|
|
13
|
+
expect(taxon.destroy_attachment(:icon)).to be_truthy
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
context "and the taxon does not have any file attached yet" do
|
|
17
|
+
it "returns false" do
|
|
18
|
+
expect(taxon.destroy_attachment(:icon)).to be_falsey
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when trying to destroy an invalid attachment" do
|
|
24
|
+
it 'returns false' do
|
|
25
|
+
expect(taxon.destroy_attachment(:foo)).to be_falsey
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe Spree::UserLastUrlStorer::Rules::AuthenticationRule do
|
|
6
|
+
describe '#match?' do
|
|
7
|
+
let(:login_path) { '/sign_in' }
|
|
8
|
+
let(:request) { double(fullpath: fullpath) }
|
|
9
|
+
let(:controller) do
|
|
10
|
+
double(
|
|
11
|
+
request: request,
|
|
12
|
+
spree_login_path: login_path,
|
|
13
|
+
controller_name: 'controller_double'
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
subject { described_class.match?(controller) }
|
|
18
|
+
|
|
19
|
+
context 'when the request full path is an authentication route' do
|
|
20
|
+
let!(:fullpath) { login_path }
|
|
21
|
+
|
|
22
|
+
it { is_expected.to be true }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when the request full path is not an authentication route' do
|
|
26
|
+
let!(:fullpath) { '/products/baseball-cap' }
|
|
27
|
+
|
|
28
|
+
it { is_expected.to be false }
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe Spree::UserLastUrlStorer do
|
|
6
|
+
subject { described_class.new(controller) }
|
|
7
|
+
|
|
8
|
+
let(:fullpath) { '/products/baseball-cap' }
|
|
9
|
+
let(:session) { {} }
|
|
10
|
+
let(:request) { double(fullpath: fullpath) }
|
|
11
|
+
let(:controller) do
|
|
12
|
+
instance_double(
|
|
13
|
+
ApplicationController,
|
|
14
|
+
request: request,
|
|
15
|
+
session: session,
|
|
16
|
+
controller_name: 'app_controller_double'
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module CustomRule
|
|
21
|
+
def self.match?(_controller)
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
after :each do
|
|
27
|
+
described_class.rules.delete('CustomRule')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe '::rules' do
|
|
31
|
+
it 'includes default rules' do
|
|
32
|
+
rule = Spree::UserLastUrlStorer::Rules::AuthenticationRule
|
|
33
|
+
expect(described_class.rules).to include(rule)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'can add new rules' do
|
|
37
|
+
described_class.rules << CustomRule
|
|
38
|
+
expect(described_class.rules).to include(CustomRule)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe '#store_location' do
|
|
43
|
+
context 'when at least one rule matches' do
|
|
44
|
+
it 'does not set the path value into the session' do
|
|
45
|
+
described_class.rules << CustomRule
|
|
46
|
+
subject.store_location
|
|
47
|
+
expect(session[:spree_user_return_to]).to be_nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'when no rule matches' do
|
|
52
|
+
it 'sets the path value into the session' do
|
|
53
|
+
described_class.rules << CustomRule
|
|
54
|
+
described_class.rules.delete('CustomRule')
|
|
55
|
+
subject.store_location
|
|
56
|
+
expect(session[:spree_user_return_to]).to eql fullpath
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|