solidus_core 2.9.6 → 2.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) 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_address_book.rb +2 -2
  6. data/app/models/concerns/spree/user_methods.rb +2 -2
  7. data/app/models/spree/address.rb +13 -17
  8. data/app/models/spree/adjustment.rb +20 -9
  9. data/app/models/spree/asset.rb +1 -1
  10. data/app/models/spree/base.rb +0 -2
  11. data/app/models/spree/calculator.rb +1 -1
  12. data/app/models/spree/calculator/price_sack.rb +1 -1
  13. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  14. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  15. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  16. data/app/models/spree/carton.rb +3 -3
  17. data/app/models/spree/classification.rb +2 -2
  18. data/app/models/spree/credit_card.rb +4 -4
  19. data/app/models/spree/customer_return.rb +1 -1
  20. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  21. data/app/models/spree/inventory_unit.rb +5 -23
  22. data/app/models/spree/line_item.rb +4 -4
  23. data/app/models/spree/line_item_action.rb +2 -2
  24. data/app/models/spree/log_entry.rb +1 -1
  25. data/app/models/spree/option_value.rb +1 -1
  26. data/app/models/spree/option_values_variant.rb +2 -2
  27. data/app/models/spree/order.rb +11 -27
  28. data/app/models/spree/order/checkout.rb +1 -1
  29. data/app/models/spree/order/payments.rb +2 -2
  30. data/app/models/spree/order_cancellations.rb +1 -1
  31. data/app/models/spree/order_capturing.rb +2 -2
  32. data/app/models/spree/order_contents.rb +2 -2
  33. data/app/models/spree/order_mutex.rb +1 -1
  34. data/app/models/spree/order_promotion.rb +3 -3
  35. data/app/models/spree/order_shipping.rb +1 -1
  36. data/app/models/spree/order_taxation.rb +3 -3
  37. data/app/models/spree/payment.rb +8 -45
  38. data/app/models/spree/payment/processing.rb +3 -3
  39. data/app/models/spree/payment_capture_event.rb +1 -1
  40. data/app/models/spree/payment_method.rb +5 -2
  41. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  42. data/app/models/spree/payment_source.rb +1 -1
  43. data/app/models/spree/price.rb +2 -2
  44. data/app/models/spree/product.rb +5 -5
  45. data/app/models/spree/product/scopes.rb +218 -210
  46. data/app/models/spree/product_option_type.rb +2 -2
  47. data/app/models/spree/product_promotion_rule.rb +2 -2
  48. data/app/models/spree/product_property.rb +2 -2
  49. data/app/models/spree/promotion.rb +28 -13
  50. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  51. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  52. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  53. data/app/models/spree/promotion/rules/product.rb +3 -3
  54. data/app/models/spree/promotion_action.rb +2 -2
  55. data/app/models/spree/promotion_chooser.rb +2 -2
  56. data/app/models/spree/promotion_code.rb +11 -10
  57. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  58. data/app/models/spree/promotion_code_batch.rb +1 -1
  59. data/app/models/spree/promotion_rule.rb +2 -2
  60. data/app/models/spree/promotion_rule_role.rb +2 -2
  61. data/app/models/spree/promotion_rule_store.rb +2 -2
  62. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  63. data/app/models/spree/promotion_rule_user.rb +2 -2
  64. data/app/models/spree/refund.rb +5 -5
  65. data/app/models/spree/reimbursement.rb +5 -13
  66. data/app/models/spree/reimbursement/credit.rb +2 -2
  67. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  68. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  69. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -2
  70. data/app/models/spree/return_authorization.rb +4 -10
  71. data/app/models/spree/return_item.rb +13 -52
  72. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  73. data/app/models/spree/role_user.rb +2 -2
  74. data/app/models/spree/shipment.rb +7 -41
  75. data/app/models/spree/shipping_calculator.rb +0 -4
  76. data/app/models/spree/shipping_manifest.rb +3 -3
  77. data/app/models/spree/shipping_method.rb +2 -2
  78. data/app/models/spree/shipping_method_category.rb +2 -2
  79. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  80. data/app/models/spree/shipping_method_zone.rb +2 -2
  81. data/app/models/spree/shipping_rate.rb +2 -2
  82. data/app/models/spree/shipping_rate_tax.rb +2 -2
  83. data/app/models/spree/state.rb +2 -2
  84. data/app/models/spree/state_change.rb +2 -2
  85. data/app/models/spree/stock/differentiator.rb +1 -1
  86. data/app/models/spree/stock/package.rb +1 -1
  87. data/app/models/spree/stock_item.rb +3 -3
  88. data/app/models/spree/stock_location.rb +2 -2
  89. data/app/models/spree/stock_movement.rb +2 -2
  90. data/app/models/spree/stock_quantities.rb +13 -12
  91. data/app/models/spree/store_credit.rb +8 -8
  92. data/app/models/spree/store_credit_event.rb +3 -3
  93. data/app/models/spree/store_payment_method.rb +2 -2
  94. data/app/models/spree/store_shipping_method.rb +2 -2
  95. data/app/models/spree/tax_calculator/default.rb +0 -4
  96. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  97. data/app/models/spree/tax_rate.rb +5 -1
  98. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  99. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  100. data/app/models/spree/unit_cancel.rb +5 -2
  101. data/app/models/spree/user_address.rb +2 -2
  102. data/app/models/spree/user_last_url_storer.rb +46 -0
  103. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  104. data/app/models/spree/user_stock_location.rb +2 -2
  105. data/app/models/spree/variant.rb +10 -10
  106. data/app/models/spree/variant/scopes.rb +37 -29
  107. data/app/models/spree/variant_property_rule.rb +1 -1
  108. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  109. data/app/models/spree/variant_property_rule_value.rb +2 -2
  110. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
  111. data/app/models/spree/wallet_payment_source.rb +2 -2
  112. data/app/models/spree/zone.rb +1 -1
  113. data/app/models/spree/zone_member.rb +2 -2
  114. data/config/initializers/inflections.rb +5 -0
  115. data/config/initializers/money.rb +2 -0
  116. data/config/locales/en.yml +34 -3
  117. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  118. data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +8 -0
  119. data/lib/spree/app_configuration.rb +18 -3
  120. data/lib/spree/core.rb +12 -0
  121. data/lib/spree/core/controller_helpers/auth.rb +1 -13
  122. data/lib/spree/core/engine.rb +2 -2
  123. data/lib/spree/core/importer/order.rb +28 -28
  124. data/lib/spree/core/importer/product.rb +2 -2
  125. data/lib/spree/core/product_filters.rb +15 -15
  126. data/lib/spree/core/role_configuration.rb +2 -2
  127. data/lib/spree/core/search/variant.rb +1 -1
  128. data/lib/spree/core/state_machines.rb +78 -0
  129. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  130. data/lib/spree/core/state_machines/payment.rb +61 -0
  131. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  132. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  133. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  134. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  135. data/lib/spree/core/state_machines/shipment.rb +58 -0
  136. data/lib/spree/core/stock_configuration.rb +1 -0
  137. data/lib/spree/core/validators/email.rb +1 -8
  138. data/lib/spree/core/version.rb +1 -1
  139. data/lib/spree/money.rb +2 -2
  140. data/lib/spree/permission_sets/default_customer.rb +1 -1
  141. data/lib/spree/permission_sets/user_management.rb +3 -0
  142. data/lib/spree/permitted_attributes.rb +3 -3
  143. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  144. data/lib/spree/testing_support/dummy_app.rb +4 -1
  145. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
  146. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
  148. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  149. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  150. data/solidus_core.gemspec +6 -6
  151. data/spec/lib/search/base_spec.rb +5 -1
  152. data/spec/lib/search/variant_spec.rb +1 -1
  153. data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
  154. data/spec/lib/spree/core/validators/email_spec.rb +18 -18
  155. data/spec/lib/spree/event_spec.rb +15 -3
  156. data/spec/models/spree/ability_spec.rb +1 -1
  157. data/spec/models/spree/address_spec.rb +23 -0
  158. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
  159. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
  160. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
  161. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
  162. data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
  163. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
  164. data/spec/models/spree/carton_spec.rb +10 -2
  165. data/spec/models/spree/classification_spec.rb +21 -9
  166. data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
  167. data/spec/models/spree/concerns/user_methods_spec.rb +5 -4
  168. data/spec/models/spree/credit_card_spec.rb +2 -2
  169. data/spec/models/spree/customer_return_spec.rb +1 -1
  170. data/spec/models/spree/order/checkout_spec.rb +1 -1
  171. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
  172. data/spec/models/spree/order/payment_spec.rb +1 -1
  173. data/spec/models/spree/order_contents_spec.rb +1 -1
  174. data/spec/models/spree/order_inventory_spec.rb +3 -3
  175. data/spec/models/spree/order_merger_spec.rb +3 -3
  176. data/spec/models/spree/order_shipping_spec.rb +1 -1
  177. data/spec/models/spree/order_spec.rb +14 -21
  178. data/spec/models/spree/order_updater_spec.rb +4 -3
  179. data/spec/models/spree/payment_create_spec.rb +6 -16
  180. data/spec/models/spree/payment_spec.rb +12 -12
  181. data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
  182. data/spec/models/spree/preference_spec.rb +4 -4
  183. data/spec/models/spree/preferences/preferable_spec.rb +3 -3
  184. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
  185. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
  186. data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
  187. data/spec/models/spree/promotion_rule_spec.rb +6 -6
  188. data/spec/models/spree/promotion_spec.rb +71 -54
  189. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +3 -3
  190. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  191. data/spec/models/spree/return_item_spec.rb +11 -11
  192. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  193. data/spec/models/spree/shipment_spec.rb +6 -6
  194. data/spec/models/spree/shipping_calculator_spec.rb +1 -13
  195. data/spec/models/spree/shipping_method_spec.rb +32 -0
  196. data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
  197. data/spec/models/spree/stock/differentiator_spec.rb +2 -2
  198. data/spec/models/spree/stock/estimator_spec.rb +3 -3
  199. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
  200. data/spec/models/spree/stock/package_spec.rb +28 -28
  201. data/spec/models/spree/stock/quantifier_spec.rb +2 -2
  202. data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
  203. data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
  204. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
  205. data/spec/models/spree/stock_quantities_spec.rb +1 -1
  206. data/spec/models/spree/store_credit_spec.rb +8 -8
  207. data/spec/models/spree/tax_category_spec.rb +1 -1
  208. data/spec/models/spree/tax_rate_spec.rb +1 -0
  209. data/spec/models/spree/taxon_spec.rb +2 -2
  210. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
  211. data/spec/models/spree/unit_cancel_spec.rb +5 -0
  212. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
  213. data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
  214. data/spec/models/spree/user_spec.rb +3 -3
  215. metadata +49 -43
  216. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  217. data/spec/models/spree/order/updating_spec.rb +0 -18
@@ -57,14 +57,14 @@ 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 } }
64
64
 
65
65
  before do
66
- reimbursement.order.payments.first.update_attributes!(amount: 5.0)
67
- return_item.update_attributes!(amount: refund_amount)
66
+ reimbursement.order.payments.first.update!(amount: 5.0)
67
+ return_item.update!(amount: refund_amount)
68
68
  end
69
69
 
70
70
  it "includes refunds all payment type" do
@@ -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
@@ -26,8 +26,8 @@ RSpec.describe Spree::ReturnItem, type: :model do
26
26
  let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
27
27
 
28
28
  before do
29
- inventory_unit.update_attributes!(state: 'shipped')
30
- return_item.update_attributes!(reception_status: 'awaiting')
29
+ inventory_unit.update!(state: 'shipped')
30
+ return_item.update!(reception_status: 'awaiting')
31
31
  allow(return_item).to receive(:eligible_for_return?).and_return(true)
32
32
  end
33
33
 
@@ -91,9 +91,9 @@ RSpec.describe Spree::ReturnItem, type: :model do
91
91
  let(:stock_item) { stock_location.stock_item(inventory_unit.variant) }
92
92
 
93
93
  before do
94
- inventory_unit.update_attributes!(state: 'shipped')
95
- return_item.update_attributes!(reception_status: 'awaiting')
96
- stock_location.update_attributes!(restock_inventory: true)
94
+ inventory_unit.update!(state: 'shipped')
95
+ return_item.update!(reception_status: 'awaiting')
96
+ stock_location.update!(restock_inventory: true)
97
97
  end
98
98
 
99
99
  it 'increases the count on hand' do
@@ -102,9 +102,9 @@ RSpec.describe Spree::ReturnItem, type: :model do
102
102
 
103
103
  context 'when variant does not track inventory' do
104
104
  before do
105
- inventory_unit.update_attributes!(state: 'shipped')
106
- inventory_unit.variant.update_attributes!(track_inventory: false)
107
- return_item.update_attributes!(reception_status: 'awaiting')
105
+ inventory_unit.update!(state: 'shipped')
106
+ inventory_unit.variant.update!(track_inventory: false)
107
+ return_item.update!(reception_status: 'awaiting')
108
108
  end
109
109
 
110
110
  it 'does not increase the count on hand' do
@@ -114,7 +114,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
114
114
 
115
115
  context "when the stock location's restock_inventory is false" do
116
116
  before do
117
- stock_location.update_attributes!(restock_inventory: false)
117
+ stock_location.update!(restock_inventory: false)
118
118
  end
119
119
 
120
120
  it 'does not increase the count on hand' do
@@ -135,7 +135,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
135
135
 
136
136
  Spree::ReturnItem::INTERMEDIATE_RECEPTION_STATUSES.each do |status|
137
137
  context "when the item was #{status}" do
138
- before { return_item.update_attributes!(reception_status: status) }
138
+ before { return_item.update!(reception_status: status) }
139
139
 
140
140
  it 'processes the inventory unit' do
141
141
  subject
@@ -293,7 +293,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
293
293
  subject { return_item.public_send("#{transition}!") }
294
294
  context "awaiting status" do
295
295
  before do
296
- return_item.update_attributes!(reception_status: 'awaiting')
296
+ return_item.update!(reception_status: 'awaiting')
297
297
  allow(return_item).to receive(:eligible_for_return?).and_return(true)
298
298
  end
299
299
 
@@ -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
@@ -152,7 +152,7 @@ RSpec.describe Spree::Shipment, type: :model do
152
152
 
153
153
  describe '#total_before_tax' do
154
154
  before do
155
- shipment.update_attributes!(cost: 10)
155
+ shipment.update!(cost: 10)
156
156
  end
157
157
  let!(:admin_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -1, source: nil) }
158
158
  let!(:promo_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -2, source: promo_action) }
@@ -250,7 +250,7 @@ RSpec.describe Spree::Shipment, type: :model do
250
250
  end
251
251
 
252
252
  it "can't get rates without a shipping address" do
253
- shipment.order.update_attributes!(ship_address: nil)
253
+ shipment.order.update!(ship_address: nil)
254
254
  expect(shipment.refresh_rates).to eq([])
255
255
  end
256
256
 
@@ -298,7 +298,7 @@ RSpec.describe Spree::Shipment, type: :model do
298
298
  shared_examples_for "pending if backordered" do
299
299
  it "should have a state of pending if backordered" do
300
300
  # Set as ready so we can test for change
301
- shipment.update_attributes!(state: 'ready')
301
+ shipment.update!(state: 'ready')
302
302
 
303
303
  allow(shipment).to receive_messages(inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false, shipped?: false)])
304
304
  expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
@@ -310,7 +310,7 @@ RSpec.describe Spree::Shipment, type: :model do
310
310
  before { allow(order).to receive_messages can_ship?: false }
311
311
  it "should result in a 'pending' state" do
312
312
  # Set as ready so we can test for change
313
- shipment.update_attributes!(state: 'ready')
313
+ shipment.update!(state: 'ready')
314
314
  expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
315
315
  shipment.update_state
316
316
  end
@@ -768,8 +768,8 @@ RSpec.describe Spree::Shipment, type: :model do
768
768
  .to receive(:new).and_return(inventory_unit_finalizer)
769
769
 
770
770
  stock_item.set_count_on_hand(10)
771
- stock_item.update_attributes!(backorderable: false)
772
- inventory_unit.update_attributes!(pending: true)
771
+ stock_item.update!(backorderable: false)
772
+ inventory_unit.update!(pending: true)
773
773
  end
774
774
 
775
775
  subject { shipment.finalize! }
@@ -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
 
@@ -12,8 +12,8 @@ module Spree
12
12
 
13
13
  before do
14
14
  stock_item.set_count_on_hand(10)
15
- stock_item.update_attributes!(backorderable: false)
16
- inventory_unit.update_attributes!(pending: true)
15
+ stock_item.update!(backorderable: false)
16
+ inventory_unit.update!(pending: true)
17
17
  end
18
18
 
19
19
  subject { described_class.new([inventory_unit]).run! }
@@ -42,8 +42,8 @@ module Spree
42
42
  before do
43
43
  stock_item.set_count_on_hand(10)
44
44
  stock_item_2.set_count_on_hand(10)
45
- inventory_unit.update_attributes!(pending: true)
46
- inventory_unit_2.update_attributes!(pending: true)
45
+ inventory_unit.update!(pending: true)
46
+ inventory_unit_2.update!(pending: true)
47
47
  end
48
48
 
49
49
  subject { described_class.new([inventory_unit, inventory_unit_2]).run! }
@@ -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
@@ -49,7 +49,7 @@ module Spree
49
49
  end
50
50
 
51
51
  context 'when stock item prevents backordering' do
52
- before { stock_item.update_attributes(backorderable: false) }
52
+ before { stock_item.update(backorderable: false) }
53
53
 
54
54
  specify { expect(subject.backorderable?).to be false }
55
55
 
@@ -81,7 +81,7 @@ module Spree
81
81
  end
82
82
 
83
83
  context 'when all stock items prevent backordering' do
84
- before { stock_item.update_attributes(backorderable: false) }
84
+ before { stock_item.update(backorderable: false) }
85
85
 
86
86
  specify { expect(subject.backorderable?).to be false }
87
87
 
@@ -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