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
@@ -12,27 +12,27 @@ RSpec.describe Spree::EmailValidator do
12
12
 
13
13
  let(:valid_emails) {
14
14
  [
15
- 'valid@email.com',
16
- 'valid@email.com.uk',
17
- 'e@email.com',
18
- 'valid+email@email.com',
19
- 'valid-email@email.com',
20
- 'valid_email@email.com',
21
- 'valid.email@email.com'
22
- ]
15
+ 'valid@email.com',
16
+ 'valid@email.com.uk',
17
+ 'e@email.com',
18
+ 'valid+email@email.com',
19
+ 'valid-email@email.com',
20
+ 'valid_email@email.com',
21
+ 'valid.email@email.com'
22
+ ]
23
23
  }
24
24
  let(:invalid_emails) {
25
25
  [
26
- 'invalid email@email.com',
27
- '.invalid.email@email.com',
28
- 'invalid.email.@email.com',
29
- '@email.com',
30
- '.@email.com',
31
- 'invalidemailemail.com',
32
- '@invalid.email@email.com',
33
- 'invalid@email@email.com',
34
- 'invalid.email@@email.com'
35
- ]
26
+ 'invalid email@email.com',
27
+ '.invalid.email@email.com',
28
+ 'invalid.email.@email.com',
29
+ '@email.com',
30
+ '.@email.com',
31
+ 'invalidemailemail.com',
32
+ '@invalid.email@email.com',
33
+ 'invalid@email@email.com',
34
+ 'invalid.email@@email.com'
35
+ ]
36
36
  }
37
37
 
38
38
  it 'validates valid email addresses' do
@@ -18,14 +18,26 @@ RSpec.describe Spree::Event do
18
18
  before do
19
19
  # ActiveSupport::Notifications does not provide an interface to clean all
20
20
  # subscribers at once, so some low level brittle code is required
21
- @old_subscribers = notifier.instance_variable_get('@subscribers').dup
21
+ if Rails.gem_version >= Gem::Version.new('6.0.0')
22
+ @old_string_subscribers = notifier.instance_variable_get('@string_subscribers').dup
23
+ @old_other_subscribers = notifier.instance_variable_get('@other_subscribers').dup
24
+ notifier.instance_variable_get('@string_subscribers').clear
25
+ notifier.instance_variable_get('@other_subscribers').clear
26
+ else
27
+ @old_subscribers = notifier.instance_variable_get('@subscribers').dup
28
+ notifier.instance_variable_get('@subscribers').clear
29
+ end
22
30
  @old_listeners = notifier.instance_variable_get('@listeners_for').dup
23
- notifier.instance_variable_get('@subscribers').clear
24
31
  notifier.instance_variable_get('@listeners_for').clear
25
32
  end
26
33
 
27
34
  after do
28
- notifier.instance_variable_set '@subscribers', @old_subscribers
35
+ if Rails.gem_version >= Gem::Version.new('6.0.0')
36
+ notifier.instance_variable_set '@string_subscribers', @old_string_subscribers
37
+ notifier.instance_variable_set '@other_subscribers', @old_other_subscribers
38
+ else
39
+ notifier.instance_variable_set '@subscribers', @old_subscribers
40
+ end
29
41
  notifier.instance_variable_set '@listeners_for', @old_listeners
30
42
  end
31
43
 
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ RSpec.describe Spree::PermittedAttributes do
6
+ describe ".checkout_attributes" do
7
+ subject(:permitted_attributes) { described_class }
8
+
9
+ it "when read emits a deprecation warning and return all steps attributes" do
10
+ expect(Spree::Deprecation).to receive(:warn)
11
+ all_attributes = permitted_attributes.checkout_attributes
12
+
13
+ expect(all_attributes).to include(*permitted_attributes.checkout_address_attributes)
14
+ expect(all_attributes).to include(*permitted_attributes.checkout_delivery_attributes)
15
+ expect(all_attributes).to include(*permitted_attributes.checkout_payment_attributes)
16
+ end
17
+
18
+ it "when changed emits a deprecation warning and push changes to all steps' attributes" do
19
+ expect(Spree::Deprecation).to receive(:warn).exactly(4).times
20
+ permitted_attributes.checkout_attributes.push :appended_attribute
21
+ permitted_attributes.checkout_attributes.append :appended_with_alias_attribute
22
+ permitted_attributes.checkout_attributes << :another_appended_attribute
23
+ permitted_attributes.checkout_attributes.prepend :prepended_attribute
24
+
25
+ checkout_steps_attributes = [
26
+ permitted_attributes.checkout_address_attributes,
27
+ permitted_attributes.checkout_delivery_attributes,
28
+ permitted_attributes.checkout_payment_attributes,
29
+ permitted_attributes.checkout_confirm_attributes
30
+ ]
31
+
32
+ checkout_steps_attributes.each do |step_attributes|
33
+ expect(step_attributes).to include(
34
+ :appended_attribute,
35
+ :appended_with_alias_attribute,
36
+ :another_appended_attribute,
37
+ :prepended_attribute)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -59,7 +59,7 @@ RSpec.describe Spree::Ability, type: :model do
59
59
  let(:resource) { Object.new }
60
60
 
61
61
  context 'with admin user' do
62
- let(:user) { build :admin_user }
62
+ let(:user) { create :admin_user }
63
63
  it_should_behave_like 'access granted'
64
64
  it_should_behave_like 'index allowed'
65
65
  end
@@ -152,6 +152,29 @@ RSpec.describe Spree::Address, type: :model do
152
152
  it "sets up a new record with Spree::Config[:default_country_iso]" do
153
153
  expect(Spree::Address.build_default.country).to eq default_country
154
154
  end
155
+
156
+ it 'accepts other attributes' do
157
+ address = Spree::Address.build_default(first_name: 'Ryan')
158
+
159
+ expect(address.country).to eq default_country
160
+ expect(address.first_name).to eq 'Ryan'
161
+ end
162
+
163
+ it 'accepts a block' do
164
+ address = Spree::Address.build_default do |record|
165
+ record.first_name = 'Ryan'
166
+ end
167
+
168
+ expect(address.country).to eq default_country
169
+ expect(address.first_name).to eq 'Ryan'
170
+ end
171
+
172
+ it 'can override the country' do
173
+ another_country = build :country
174
+ address = Spree::Address.build_default(country: another_country)
175
+
176
+ expect(address.country).to eq another_country
177
+ end
155
178
  end
156
179
 
157
180
  # Regression test for https://github.com/spree/spree/issues/1142
@@ -36,7 +36,7 @@ RSpec.describe Spree::Calculator::Returns::DefaultRefundAmount, type: :model do
36
36
  source_type: 'Spree::Order'
37
37
  )
38
38
 
39
- order.adjustments.first.update_attributes(amount: adjustment_amount)
39
+ order.adjustments.first.update(amount: adjustment_amount)
40
40
  end
41
41
 
42
42
  it 'will return the line item amount deducted of refund' do
@@ -25,7 +25,7 @@ module Spree
25
25
  )
26
26
  end
27
27
 
28
- subject { FlatPercentItemTotal.new(preferred_flat_percent: 10) }
28
+ subject { described_class.new(preferred_flat_percent: 10) }
29
29
 
30
30
  it "should round result correctly" do
31
31
  expect(subject.compute(package)).to eq(4.04)
@@ -6,7 +6,7 @@ require 'shared_examples/calculator_shared_examples'
6
6
  module Spree
7
7
  module Calculator::Shipping
8
8
  RSpec.describe FlatRate, type: :model do
9
- subject { Calculator::Shipping::FlatRate.new(preferred_amount: 4.00) }
9
+ subject { described_class.new(preferred_amount: 4.00) }
10
10
 
11
11
  it_behaves_like 'a calculator with a description'
12
12
 
@@ -15,7 +15,7 @@ module Spree
15
15
  build(:stock_package, variants_contents: { variant1 => 4, variant2 => 6 })
16
16
  end
17
17
 
18
- let(:subject) { FlexiRate.new }
18
+ let(:subject) { described_class.new }
19
19
 
20
20
  context "compute" do
21
21
  it "should compute amount correctly when all fees are 0" do
@@ -46,7 +46,7 @@ module Spree
46
46
  end
47
47
 
48
48
  it "should allow creation of new object with all the attributes" do
49
- FlexiRate.new(preferred_first_item: 1,
49
+ described_class.new(preferred_first_item: 1,
50
50
  preferred_additional_item: 1,
51
51
  preferred_max_items: 1)
52
52
  end
@@ -15,7 +15,7 @@ module Spree
15
15
  build(:stock_package, variants_contents: { variant1 => 5, variant2 => 3 })
16
16
  end
17
17
 
18
- subject { PerItem.new(preferred_amount: 10) }
18
+ subject { described_class.new(preferred_amount: 10) }
19
19
 
20
20
  it "correctly calculates per item shipping" do
21
21
  expect(subject.compute(package).to_f).to eq(80) # 5 x 10 + 3 x 10
@@ -5,7 +5,7 @@ require 'shared_examples/calculator_shared_examples'
5
5
 
6
6
  RSpec.describe Spree::Calculator::Shipping::PriceSack, type: :model do
7
7
  let(:calculator) do
8
- calculator = Spree::Calculator::PriceSack.new
8
+ calculator = described_class.new
9
9
  calculator.preferred_minimal_amount = 5
10
10
  calculator.preferred_normal_amount = 10
11
11
  calculator.preferred_discount_amount = 1
@@ -14,22 +14,31 @@ RSpec.describe Spree::Calculator::Shipping::PriceSack, type: :model do
14
14
 
15
15
  it_behaves_like 'a calculator with a description'
16
16
 
17
- let(:order) { stub_model(Spree::Order) }
18
- let(:shipment) { stub_model(Spree::Shipment, amount: 10) }
17
+ describe '#compute' do
18
+ subject { calculator.compute(package) }
19
+ let(:package) { build(:stock_package, variants_contents: { build(:variant) => 1 }) }
19
20
 
20
- # Regression test for https://github.com/spree/spree/issues/714 and https://github.com/spree/spree/issues/739
21
- it "computes with an order object" do
22
- calculator.compute(order)
23
- end
21
+ before do
22
+ # This hack is due to our factories not being so smart to understand
23
+ # that they should create line items with the price of the associated
24
+ # variant by default.
25
+ allow_any_instance_of(Spree::Stock::ContentItem).to receive(:price) { amount }
26
+ end
24
27
 
25
- # Regression test for https://github.com/spree/spree/issues/1156
26
- it "computes with a shipment object" do
27
- calculator.compute(shipment)
28
- end
28
+ context 'when price < minimal amount' do
29
+ let(:amount) { 2 }
30
+
31
+ it "returns the discounted amount" do
32
+ expect(subject).to eq(10)
33
+ end
34
+ end
35
+
36
+ context 'when price > minimal amount' do
37
+ let(:amount) { 6 }
29
38
 
30
- # Regression test for https://github.com/spree/spree/issues/2055
31
- it "computes the correct amount" do
32
- expect(calculator.compute(2)).to eq(calculator.preferred_normal_amount)
33
- expect(calculator.compute(6)).to eq(calculator.preferred_discount_amount)
39
+ it "returns the discounted amount" do
40
+ expect(subject).to eq(1)
41
+ end
42
+ end
34
43
  end
35
44
  end
@@ -5,6 +5,14 @@ require 'rails_helper'
5
5
  RSpec.describe Spree::Carton do
6
6
  let(:carton) { create(:carton) }
7
7
 
8
+ describe 'shipping method' do
9
+ it 'returns soft deleted shipping method' do
10
+ carton = create(:carton)
11
+ carton.shipping_method.discard
12
+ expect(carton.reload.shipping_method).to be_present
13
+ end
14
+ end
15
+
8
16
  describe "#create" do
9
17
  subject { carton }
10
18
 
@@ -73,8 +81,8 @@ RSpec.describe Spree::Carton do
73
81
  let(:email) { 'something@something.com' }
74
82
 
75
83
  before do
76
- first_order.update_attributes!(email: email)
77
- second_order.update_attributes!(email: email)
84
+ first_order.update!(email: email)
85
+ second_order.update!(email: email)
78
86
  end
79
87
 
80
88
  it "returns a unique list of the order emails it is associated to" do
@@ -34,9 +34,21 @@ module Spree
34
34
 
35
35
  context "removing product from taxon" do
36
36
  before :each do
37
- p = taxon_with_5_products.products[1]
38
- expect(p.classifications.first.position).to eq(2)
39
- taxon_with_5_products.products.destroy(p)
37
+ element = taxon_with_5_products.products[1]
38
+ expect(element.classifications.first.position).to eq(2)
39
+ taxon_with_5_products.products.destroy(element)
40
+ end
41
+
42
+ it "resets positions" do
43
+ expect positions_to_be_valid(taxon_with_5_products)
44
+ end
45
+ end
46
+
47
+ context "Discard'ing a product" do
48
+ before :each do
49
+ element = taxon_with_5_products.products[1]
50
+ expect(element.classifications.first.position).to eq(2)
51
+ element.discard
40
52
  end
41
53
 
42
54
  it "resets positions" do
@@ -59,9 +71,9 @@ module Spree
59
71
 
60
72
  context "removing taxon from product" do
61
73
  before :each do
62
- p = taxon_with_5_products.products[1]
63
- p.taxons.destroy(taxon_with_5_products)
64
- p.save!
74
+ element = taxon_with_5_products.products[1]
75
+ element.taxons.destroy(taxon_with_5_products)
76
+ element.save!
65
77
  end
66
78
 
67
79
  it "resets positions" do
@@ -71,9 +83,9 @@ module Spree
71
83
 
72
84
  context "replacing product's taxons" do
73
85
  before :each do
74
- p = taxon_with_5_products.products[1]
75
- p.taxons = []
76
- p.save!
86
+ element = taxon_with_5_products.products[1]
87
+ element.taxons = []
88
+ element.save!
77
89
  end
78
90
 
79
91
  it "resets positions" do
@@ -77,7 +77,7 @@ module Spree
77
77
  end
78
78
 
79
79
  context "and changing another address field at the same time" do
80
- let(:updated_address_attributes) { address.attributes.tap { |a| a[:first_name] = "Newbie" } }
80
+ let(:updated_address_attributes) { address.attributes.tap { |value| value[:first_name] = "Newbie" } }
81
81
 
82
82
  subject { user.save_in_address_book(updated_address_attributes, true) }
83
83
 
@@ -104,7 +104,7 @@ module Spree
104
104
  let(:address1) { create(:address) }
105
105
  let(:address2) { create(:address, firstname: "Different") }
106
106
  let(:updated_attrs) do
107
- address2.attributes.tap { |a| a[:firstname] = "Johnny" }
107
+ address2.attributes.tap { |value| value[:firstname] = "Johnny" }
108
108
  end
109
109
 
110
110
  before do
@@ -191,8 +191,8 @@ module Spree
191
191
 
192
192
  it "archives address2" do
193
193
  subject
194
- user_address2 = user.user_addresses.all_historical.find_by(address_id: address2.id)
195
- expect(user_address2.archived).to be true
194
+ user_address_two = user.user_addresses.all_historical.find_by(address_id: address2.id)
195
+ expect(user_address_two.archived).to be true
196
196
  end
197
197
 
198
198
  context "via a new address that matches an archived one" do
@@ -62,7 +62,7 @@ RSpec.describe Spree::UserMethods do
62
62
 
63
63
  describe '#available_store_credit_total' do
64
64
  subject do
65
- test_user.available_store_credit_total(currency: 'USD')
65
+ test_user.reload.available_store_credit_total(currency: 'USD')
66
66
  end
67
67
 
68
68
  context 'when the user does not have any credit' do
@@ -76,25 +76,26 @@ RSpec.describe Spree::UserMethods do
76
76
  it { is_expected.to eq(100 + 200) }
77
77
 
78
78
  context 'when some has been used' do
79
- before { credit_1.update_attributes!(amount_used: 35) }
79
+ before { credit_1.update!(amount_used: 35) }
80
80
 
81
81
  it { is_expected.to eq(100 + 200 - 35) }
82
82
 
83
83
  context 'when some has been authorized' do
84
- before { credit_1.update_attributes!(amount_authorized: 10) }
84
+ before { credit_1.update!(amount_authorized: 10) }
85
85
 
86
86
  it { is_expected.to eq(100 + 200 - 35 - 10) }
87
87
  end
88
88
  end
89
89
 
90
90
  context 'when some has been authorized' do
91
- before { credit_1.update_attributes!(amount_authorized: 10) }
91
+ before { credit_1.update!(amount_authorized: 10) }
92
92
 
93
93
  it { is_expected.to eq(100 + 200 - 10) }
94
94
  end
95
95
 
96
96
  context 'with credits of multiple currencies' do
97
97
  let!(:credit_3) { create(:store_credit, user: test_user, amount: 400, currency: 'GBP') }
98
+ before { test_user.reload }
98
99
 
99
100
  it 'separates the currencies' do
100
101
  expect(test_user.available_store_credit_total(currency: 'USD')).to eq(100 + 200)
@@ -109,10 +109,10 @@ RSpec.describe Spree::CreditCard, type: :model do
109
109
  end
110
110
 
111
111
  it "should save and update addresses through nested attributes" do
112
- persisted_card.update_attributes({ address_attributes: valid_address_attributes })
112
+ persisted_card.update({ address_attributes: valid_address_attributes })
113
113
  persisted_card.save!
114
114
  updated_attributes = { id: persisted_card.address.id, address1: "123 Main St." }
115
- persisted_card.update_attributes({ address_attributes: updated_attributes })
115
+ persisted_card.update({ address_attributes: updated_attributes })
116
116
  expect(persisted_card.address.address1).to eq "123 Main St."
117
117
  end
118
118
  end
@@ -233,7 +233,7 @@ RSpec.describe Spree::CustomerReturn, type: :model do
233
233
 
234
234
  context "it was not received" do
235
235
  before do
236
- return_item.update_attributes!(reception_status: "lost_in_transit")
236
+ return_item.update!(reception_status: "lost_in_transit")
237
237
  end
238
238
 
239
239
  it 'should not updated inventory unit to returned' do
@@ -456,7 +456,7 @@ RSpec.describe Spree::Order, type: :model do
456
456
  order.line_items << FactoryBot.create(:line_item)
457
457
  order.line_items.first.variant.stock_items.each do |si|
458
458
  si.set_count_on_hand(0)
459
- si.update_attributes(backorderable: false)
459
+ si.update(backorderable: false)
460
460
  end
461
461
 
462
462
  Spree::OrderUpdater.new(order).update