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.

Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +4 -4
  3. data/app/helpers/spree/products_helper.rb +2 -1
  4. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  5. data/app/models/concerns/spree/user_methods.rb +2 -2
  6. data/app/models/spree/address.rb +11 -15
  7. data/app/models/spree/adjustment.rb +11 -0
  8. data/app/models/spree/calculator/price_sack.rb +1 -1
  9. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  10. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  11. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  12. data/app/models/spree/carton.rb +1 -1
  13. data/app/models/spree/credit_card.rb +2 -2
  14. data/app/models/spree/inventory_unit.rb +1 -19
  15. data/app/models/spree/line_item.rb +1 -1
  16. data/app/models/spree/order.rb +3 -2
  17. data/app/models/spree/order/checkout.rb +1 -1
  18. data/app/models/spree/order/payments.rb +2 -2
  19. data/app/models/spree/order_capturing.rb +2 -2
  20. data/app/models/spree/order_taxation.rb +2 -2
  21. data/app/models/spree/payment.rb +4 -41
  22. data/app/models/spree/payment/processing.rb +2 -2
  23. data/app/models/spree/payment_method.rb +2 -2
  24. data/app/models/spree/product.rb +3 -3
  25. data/app/models/spree/product/scopes.rb +9 -8
  26. data/app/models/spree/promotion.rb +27 -12
  27. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  28. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  29. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  30. data/app/models/spree/promotion/rules/product.rb +3 -3
  31. data/app/models/spree/promotion_action.rb +1 -1
  32. data/app/models/spree/promotion_chooser.rb +2 -2
  33. data/app/models/spree/promotion_code.rb +9 -8
  34. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  35. data/app/models/spree/promotion_rule.rb +1 -1
  36. data/app/models/spree/refund.rb +2 -2
  37. data/app/models/spree/reimbursement.rb +3 -11
  38. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  39. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
  40. data/app/models/spree/return_authorization.rb +1 -7
  41. data/app/models/spree/return_item.rb +3 -42
  42. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  43. data/app/models/spree/shipment.rb +4 -38
  44. data/app/models/spree/shipping_calculator.rb +0 -4
  45. data/app/models/spree/shipping_method.rb +1 -1
  46. data/app/models/spree/state.rb +1 -1
  47. data/app/models/spree/stock/differentiator.rb +1 -1
  48. data/app/models/spree/stock/package.rb +1 -1
  49. data/app/models/spree/stock_item.rb +1 -1
  50. data/app/models/spree/stock_quantities.rb +13 -12
  51. data/app/models/spree/tax_calculator/default.rb +0 -4
  52. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  53. data/app/models/spree/tax_rate.rb +4 -0
  54. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  55. data/app/models/spree/user_last_url_storer.rb +46 -0
  56. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  57. data/app/models/spree/variant.rb +9 -9
  58. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
  59. data/app/models/spree/zone.rb +1 -1
  60. data/config/initializers/money.rb +2 -0
  61. data/config/locales/en.yml +12 -0
  62. data/lib/generators/spree/install/install_generator.rb +3 -0
  63. data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
  64. data/lib/spree/app_configuration.rb +18 -3
  65. data/lib/spree/core.rb +12 -0
  66. data/lib/spree/core/controller_helpers/auth.rb +1 -13
  67. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  68. data/lib/spree/core/engine.rb +2 -2
  69. data/lib/spree/core/environment_extension.rb +9 -0
  70. data/lib/spree/core/importer/order.rb +27 -26
  71. data/lib/spree/core/product_filters.rb +15 -15
  72. data/lib/spree/core/role_configuration.rb +2 -2
  73. data/lib/spree/core/search/variant.rb +1 -1
  74. data/lib/spree/core/state_machines.rb +78 -0
  75. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  76. data/lib/spree/core/state_machines/payment.rb +61 -0
  77. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  78. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  79. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  80. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  81. data/lib/spree/core/state_machines/shipment.rb +58 -0
  82. data/lib/spree/core/stock_configuration.rb +1 -0
  83. data/lib/spree/core/validators/email.rb +1 -8
  84. data/lib/spree/core/version.rb +1 -1
  85. data/lib/spree/money.rb +2 -2
  86. data/lib/spree/permission_sets/user_management.rb +3 -0
  87. data/lib/spree/permitted_attributes.rb +78 -9
  88. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  89. data/lib/spree/testing_support/dummy_app.rb +4 -1
  90. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  91. data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
  92. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  93. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  94. data/solidus_core.gemspec +4 -4
  95. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +8 -1
  96. data/spec/lib/spree/core/environment_extension_spec.rb +12 -1
  97. data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
  98. data/spec/lib/spree/core/validators/email_spec.rb +18 -18
  99. data/spec/lib/spree/permitted_attributes_spec.rb +41 -0
  100. data/spec/models/spree/ability_spec.rb +1 -1
  101. data/spec/models/spree/address_spec.rb +23 -0
  102. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
  103. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
  104. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
  105. data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
  106. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
  107. data/spec/models/spree/carton_spec.rb +8 -0
  108. data/spec/models/spree/classification_spec.rb +21 -9
  109. data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
  110. data/spec/models/spree/concerns/user_methods_spec.rb +2 -1
  111. data/spec/models/spree/order_merger_spec.rb +3 -3
  112. data/spec/models/spree/order_spec.rb +8 -15
  113. data/spec/models/spree/order_updater_spec.rb +4 -3
  114. data/spec/models/spree/payment_create_spec.rb +4 -14
  115. data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
  116. data/spec/models/spree/preference_spec.rb +4 -4
  117. data/spec/models/spree/preferences/preferable_spec.rb +3 -3
  118. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
  119. data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -0
  120. data/spec/models/spree/promotion_rule_spec.rb +6 -6
  121. data/spec/models/spree/promotion_spec.rb +73 -52
  122. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
  123. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  124. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  125. data/spec/models/spree/shipping_calculator_spec.rb +1 -13
  126. data/spec/models/spree/shipping_method_spec.rb +32 -0
  127. data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
  128. data/spec/models/spree/stock/differentiator_spec.rb +2 -2
  129. data/spec/models/spree/stock/estimator_spec.rb +3 -3
  130. data/spec/models/spree/stock/package_spec.rb +28 -28
  131. data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
  132. data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
  133. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
  134. data/spec/models/spree/stock_quantities_spec.rb +1 -1
  135. data/spec/models/spree/store_credit_spec.rb +1 -1
  136. data/spec/models/spree/tax_rate_spec.rb +1 -0
  137. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
  138. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
  139. data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
  140. metadata +41 -35
  141. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -162
  142. 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 { |p| p.payment_method.is_a? Spree::PaymentMethod::BogusCreditCard } }
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 { |v| v.stock_items.first.update_column(:count_on_hand, 10) }
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 { ReturnsCalculator.new }
8
+ subject { described_class.new }
9
9
 
10
- it 'compute_shipment must be overridden' do
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 { ShippingCalculator.new }
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
- shipment2 = order.shipments.create!(stock_location: order.shipments.first.stock_location)
119
- order.contents.add(variant, 1, shipment: shipment2)
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 { |p| p.add(inventory_unit1) }
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 { |p| p.add(inventory_unit2) }
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 { |i| ContentItem.new(i) }).tap do |p|
12
- p.shipment = p.to_shipment
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{ |z| z.members.delete_all } }
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
- category1 = create(:shipping_category)
55
- category2 = create(:shipping_category)
56
- method1 = create(:shipping_method, available_to_all: true)
57
- method2 = create(:shipping_method, stock_locations: [stock_location])
58
- method1.shipping_categories = [category1, category2]
59
- method2.shipping_categories = [category1, category2]
60
- variant1 = mock_model(Variant, shipping_category_id: category1.id)
61
- variant2 = mock_model(Variant, shipping_category_id: category2.id)
62
- variant3 = mock_model(Variant, shipping_category_id: nil)
63
- contents = [ContentItem.new(build(:inventory_unit, variant: variant1)),
64
- ContentItem.new(build(:inventory_unit, variant: variant1)),
65
- ContentItem.new(build(:inventory_unit, variant: variant2)),
66
- ContentItem.new(build(:inventory_unit, variant: variant3))]
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([method1, method2])
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
- category1 = create(:shipping_category)
74
- category2 = create(:shipping_category)
75
- method1 = create(:shipping_method)
76
- method2 = create(:shipping_method)
77
- method1.shipping_categories = [category1, category2]
78
- method2.shipping_categories = [category1]
79
- variant1 = mock_model(Variant, shipping_category_id: category1.id)
80
- variant2 = mock_model(Variant, shipping_category_id: category2.id)
81
- variant3 = mock_model(Variant, shipping_category_id: nil)
82
- contents = [ContentItem.new(build(:inventory_unit, variant: variant1)),
83
- ContentItem.new(build(:inventory_unit, variant: variant1)),
84
- ContentItem.new(build(:inventory_unit, variant: variant2)),
85
- ContentItem.new(build(:inventory_unit, variant: variant3))]
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([method1])
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 { |p| p.stock_location == stock_location_1 }
94
- location_2_shipment = shipments.detect { |p| p.stock_location == stock_location_2 }
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
- stock_item1 = variant.stock_items.create!(stock_location: stock_location_1, backorderable: false)
111
- stock_item1.set_count_on_hand(location_1_inventory)
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 { |s| s.inventory_units }
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
- stock_item2 = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
161
- stock_item2.set_count_on_hand(location_2_inventory)
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
- stock_item2 = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
218
- stock_item2.set_count_on_hand(location_2_inventory)
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
- stock_item3 = variant.stock_items.create!(stock_location: stock_location_3, backorderable: false)
221
- stock_item3.set_count_on_hand(location_3_inventory)
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
- splitter1 = Base.new(stock_location)
13
- splitter2 = Base.new(stock_location, splitter1)
12
+ splitter_one = Base.new(stock_location)
13
+ splitter_two = Base.new(stock_location, splitter_one)
14
14
  packages = []
15
15
 
16
- expect(splitter1).to receive(:split).with(packages)
17
- splitter2.split(packages)
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
- package1 = Package.new(stock_location)
33
- 4.times { package1.add inventory_unit1 }
34
- 8.times { package1.add inventory_unit2 }
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
- package2 = Package.new(stock_location)
37
- 6.times { package2.add inventory_unit1 }
38
- 9.times { package2.add inventory_unit2, :backordered }
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([package1, package2])
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
@@ -12,7 +12,7 @@ RSpec.describe Spree::StockQuantities, type: :model do
12
12
 
13
13
  describe "#each" do
14
14
  def expect_each
15
- expect { |b| subject.each(&b) }
15
+ expect { |item| subject.each(&item) }
16
16
  end
17
17
 
18
18
  context "with no items" do
@@ -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
 
@@ -153,6 +153,7 @@ RSpec.describe Spree::TaxRate, type: :model do
153
153
 
154
154
  describe 'adjustments' do
155
155
  before do
156
+ expect(Spree::Deprecation).to receive(:warn)
156
157
  tax_rate.adjust(nil, item)
157
158
  end
158
159
 
@@ -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