solidus_core 2.9.5 → 2.10.2

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 (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