spree_core 4.2.0.beta → 4.2.0.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +2 -3
  3. data/app/controllers/spree/errors_controller.rb +11 -0
  4. data/app/finders/spree/addresses/find.rb +6 -0
  5. data/app/finders/spree/base_finder.rb +14 -0
  6. data/app/finders/spree/countries/find.rb +11 -3
  7. data/app/finders/spree/credit_cards/find.rb +2 -2
  8. data/app/finders/spree/orders/find_current.rb +2 -2
  9. data/app/finders/spree/products/find.rb +12 -1
  10. data/app/helpers/spree/base_helper.rb +38 -18
  11. data/app/helpers/spree/locale_helper.rb +19 -0
  12. data/app/helpers/spree/mail_helper.rb +12 -7
  13. data/app/helpers/spree/products_helper.rb +39 -13
  14. data/app/mailers/spree/base_mailer.rb +5 -5
  15. data/app/mailers/spree/order_mailer.rb +3 -3
  16. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  17. data/app/mailers/spree/shipment_mailer.rb +1 -1
  18. data/app/models/concerns/spree/default_price.rb +1 -5
  19. data/app/models/concerns/spree/user_methods.rb +2 -2
  20. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  21. data/app/models/spree/ability.rb +45 -34
  22. data/app/models/spree/address.rb +17 -1
  23. data/app/models/spree/adjustment.rb +1 -0
  24. data/app/models/spree/app_configuration.rb +2 -3
  25. data/app/models/spree/app_dependencies.rb +10 -2
  26. data/app/models/spree/base.rb +5 -0
  27. data/app/models/spree/credit_card.rb +5 -0
  28. data/app/models/spree/fulfilment_changer.rb +58 -16
  29. data/app/models/spree/image.rb +14 -14
  30. data/app/models/spree/inventory_unit.rb +2 -7
  31. data/app/models/spree/line_item.rb +9 -16
  32. data/app/models/spree/log_entry.rb +1 -1
  33. data/app/models/spree/option_type.rb +2 -0
  34. data/app/models/spree/order.rb +12 -6
  35. data/app/models/spree/order/address_book.rb +7 -20
  36. data/app/models/spree/order/payments.rb +10 -2
  37. data/app/models/spree/payment.rb +18 -4
  38. data/app/models/spree/payment/processing.rb +2 -2
  39. data/app/models/spree/payment_method.rb +3 -3
  40. data/app/models/spree/preferences/store.rb +1 -1
  41. data/app/models/spree/price.rb +1 -6
  42. data/app/models/spree/product.rb +24 -17
  43. data/app/models/spree/promotion.rb +10 -15
  44. data/app/models/spree/promotion/rules/option_value.rb +1 -1
  45. data/app/models/spree/promotion/rules/product.rb +2 -1
  46. data/app/models/spree/promotion/rules/user.rb +2 -1
  47. data/app/models/spree/promotion_handler/coupon.rb +1 -2
  48. data/app/models/spree/promotion_handler/promotion_duplicator.rb +9 -3
  49. data/app/models/spree/refund.rb +2 -2
  50. data/app/models/spree/return_item/eligibility_validator/default.rb +0 -2
  51. data/app/models/spree/return_item/eligibility_validator/{r_m_a_required.rb → rma_required.rb} +0 -0
  52. data/app/models/spree/shipment.rb +1 -1
  53. data/app/models/spree/shipping_method.rb +1 -5
  54. data/app/models/spree/shipping_rate.rb +2 -11
  55. data/app/models/spree/stock/availability_validator.rb +3 -4
  56. data/app/models/spree/stock_item.rb +1 -5
  57. data/app/models/spree/store.rb +45 -1
  58. data/app/models/spree/store_credit.rb +1 -1
  59. data/app/models/spree/variant.rb +8 -15
  60. data/app/models/spree/zone.rb +17 -4
  61. data/app/presenters/spree/variant_presenter.rb +4 -6
  62. data/app/services/spree/account/addresses/create.rb +23 -0
  63. data/app/services/spree/account/addresses/helper.rb +37 -0
  64. data/app/services/spree/account/addresses/update.rb +23 -0
  65. data/app/services/spree/cart/estimate_shipping_rates.rb +1 -1
  66. data/app/services/spree/checkout/update.rb +13 -2
  67. data/app/services/spree/compare_line_items.rb +4 -2
  68. data/app/sorters/spree/base_sorter.rb +35 -0
  69. data/app/sorters/spree/orders/sort.rb +1 -37
  70. data/app/sorters/spree/products/sort.rb +9 -32
  71. data/app/validators/email_validator.rb +1 -1
  72. data/app/views/spree/errors/forbidden.html.erb +0 -0
  73. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  74. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -2
  75. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +1 -1
  76. data/config/initializers/inflections.rb +3 -0
  77. data/config/initializers/rails61_fixes.rb +3 -0
  78. data/config/locales/en.yml +42 -63
  79. data/config/routes.rb +2 -1
  80. data/db/default/spree/countries.rb +10 -4
  81. data/db/default/spree/states.rb +42 -5
  82. data/db/default/spree/stores.rb +18 -13
  83. data/db/default/spree/zones.rb +5 -2
  84. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  85. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +5 -0
  86. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +12 -0
  87. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -0
  88. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +5 -0
  89. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +5 -0
  90. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +5 -0
  91. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +10 -0
  92. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +15 -0
  93. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +5 -0
  94. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +5 -0
  95. data/lib/generators/spree/install/templates/config/spree_storefront.yml +9 -9
  96. data/lib/spree/core.rb +3 -1
  97. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  98. data/lib/spree/core/controller_helpers/common.rb +6 -8
  99. data/lib/spree/core/controller_helpers/currency.rb +45 -0
  100. data/lib/spree/core/controller_helpers/locale.rb +57 -0
  101. data/lib/spree/core/controller_helpers/order.rb +9 -4
  102. data/lib/spree/core/controller_helpers/store.rb +4 -16
  103. data/lib/spree/core/importer/order.rb +9 -9
  104. data/lib/spree/core/product_filters.rb +3 -3
  105. data/lib/spree/core/version.rb +1 -1
  106. data/lib/spree/i18n.rb +7 -21
  107. data/lib/spree/permitted_attributes.rb +3 -3
  108. data/lib/spree/service_module.rb +6 -2
  109. data/lib/spree/testing_support/capybara_config.rb +1 -1
  110. data/lib/spree/testing_support/factories/promotion_factory.rb +29 -17
  111. data/lib/spree/testing_support/factories/shipment_factory.rb +7 -9
  112. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  113. data/lib/spree/testing_support/factories/zone_factory.rb +16 -13
  114. data/lib/spree/testing_support/i18n.rb +1 -1
  115. data/lib/spree/testing_support/order_walkthrough.rb +8 -3
  116. data/lib/spree/testing_support/rspec_retry_config.rb +10 -0
  117. data/spree_core.gemspec +7 -5
  118. metadata +90 -28
  119. data/lib/spree/core/controller_helpers/currency_helpers.rb +0 -15
  120. data/lib/spree/i18n/base.rb +0 -17
  121. data/lib/spree/i18n/initializer.rb +0 -1
@@ -52,10 +52,15 @@ module Spree
52
52
  end
53
53
 
54
54
  def set_current_order
55
- if try_spree_current_user && current_order
56
- try_spree_current_user.orders.incomplete.where('id != ?', current_order.id).each do |order|
57
- current_order.merge!(order, try_spree_current_user)
58
- end
55
+ return unless try_spree_current_user && current_order
56
+
57
+ orders_scope = try_spree_current_user.orders.
58
+ incomplete.
59
+ where.not(id: current_order.id).
60
+ where(store_id: current_store.id)
61
+
62
+ orders_scope.each do |order|
63
+ current_order.merge!(order, try_spree_current_user)
59
64
  end
60
65
  end
61
66
 
@@ -5,30 +5,18 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :supported_currencies
9
- helper_method :current_currency
10
8
  helper_method :current_store
11
9
  helper_method :current_price_options
12
10
  end
13
11
 
14
- def current_currency
15
- if defined?(session) && session.key?(:currency) && supported_currencies.map(&:iso_code).include?(session[:currency])
16
- session[:currency]
17
- elsif params[:currency].present? && supported_currencies.map(&:iso_code).include?(params[:currency])
18
- params[:currency]
19
- else
20
- current_store.default_currency
21
- end
22
- end
23
-
24
- def supported_currencies
25
- current_store.supported_currencies_list
26
- end
27
-
28
12
  def current_store
29
13
  @current_store ||= Spree::Store.current(request.env['SERVER_NAME'])
30
14
  end
31
15
 
16
+ def store_locale
17
+ current_store.default_locale
18
+ end
19
+
32
20
  # Return a Hash of things that influence the prices displayed in your shop.
33
21
  #
34
22
  # By default, the only thing that influences prices that is the current order's +tax_zone+
@@ -38,7 +38,7 @@ module Spree
38
38
  end
39
39
  end
40
40
  order.reload
41
- rescue Exception => e
41
+ rescue StandardError => e
42
42
  order.destroy if order&.persisted?
43
43
  raise e.message
44
44
  end
@@ -80,7 +80,7 @@ module Spree
80
80
 
81
81
  adjustments = s.delete(:adjustments_attributes)
82
82
  create_adjustments_from_params(adjustments, order, shipment)
83
- rescue Exception => e
83
+ rescue StandardError => e
84
84
  raise "Order import shipments: #{e.message} #{s}"
85
85
  end
86
86
  end
@@ -115,7 +115,7 @@ module Spree
115
115
  line_item.save!
116
116
  end
117
117
  create_adjustments_from_params(adjustments, order, line_item)
118
- rescue Exception => e
118
+ rescue StandardError => e
119
119
  raise "Order import line items: #{e.message} #{line_item}"
120
120
  end
121
121
  end
@@ -132,7 +132,7 @@ module Spree
132
132
  )
133
133
  adjustment.save!
134
134
  adjustment.close!
135
- rescue Exception => e
135
+ rescue StandardError => e
136
136
  raise "Order import adjustments: #{e.message} #{a}"
137
137
  end
138
138
  end
@@ -150,7 +150,7 @@ module Spree
150
150
  payment.payment_method = Spree::PaymentMethod.find_by!(name: p[:payment_method])
151
151
  payment.source = create_source_payment_from_params(p[:source], payment) if p[:source]
152
152
  payment.save!
153
- rescue Exception => e
153
+ rescue StandardError => e
154
154
  raise "Order import payments: #{e.message} #{p}"
155
155
  end
156
156
  end
@@ -167,7 +167,7 @@ module Spree
167
167
  gateway_payment_profile_id: source_hash[:gateway_payment_profile_id],
168
168
  imported: true
169
169
  )
170
- rescue Exception => e
170
+ rescue StandardError => e
171
171
  raise "Order import source payments: #{e.message} #{source_hash}"
172
172
  end
173
173
 
@@ -179,7 +179,7 @@ module Spree
179
179
  hash
180
180
  rescue ActiveRecord::RecordNotFound => e
181
181
  raise "Ensure order import variant: Variant w/SKU #{sku} not found."
182
- rescue Exception => e
182
+ rescue StandardError => e
183
183
  raise "Ensure order import variant: #{e.message} #{hash}"
184
184
  end
185
185
 
@@ -200,7 +200,7 @@ module Spree
200
200
 
201
201
  address.delete(:country)
202
202
  address[:country_id] = Spree::Country.where(search).first!.id
203
- rescue Exception => e
203
+ rescue StandardError => e
204
204
  raise "Ensure order import address country: #{e.message} #{search}"
205
205
  end
206
206
  end
@@ -224,7 +224,7 @@ module Spree
224
224
  else
225
225
  address[:state_name] = search[:name] || search[:abbr]
226
226
  end
227
- rescue Exception => e
227
+ rescue StandardError => e
228
228
  raise "Ensure order import address state: #{e.message} #{search}"
229
229
  end
230
230
  end
@@ -68,9 +68,9 @@ module Spree
68
68
  def self.price_filter
69
69
  v = Spree::Price.arel_table
70
70
  conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
71
- ["#{format_price(10)} - #{format_price(15)}", v[:amount].in(10..15)],
72
- ["#{format_price(15)} - #{format_price(18)}", v[:amount].in(15..18)],
73
- ["#{format_price(18)} - #{format_price(20)}", v[:amount].in(18..20)],
71
+ ["#{format_price(10)} - #{format_price(15)}", v[:amount].between(10..15)],
72
+ ["#{format_price(15)} - #{format_price(18)}", v[:amount].between(15..18)],
73
+ ["#{format_price(18)} - #{format_price(20)}", v[:amount].between(18..20)],
74
74
  [Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
75
75
  {
76
76
  name: Spree.t(:price_range),
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- '4.2.0.beta'
3
+ '4.2.0.rc5'
4
4
  end
5
5
  end
data/lib/spree/i18n.rb CHANGED
@@ -1,35 +1,21 @@
1
1
  require 'i18n'
2
2
  require 'active_support/core_ext/array/extract_options'
3
- require 'spree/i18n/base'
3
+ require 'action_view'
4
4
 
5
5
  module Spree
6
- extend ActionView::Helpers::TranslationHelper
7
- extend ActionView::Helpers::TagHelper
6
+ class TranslationHelperWrapper
7
+ include ActionView::Helpers::TranslationHelper
8
+ end
8
9
 
9
10
  class << self
10
11
  # Add spree namespace and delegate to Rails TranslationHelper for some nice
11
12
  # extra functionality. e.g return reasonable strings for missing translations
12
- def translate(*args)
13
- @virtual_path = virtual_path
13
+ def translate(key, options = {})
14
+ options[:scope] = [*options[:scope]].unshift(:spree).uniq
14
15
 
15
- options = args.extract_options!
16
- options[:scope] = [*options[:scope]].unshift(:spree)
17
- args << options
18
- super(*args)
16
+ TranslationHelperWrapper.new.translate(key, **options)
19
17
  end
20
18
 
21
19
  alias t translate
22
-
23
- def context
24
- Spree::ViewContext.context
25
- end
26
-
27
- def virtual_path
28
- if context
29
- path = context.instance_variable_get('@virtual_path')
30
-
31
- path&.gsub(/spree/, '')
32
- end
33
- end
34
20
  end
35
21
  end
@@ -33,7 +33,7 @@ module Spree
33
33
  :id, :firstname, :lastname, :first_name, :last_name,
34
34
  :address1, :address2, :city, :country_iso, :country_id, :state_id,
35
35
  :zipcode, :phone, :state_name, :alternative_phone, :company,
36
- :user_id, :deleted_at,
36
+ :user_id, :deleted_at, :label,
37
37
  country: [:iso, :name, :iso3, :iso_name],
38
38
  state: [:name, :abbr]
39
39
  ]
@@ -99,9 +99,9 @@ module Spree
99
99
  @@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords, :logo,
100
100
  :meta_description, :default_currency, :mail_from_address,
101
101
  :customer_support_email, :facebook, :twitter, :instagram,
102
- :description, :address, :contact_email, :contact_phone,
102
+ :description, :address, :contact_phone,
103
103
  :default_locale, :default_country_id, :supported_currencies,
104
- :new_order_notifications_email]
104
+ :new_order_notifications_email, :mailer_logo, :checkout_zone_id, :seo_robots]
105
105
 
106
106
  @@store_credit_attributes = %i[amount currency category_id memo]
107
107
 
@@ -47,7 +47,11 @@ module Spree
47
47
  def call(input = nil)
48
48
  input ||= {}
49
49
  @_passed_input = Result.new(true, input)
50
- result = super
50
+ result = if input.is_a?(Hash)
51
+ super(**input)
52
+ else
53
+ super(input)
54
+ end
51
55
  @_passed_input = result if result.is_a? Result
52
56
  enforce_data_format
53
57
  @_passed_input
@@ -71,7 +75,7 @@ module Spree
71
75
  end
72
76
 
73
77
  begin
74
- @_passed_input = callable.call(@_passed_input.value)
78
+ @_passed_input = callable.call(**@_passed_input.value)
75
79
  rescue ArgumentError => e
76
80
  if e.message.include? 'missing'
77
81
  raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
@@ -23,4 +23,4 @@ else
23
23
  end
24
24
  end
25
25
  Capybara.default_max_wait_time = 45
26
- Capybara.server = :webrick
26
+ Capybara.server = :puma
@@ -1,4 +1,21 @@
1
1
  FactoryBot.define do
2
+ trait :with_item_total_rule do
3
+ transient do
4
+ item_total_threshold_amount { 10 }
5
+ end
6
+
7
+ after(:create) do |promotion, evaluator|
8
+ rule = Spree::Promotion::Rules::ItemTotal.create!(
9
+ preferred_operator_min: 'gte',
10
+ preferred_operator_max: 'lte',
11
+ preferred_amount_min: evaluator.item_total_threshold_amount,
12
+ preferred_amount_max: evaluator.item_total_threshold_amount + 100
13
+ )
14
+ promotion.rules << rule
15
+ promotion.save!
16
+ end
17
+ end
18
+
2
19
  factory :promotion, class: Spree::Promotion do
3
20
  name { 'Promo' }
4
21
 
@@ -13,7 +30,16 @@ FactoryBot.define do
13
30
  Spree::Promotion::Actions::CreateItemAdjustments.create!(calculator: calculator, promotion: promotion)
14
31
  end
15
32
  end
33
+
34
+ trait :with_one_use_per_user_rule do
35
+ after(:create) do |promotion|
36
+ rule = Spree::Promotion::Rules::OneUsePerUser.create!
37
+ promotion.rules << rule
38
+ end
39
+ end
40
+
16
41
  factory :promotion_with_item_adjustment, traits: [:with_line_item_adjustment]
42
+ factory :promotion_with_one_use_per_user_rule, traits: [:with_line_item_adjustment, :with_one_use_per_user_rule]
17
43
 
18
44
  trait :with_order_adjustment do
19
45
  transient do
@@ -28,24 +54,8 @@ FactoryBot.define do
28
54
  promotion.save!
29
55
  end
30
56
  end
31
- factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
32
57
 
33
- trait :with_item_total_rule do
34
- transient do
35
- item_total_threshold_amount { 10 }
36
- end
37
-
38
- after(:create) do |promotion, evaluator|
39
- rule = Spree::Promotion::Rules::ItemTotal.create!(
40
- preferred_operator_min: 'gte',
41
- preferred_operator_max: 'lte',
42
- preferred_amount_min: evaluator.item_total_threshold_amount,
43
- preferred_amount_max: evaluator.item_total_threshold_amount + 100
44
- )
45
- promotion.rules << rule
46
- promotion.save!
47
- end
48
- end
58
+ factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
49
59
  factory :promotion_with_item_total_rule, traits: [:with_item_total_rule]
50
60
  end
51
61
 
@@ -57,5 +67,7 @@ FactoryBot.define do
57
67
  action.promotion = promotion
58
68
  action.save
59
69
  end
70
+
71
+ factory :free_shipping_promotion_with_item_total_rule, traits: [:with_item_total_rule]
60
72
  end
61
73
  end
@@ -8,15 +8,13 @@ FactoryBot.define do
8
8
 
9
9
  after(:create) do |shipment, _evalulator|
10
10
  shipment.add_shipping_method(create(:shipping_method), true)
11
-
12
- shipment.order.line_items.each do |line_item|
13
- line_item.quantity.times do
14
- shipment.inventory_units.create(
15
- order_id: shipment.order_id,
16
- variant_id: line_item.variant_id,
17
- line_item_id: line_item.id
18
- )
19
- end
11
+ shipment.order.line_items.map do |line_item|
12
+ shipment.inventory_units.create(
13
+ order_id: shipment.order_id,
14
+ variant_id: line_item.variant_id,
15
+ line_item_id: line_item.id,
16
+ quantity: line_item.quantity
17
+ )
20
18
  end
21
19
  end
22
20
  end
@@ -20,8 +20,8 @@ FactoryBot.define do
20
20
  product_1 = create(:product)
21
21
  product_2 = create(:product)
22
22
 
23
- stock_location.stock_items.where(variant_id: product_1.master.id).first.adjust_count_on_hand(10)
24
- stock_location.stock_items.where(variant_id: product_2.master.id).first.adjust_count_on_hand(20)
23
+ stock_location.stock_items.where(variant_id: product_1.master_id).first.adjust_count_on_hand(10)
24
+ stock_location.stock_items.where(variant_id: product_2.master_id).first.adjust_count_on_hand(20)
25
25
  end
26
26
  end
27
27
  end
@@ -1,24 +1,27 @@
1
1
  FactoryBot.define do
2
- factory :global_zone, class: Spree::Zone do
3
- name { 'GlobalZone' }
4
- description { generate(:random_string) }
5
- zone_members do |proxy|
6
- zone = proxy.instance_eval { @instance }
7
- Spree::Country.all.map do |c|
8
- Spree::ZoneMember.create(zoneable: c, zone: zone)
9
- end
10
- end
11
- end
12
-
13
2
  factory :zone, class: Spree::Zone do
14
3
  name { generate(:random_string) }
15
4
  description { generate(:random_string) }
16
5
 
17
6
  factory :zone_with_country do
7
+ kind { :country }
8
+
18
9
  zone_members do |proxy|
19
10
  zone = proxy.instance_eval { @instance }
20
- country = create(:country)
21
- [Spree::ZoneMember.create(zoneable: country, zone: zone)]
11
+
12
+ [Spree::ZoneMember.create(zoneable: create(:country), zone: zone)]
13
+ end
14
+
15
+ factory :global_zone, class: Spree::Zone do
16
+ sequence(:name) { |n| "GlobalZone_#{n}" }
17
+
18
+ zone_members do |proxy|
19
+ zone = proxy.instance_eval { @instance }
20
+
21
+ Spree::Country.all.map do |country|
22
+ Spree::ZoneMember.where(zoneable: country, zone: zone).first_or_create
23
+ end
24
+ end
22
25
  end
23
26
  end
24
27
  end
@@ -84,7 +84,7 @@ RSpec.configure do |config|
84
84
  end
85
85
 
86
86
  Spree.check_unused_translations
87
- if false && Spree.unused_translation_messages.any?
87
+ if Spree.unused_translation_messages.any?
88
88
  puts "\nThere are unused translations within Spree:"
89
89
  puts Spree.unused_translation_messages.sort
90
90
  exit(1)
@@ -1,11 +1,16 @@
1
1
  class OrderWalkthrough
2
2
  def self.up_to(state)
3
- # A default store must exist to provide store settings
4
- store = Spree::Store.default || FactoryBot.create(:store, default: true)
3
+ store = if Spree::Store.exists?
4
+ # Ensure the default store is used
5
+ Spree::Store.default || FactoryBot.create(:store, default: true)
6
+ else
7
+ # Create a default store
8
+ FactoryBot.create(:store, default: true)
9
+ end
5
10
 
6
11
  # A payment method must exist for an order to proceed through the Address state
7
12
  unless Spree::PaymentMethod.exists?
8
- FactoryBot.create(:check_payment_method)
13
+ FactoryBot.create(:check_payment_method, stores: [store])
9
14
  end
10
15
 
11
16
  # Need to create a valid zone too...
@@ -0,0 +1,10 @@
1
+ require 'rspec/retry'
2
+
3
+ RSpec.configure do |config|
4
+ config.verbose_retry = true
5
+ config.display_try_failure_messages = true
6
+
7
+ config.around :each, type: :feature do |ex|
8
+ ex.run_with_retry retry: ENV.fetch('RSPEC_RETRY_RETRY_COUNT', 3).to_i
9
+ end
10
+ end
data/spree_core.gemspec CHANGED
@@ -28,9 +28,9 @@ Gem::Specification.new do |s|
28
28
 
29
29
  s.add_dependency 'activemerchant', '~> 1.67'
30
30
  s.add_dependency 'acts_as_list', '~> 0.8'
31
- s.add_dependency 'awesome_nested_set', '>= 3.1.4', '< 3.3.0'
31
+ s.add_dependency 'awesome_nested_set', '>= 3.3.1', '< 4.0'
32
32
  s.add_dependency 'carmen', '>= 1.0', '< 1.2'
33
- s.add_dependency 'cancancan', '~> 3.0'
33
+ s.add_dependency 'cancancan', '~> 3.2'
34
34
  s.add_dependency 'ffaker', '~> 2.9'
35
35
  s.add_dependency 'friendly_id', '>= 5.2.1', '< 5.5.0'
36
36
  s.add_dependency 'highline', '~> 2.0.0' # Necessary for the install generator
@@ -39,17 +39,19 @@ Gem::Specification.new do |s|
39
39
  s.add_dependency 'monetize', '~> 1.9'
40
40
  s.add_dependency 'paranoia', '~> 2.4.2'
41
41
  s.add_dependency 'premailer-rails'
42
- s.add_dependency 'rails', '~> 6.0.0'
43
- s.add_dependency 'ransack', '~> 2.3.0'
42
+ s.add_dependency 'rails', '>= 6.0', '< 6.2'
43
+ s.add_dependency 'ransack', '>= 2.3', '< 2.5'
44
44
  s.add_dependency 'responders'
45
+ s.add_dependency 'rexml'
45
46
  s.add_dependency 'state_machines-activerecord', '~> 0.6'
46
47
  s.add_dependency 'state_machines-activemodel', '~> 0.7'
47
48
  s.add_dependency 'stringex'
48
49
  s.add_dependency 'twitter_cldr', '>= 4.3', '< 7.0'
49
50
  s.add_dependency 'sprockets', '~> 3.7'
50
51
  s.add_dependency 'sprockets-rails'
51
- s.add_dependency 'mini_magick', '>= 4.9.4', '< 4.11.0'
52
+ s.add_dependency 'mini_magick', '>= 4.9.4', '< 4.12.0'
52
53
  s.add_dependency 'image_processing', '~> 1.2'
54
+ s.add_dependency 'active_storage_validations', '~> 0.9'
53
55
 
54
56
  s.add_development_dependency 'email_spec', '~> 2.2'
55
57
  end