solidus_core 2.10.0.beta1 → 2.10.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- 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
|