solidus_core 2.9.5 → 2.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) 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/controller_helpers/strong_parameters.rb +21 -7
  123. data/lib/spree/core/engine.rb +2 -2
  124. data/lib/spree/core/importer/order.rb +29 -28
  125. data/lib/spree/core/importer/product.rb +2 -2
  126. data/lib/spree/core/product_filters.rb +15 -15
  127. data/lib/spree/core/role_configuration.rb +2 -2
  128. data/lib/spree/core/search/variant.rb +1 -1
  129. data/lib/spree/core/state_machines.rb +78 -0
  130. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  131. data/lib/spree/core/state_machines/payment.rb +61 -0
  132. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  133. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  134. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  135. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  136. data/lib/spree/core/state_machines/shipment.rb +58 -0
  137. data/lib/spree/core/stock_configuration.rb +1 -0
  138. data/lib/spree/core/validators/email.rb +1 -8
  139. data/lib/spree/core/version.rb +1 -1
  140. data/lib/spree/money.rb +2 -2
  141. data/lib/spree/permission_sets/default_customer.rb +1 -1
  142. data/lib/spree/permission_sets/user_management.rb +3 -0
  143. data/lib/spree/permitted_attributes.rb +78 -9
  144. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  145. data/lib/spree/testing_support/dummy_app.rb +4 -1
  146. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -2
  147. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  148. data/lib/spree/testing_support/factories/promotion_factory.rb +7 -0
  149. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  151. data/solidus_core.gemspec +6 -6
  152. data/spec/lib/search/base_spec.rb +5 -1
  153. data/spec/lib/search/variant_spec.rb +1 -1
  154. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +8 -1
  155. data/spec/lib/spree/core/stock_configuration_spec.rb +36 -0
  156. data/spec/lib/spree/core/validators/email_spec.rb +18 -18
  157. data/spec/lib/spree/event_spec.rb +15 -3
  158. data/spec/lib/spree/permitted_attributes_spec.rb +41 -0
  159. data/spec/models/spree/ability_spec.rb +1 -1
  160. data/spec/models/spree/address_spec.rb +23 -0
  161. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +1 -1
  162. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +1 -1
  163. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +1 -1
  164. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +2 -2
  165. data/spec/models/spree/calculator/shipping/per_item_spec.rb +1 -1
  166. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +24 -15
  167. data/spec/models/spree/carton_spec.rb +10 -2
  168. data/spec/models/spree/classification_spec.rb +21 -9
  169. data/spec/models/spree/concerns/user_address_book_spec.rb +4 -4
  170. data/spec/models/spree/concerns/user_methods_spec.rb +5 -4
  171. data/spec/models/spree/credit_card_spec.rb +2 -2
  172. data/spec/models/spree/customer_return_spec.rb +1 -1
  173. data/spec/models/spree/order/checkout_spec.rb +1 -1
  174. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +5 -5
  175. data/spec/models/spree/order/payment_spec.rb +1 -1
  176. data/spec/models/spree/order_contents_spec.rb +1 -1
  177. data/spec/models/spree/order_inventory_spec.rb +3 -3
  178. data/spec/models/spree/order_merger_spec.rb +3 -3
  179. data/spec/models/spree/order_shipping_spec.rb +1 -1
  180. data/spec/models/spree/order_spec.rb +14 -21
  181. data/spec/models/spree/order_updater_spec.rb +4 -3
  182. data/spec/models/spree/payment_create_spec.rb +6 -16
  183. data/spec/models/spree/payment_spec.rb +12 -12
  184. data/spec/models/spree/permission_sets/user_management_spec.rb +2 -0
  185. data/spec/models/spree/preference_spec.rb +4 -4
  186. data/spec/models/spree/preferences/preferable_spec.rb +3 -3
  187. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -2
  188. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +2 -2
  189. data/spec/models/spree/promotion/rules/nth_order_spec.rb +2 -2
  190. data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -0
  191. data/spec/models/spree/promotion_rule_spec.rb +6 -6
  192. data/spec/models/spree/promotion_spec.rb +71 -54
  193. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +3 -3
  194. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  195. data/spec/models/spree/return_item_spec.rb +11 -11
  196. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  197. data/spec/models/spree/shipment_spec.rb +6 -6
  198. data/spec/models/spree/shipping_calculator_spec.rb +1 -13
  199. data/spec/models/spree/shipping_method_spec.rb +32 -0
  200. data/spec/models/spree/stock/availability_validator_spec.rb +2 -2
  201. data/spec/models/spree/stock/differentiator_spec.rb +2 -2
  202. data/spec/models/spree/stock/estimator_spec.rb +3 -3
  203. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +4 -4
  204. data/spec/models/spree/stock/package_spec.rb +28 -28
  205. data/spec/models/spree/stock/quantifier_spec.rb +2 -2
  206. data/spec/models/spree/stock/simple_coordinator_spec.rb +11 -11
  207. data/spec/models/spree/stock/splitter/base_spec.rb +4 -4
  208. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +7 -7
  209. data/spec/models/spree/stock_quantities_spec.rb +1 -1
  210. data/spec/models/spree/store_credit_spec.rb +8 -8
  211. data/spec/models/spree/tax_category_spec.rb +1 -1
  212. data/spec/models/spree/tax_rate_spec.rb +1 -0
  213. data/spec/models/spree/taxon_spec.rb +2 -2
  214. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +29 -0
  215. data/spec/models/spree/unit_cancel_spec.rb +5 -0
  216. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +31 -0
  217. data/spec/models/spree/user_last_url_storer_spec.rb +60 -0
  218. data/spec/models/spree/user_spec.rb +3 -3
  219. metadata +46 -39
  220. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  221. data/spec/models/spree/order/updating_spec.rb +0 -18
@@ -101,6 +101,7 @@ RSpec.describe Spree::Promotion::Rules::Taxon, type: :model do
101
101
  before do
102
102
  taxon.children << taxon2
103
103
  taxon.save!
104
+ taxon.reload
104
105
  product.taxons = [taxon2, taxon3]
105
106
  rule.taxons = [taxon, taxon3]
106
107
  end
@@ -17,13 +17,13 @@ module Spree
17
17
  end
18
18
 
19
19
  it "validates unique rules for a promotion" do
20
- p1 = TestRule.new
21
- p1.promotion_id = 1
22
- p1.save
20
+ promotion_one = TestRule.new
21
+ promotion_one.promotion_id = 1
22
+ promotion_one.save
23
23
 
24
- p2 = TestRule.new
25
- p2.promotion_id = 1
26
- expect(p2).not_to be_valid
24
+ promotion_two = TestRule.new
25
+ promotion_two.promotion_id = 1
26
+ expect(promotion_two).not_to be_valid
27
27
  end
28
28
 
29
29
  it "generates its own partial path" do
@@ -434,12 +434,12 @@ RSpec.describe Spree::Promotion, type: :model do
434
434
  end
435
435
 
436
436
  context 'when expires_at date is not already reached' do
437
- let(:expires_at) { Time.current + 1.days }
437
+ let(:expires_at) { Time.current + 1.day }
438
438
  it { is_expected.to be_falsey }
439
439
  end
440
440
 
441
441
  context 'when expires_at date is in the past' do
442
- let(:expires_at) { Time.current - 1.days }
442
+ let(:expires_at) { Time.current - 1.day }
443
443
  it { is_expected.to be_truthy }
444
444
  end
445
445
  end
@@ -454,12 +454,12 @@ RSpec.describe Spree::Promotion, type: :model do
454
454
  end
455
455
 
456
456
  context 'when expires_at date is not already reached' do
457
- let(:expires_at) { Time.current + 1.days }
457
+ let(:expires_at) { Time.current + 1.day }
458
458
  it { is_expected.to be_truthy }
459
459
  end
460
460
 
461
461
  context 'when expires_at date is in the past' do
462
- let(:expires_at) { Time.current - 1.days }
462
+ let(:expires_at) { Time.current - 1.day }
463
463
  it { is_expected.to be_falsey }
464
464
  end
465
465
  end
@@ -569,80 +569,69 @@ RSpec.describe Spree::Promotion, type: :model do
569
569
 
570
570
  context "#eligible?" do
571
571
  subject do
572
- promotion.eligible?(promotable)
572
+ promotion.eligible?(promotable, promotion_code: promotion.codes.first)
573
573
  end
574
574
 
575
- let(:promotable) { create :order }
575
+ shared_examples "a promotable" do
576
+ context "when empty" do
577
+ it { is_expected.to be true }
578
+ end
576
579
 
577
- it { is_expected.to be true }
580
+ context "when promotion is expired" do
581
+ before { promotion.expires_at = Time.current - 10.days }
578
582
 
579
- context "when promotion is expired" do
580
- before { promotion.expires_at = Time.current - 10.days }
581
- it { is_expected.to be false }
582
- end
583
+ it { is_expected.to be false }
584
+ end
583
585
 
584
- context "when the promotion's usage limit is exceeded" do
585
- let(:order) { FactoryBot.create(:completed_order_with_promotion, promotion: promotion) }
586
- let(:promotion) { FactoryBot.create(:promotion, :with_order_adjustment) }
586
+ context "when promotion's usage limit is exceeded" do
587
+ before do
588
+ promotion.usage_limit = 1
589
+ create(:completed_order_with_promotion, promotion: promotion)
590
+ end
587
591
 
588
- before do
589
- FactoryBot.create(
590
- :completed_order_with_promotion,
591
- promotion: promotion
592
- )
593
- promotion.usage_limit = 1
592
+ it { is_expected.to be false }
594
593
  end
595
594
 
596
- it "returns false" do
597
- expect(promotion.eligible?(promotable)).to eq(false)
595
+ context "when promotion code's usage limit is exceeded" do
596
+ before do
597
+ promotion.per_code_usage_limit = 1
598
+ create(:completed_order_with_promotion, promotion: promotion)
599
+ promotion.codes.first.adjustments.update_all(eligible: true)
600
+ end
601
+
602
+ it { is_expected.to be false }
598
603
  end
599
- end
600
604
 
601
- context "when the promotion code's usage limit is exceeded" do
602
- let(:order) { FactoryBot.create(:completed_order_with_promotion, promotion: promotion) }
603
- let(:promotion) { create(:promotion, :with_order_adjustment, code: 'abc123', per_code_usage_limit: 1) }
604
- let(:promotion_code) { promotion.codes.first }
605
+ context "when promotion is at last usage on the same order" do
606
+ let(:order) { create(:completed_order_with_promotion, promotion: promotion) }
607
+ let(:promotable) { order }
605
608
 
606
- before do
607
- FactoryBot.create(
608
- :completed_order_with_promotion,
609
- promotion: promotion
610
- )
611
- promotion_code.adjustments.update_all(eligible: true)
612
- end
609
+ before do
610
+ promotion.usage_limit = 1
611
+ end
613
612
 
614
- it "returns false" do
615
- expect(promotion.eligible?(promotable, promotion_code: promotion_code)).to eq(false)
613
+ it { is_expected.to be true }
616
614
  end
617
- end
618
615
 
619
- context "when promotable is a Spree::LineItem" do
620
- let(:promotable) { create :line_item }
621
- let(:product) { promotable.product }
616
+ context "when promotion code is at last usage on the same order" do
617
+ let(:order) { create(:completed_order_with_promotion, promotion: promotion) }
618
+ let(:promotable) { order }
622
619
 
623
- before do
624
- product.promotionable = promotionable
625
- end
620
+ before do
621
+ promotion.per_code_usage_limit = 1
622
+ end
626
623
 
627
- context "and product is promotionable" do
628
- let(:promotionable) { true }
629
624
  it { is_expected.to be true }
630
625
  end
631
-
632
- context "and product is not promotionable" do
633
- let(:promotionable) { false }
634
- it { is_expected.to be false }
635
- end
636
626
  end
637
627
 
638
628
  context "when promotable is a Spree::Order" do
629
+ let(:promotion) { create(:promotion, :with_order_adjustment) }
639
630
  let(:promotable) { create :order }
640
631
 
641
- context "and it is empty" do
642
- it { is_expected.to be true }
643
- end
632
+ it_behaves_like "a promotable"
644
633
 
645
- context "and it contains items" do
634
+ context "when it contains items" do
646
635
  let!(:line_item) { create(:line_item, order: promotable) }
647
636
  let!(:line_item2) { create(:line_item, order: promotable) }
648
637
 
@@ -650,6 +639,7 @@ RSpec.describe Spree::Promotion, type: :model do
650
639
  before do
651
640
  line_item.product.update_column(:promotionable, false)
652
641
  end
642
+
653
643
  it { is_expected.to be false }
654
644
  end
655
645
 
@@ -658,6 +648,7 @@ RSpec.describe Spree::Promotion, type: :model do
658
648
  line_item.product.update_column(:promotionable, false)
659
649
  line_item2.product.update_column(:promotionable, false)
660
650
  end
651
+
661
652
  it { is_expected.to be false }
662
653
  end
663
654
 
@@ -666,6 +657,32 @@ RSpec.describe Spree::Promotion, type: :model do
666
657
  end
667
658
  end
668
659
  end
660
+
661
+ context "when promotable is a Spree::LineItem" do
662
+ let(:promotion) { create(:promotion, :with_line_item_adjustment) }
663
+ let(:promotable) { create(:line_item) }
664
+
665
+ it_behaves_like "a promotable"
666
+
667
+ context "and product is promotionable" do
668
+ before { promotable.product.promotionable = true }
669
+
670
+ it { is_expected.to be true }
671
+ end
672
+
673
+ context "and product is not promotionable" do
674
+ before { promotable.product.promotionable = false }
675
+
676
+ it { is_expected.to be false }
677
+ end
678
+ end
679
+
680
+ context "when promotable is a Spree::Shipment" do
681
+ let(:promotion) { create(:promotion, :with_free_shipping) }
682
+ let(:promotable) { create(:shipment) }
683
+
684
+ it_behaves_like "a promotable"
685
+ end
669
686
  end
670
687
 
671
688
  context "#eligible_rules" do
@@ -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