spree_core 4.2.0.rc2 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js +20 -0
  3. data/app/controllers/spree/base_controller.rb +2 -3
  4. data/app/controllers/spree/errors_controller.rb +11 -0
  5. data/app/finders/spree/addresses/find.rb +1 -12
  6. data/app/finders/spree/base_finder.rb +14 -0
  7. data/app/finders/spree/countries/find.rb +11 -3
  8. data/app/finders/spree/credit_cards/find.rb +2 -2
  9. data/app/finders/spree/orders/find_current.rb +2 -2
  10. data/app/finders/spree/products/find.rb +14 -3
  11. data/app/helpers/spree/base_helper.rb +3 -8
  12. data/app/helpers/spree/currency_helper.rb +34 -0
  13. data/app/helpers/spree/locale_helper.rb +31 -0
  14. data/app/helpers/spree/products_helper.rb +37 -12
  15. data/app/mailers/spree/base_mailer.rb +4 -4
  16. data/app/mailers/spree/order_mailer.rb +3 -3
  17. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  18. data/app/mailers/spree/shipment_mailer.rb +1 -1
  19. data/app/models/concerns/spree/default_price.rb +1 -5
  20. data/app/models/concerns/spree/product_scopes.rb +1 -1
  21. data/app/models/concerns/spree/user_methods.rb +2 -2
  22. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  23. data/app/models/spree/ability.rb +45 -34
  24. data/app/models/spree/address.rb +4 -0
  25. data/app/models/spree/app_configuration.rb +2 -2
  26. data/app/models/spree/app_dependencies.rb +6 -2
  27. data/app/models/spree/base.rb +5 -0
  28. data/app/models/spree/credit_card.rb +4 -0
  29. data/app/models/spree/fulfilment_changer.rb +58 -16
  30. data/app/models/spree/image.rb +14 -14
  31. data/app/models/spree/inventory_unit.rb +2 -7
  32. data/app/models/spree/line_item.rb +7 -15
  33. data/app/models/spree/order.rb +1 -0
  34. data/app/models/spree/payment.rb +18 -4
  35. data/app/models/spree/payment/processing.rb +2 -2
  36. data/app/models/spree/payment_method.rb +3 -3
  37. data/app/models/spree/price.rb +2 -7
  38. data/app/models/spree/product.rb +41 -17
  39. data/app/models/spree/promotion/rules/option_value.rb +1 -1
  40. data/app/models/spree/promotion/rules/product.rb +2 -1
  41. data/app/models/spree/promotion/rules/user.rb +2 -1
  42. data/app/models/spree/refund.rb +2 -2
  43. data/app/models/spree/return_item/eligibility_validator/default.rb +0 -2
  44. data/app/models/spree/return_item/eligibility_validator/{r_m_a_required.rb → rma_required.rb} +0 -0
  45. data/app/models/spree/shipment.rb +1 -1
  46. data/app/models/spree/shipping_method.rb +1 -5
  47. data/app/models/spree/shipping_rate.rb +2 -11
  48. data/app/models/spree/stock/availability_validator.rb +3 -4
  49. data/app/models/spree/stock_item.rb +1 -5
  50. data/app/models/spree/store.rb +55 -2
  51. data/app/models/spree/store_credit.rb +1 -1
  52. data/app/models/spree/variant.rb +9 -16
  53. data/app/models/spree/zone.rb +13 -4
  54. data/app/paginators/spree/shared/paginate.rb +8 -1
  55. data/app/presenters/spree/variant_presenter.rb +2 -5
  56. data/app/services/spree/account/addresses/create.rb +6 -1
  57. data/app/services/spree/account/addresses/{base.rb → helper.rb} +1 -3
  58. data/app/services/spree/account/addresses/update.rb +6 -1
  59. data/app/services/spree/build_localized_redirect_url.rb +101 -0
  60. data/app/services/spree/cart/estimate_shipping_rates.rb +1 -1
  61. data/app/services/spree/compare_line_items.rb +4 -2
  62. data/app/sorters/spree/base_sorter.rb +35 -0
  63. data/app/sorters/spree/orders/sort.rb +1 -37
  64. data/app/sorters/spree/products/sort.rb +9 -32
  65. data/app/validators/email_validator.rb +1 -1
  66. data/app/views/spree/errors/forbidden.html.erb +0 -0
  67. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  68. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +13 -2
  69. data/app/views/spree/shared/_purchased_items_table.html.erb +15 -6
  70. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +2 -2
  71. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +2 -2
  72. data/config/initializers/inflections.rb +3 -0
  73. data/config/initializers/rails61_fixes.rb +3 -0
  74. data/config/locales/en.yml +31 -60
  75. data/config/routes.rb +2 -1
  76. data/db/default/spree/stores.rb +1 -0
  77. data/db/default/spree/zones.rb +4 -1
  78. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  79. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +1 -0
  80. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -2
  81. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +5 -0
  82. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +5 -0
  83. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +10 -0
  84. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +15 -0
  85. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +5 -0
  86. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +5 -0
  87. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +11 -0
  88. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +22 -0
  89. data/lib/generators/spree/install/install_generator.rb +9 -6
  90. data/lib/spree/core.rb +2 -1
  91. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  92. data/lib/spree/core/controller_helpers/common.rb +6 -8
  93. data/lib/spree/core/controller_helpers/currency.rb +54 -0
  94. data/lib/spree/core/controller_helpers/locale.rb +58 -0
  95. data/lib/spree/core/controller_helpers/search.rb +1 -1
  96. data/lib/spree/core/controller_helpers/store.rb +4 -16
  97. data/lib/spree/core/product_filters.rb +3 -3
  98. data/lib/spree/core/version.rb +3 -1
  99. data/lib/spree/i18n.rb +17 -19
  100. data/lib/spree/permitted_attributes.rb +2 -2
  101. data/lib/spree/service_module.rb +8 -4
  102. data/lib/spree/testing_support/capybara_config.rb +1 -1
  103. data/lib/spree/testing_support/common_rake.rb +1 -1
  104. data/lib/spree/testing_support/controller_requests.rb +10 -10
  105. data/lib/spree/testing_support/factories/shipment_factory.rb +7 -9
  106. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  107. data/lib/spree/testing_support/factories/store_factory.rb +1 -0
  108. data/lib/spree/testing_support/factories/zone_factory.rb +16 -13
  109. data/lib/spree/testing_support/flatpickr_capybara.rb +101 -0
  110. data/lib/spree/testing_support/locale_helpers.rb +78 -0
  111. data/lib/spree/testing_support/next_instance_of.rb +38 -0
  112. data/lib/spree/testing_support/order_walkthrough.rb +8 -3
  113. data/lib/spree/testing_support/rspec_retry_config.rb +10 -0
  114. data/spree_core.gemspec +5 -4
  115. metadata +71 -26
  116. data/lib/generators/spree/install/templates/config/initializers/spree_storefront.rb +0 -1
  117. data/lib/generators/spree/install/templates/config/spree_storefront.yml +0 -67
  118. data/lib/spree/core/controller_helpers/currency_helpers.rb +0 -15
  119. data/lib/spree/i18n/base.rb +0 -17
  120. data/lib/spree/i18n/initializer.rb +0 -1
@@ -15,7 +15,7 @@ namespace :common do
15
15
  Rails.env = 'test'
16
16
 
17
17
  Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--quiet']
18
- Spree::InstallGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--auto-accept', '--migrate=false', '--seed=false', '--sample=false', '--quiet', '--copy_storefront=false', "--user_class=#{args[:user_class]}"]
18
+ Spree::InstallGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--auto-accept', '--migrate=false', '--seed=false', '--sample=false', '--quiet', '--copy_storefront=false', '--install_storefront=false', "--user_class=#{args[:user_class]}"]
19
19
 
20
20
  puts 'Setting up dummy database...'
21
21
  system("bundle exec rake db:drop db:create > #{File::NULL}")
@@ -9,7 +9,7 @@ module Spree
9
9
 
10
10
  def spree_get(action, parameters = nil, session = nil, flash = nil)
11
11
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
12
- ControllerRequests#spree_get is deprecated and will be removed in Spree 4.1.
12
+ ControllerRequests#spree_get is deprecated and will be removed in Spree 5.0.
13
13
  Please use get, params: {}
14
14
  DEPRECATION
15
15
  process_spree_action(action, parameters, session, flash, 'GET')
@@ -18,7 +18,7 @@ module Spree
18
18
  # Executes a request simulating POST HTTP method and set/volley the response
19
19
  def spree_post(action, parameters = nil, session = nil, flash = nil)
20
20
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
21
- ControllerRequests#spree_post is deprecated and will be removed in Spree 4.1.
21
+ ControllerRequests#spree_post is deprecated and will be removed in Spree 5.0.
22
22
  Please use post, params: {}
23
23
  DEPRECATION
24
24
  process_spree_action(action, parameters, session, flash, 'POST')
@@ -27,7 +27,7 @@ module Spree
27
27
  # Executes a request simulating PUT HTTP method and set/volley the response
28
28
  def spree_put(action, parameters = nil, session = nil, flash = nil)
29
29
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
30
- ControllerRequests#spree_put is deprecated and will be removed in Spree 4.1.
30
+ ControllerRequests#spree_put is deprecated and will be removed in Spree 5.0.
31
31
  Please use put, params: {}
32
32
  DEPRECATION
33
33
  process_spree_action(action, parameters, session, flash, 'PUT')
@@ -36,7 +36,7 @@ module Spree
36
36
  # # Executes a request simulating PATCH HTTP method and set/volley the response
37
37
  def spree_patch(action, parameters = nil, session = nil, flash = nil)
38
38
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
39
- ControllerRequests#spree_patch is deprecated and will be removed in Spree 4.1.
39
+ ControllerRequests#spree_patch is deprecated and will be removed in Spree 5.0.
40
40
  Please use patch, params: {}
41
41
  DEPRECATION
42
42
  process_spree_action(action, parameters, session, flash, 'PATCH')
@@ -45,7 +45,7 @@ module Spree
45
45
  # Executes a request simulating DELETE HTTP method and set/volley the response
46
46
  def spree_delete(action, parameters = nil, session = nil, flash = nil)
47
47
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
48
- ControllerRequests#spree_delete is deprecated and will be removed in Spree 4.1.
48
+ ControllerRequests#spree_delete is deprecated and will be removed in Spree 5.0.
49
49
  Please use delete, params: {}
50
50
  DEPRECATION
51
51
  process_spree_action(action, parameters, session, flash, 'DELETE')
@@ -53,35 +53,35 @@ module Spree
53
53
 
54
54
  def spree_xhr_get(action, parameters = nil, session = nil, flash = nil)
55
55
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
56
- ControllerRequests#spree_xhr_get is deprecated and will be removed in Spree 4.1.
56
+ ControllerRequests#spree_xhr_get is deprecated and will be removed in Spree 5.0.
57
57
  DEPRECATION
58
58
  process_spree_xhr_action(action, parameters, session, flash, :get)
59
59
  end
60
60
 
61
61
  def spree_xhr_post(action, parameters = nil, session = nil, flash = nil)
62
62
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
63
- ControllerRequests#spree_xhr_post is deprecated and will be removed in Spree 4.1.
63
+ ControllerRequests#spree_xhr_post is deprecated and will be removed in Spree 5.0.
64
64
  DEPRECATION
65
65
  process_spree_xhr_action(action, parameters, session, flash, :post)
66
66
  end
67
67
 
68
68
  def spree_xhr_put(action, parameters = nil, session = nil, flash = nil)
69
69
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
70
- ControllerRequests#spree_xhr_put is deprecated and will be removed in Spree 4.1.
70
+ ControllerRequests#spree_xhr_put is deprecated and will be removed in Spree 5.0.
71
71
  DEPRECATION
72
72
  process_spree_xhr_action(action, parameters, session, flash, :put)
73
73
  end
74
74
 
75
75
  def spree_xhr_patch(action, parameters = nil, session = nil, flash = nil)
76
76
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
77
- ControllerRequests#spree_xhr_patch is deprecated and will be removed in Spree 4.1.
77
+ ControllerRequests#spree_xhr_patch is deprecated and will be removed in Spree 5.0.
78
78
  DEPRECATION
79
79
  process_spree_xhr_action(action, parameters, session, flash, :patch)
80
80
  end
81
81
 
82
82
  def spree_xhr_delete(action, parameters = nil, session = nil, flash = nil)
83
83
  ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
84
- ControllerRequests#spree_xhr_delete is deprecated and will be removed in Spree 4.1.
84
+ ControllerRequests#spree_xhr_delete is deprecated and will be removed in Spree 5.0.
85
85
  DEPRECATION
86
86
  process_spree_xhr_action(action, parameters, session, flash, :delete)
87
87
  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
@@ -8,6 +8,7 @@ FactoryBot.define do
8
8
  new_order_notifications_email { 'store-owner@example.com' }
9
9
  default_currency { 'USD' }
10
10
  supported_currencies { 'USD,EUR,GBP' }
11
+ default_locale { 'en' }
11
12
  facebook { 'spreecommerce' }
12
13
  twitter { 'spreecommerce' }
13
14
  instagram { 'spreecommerce' }
@@ -1,24 +1,27 @@
1
1
  FactoryBot.define do
2
- factory :global_zone, class: Spree::Zone do
3
- sequence(:name) { |n| "GlobalZone_#{n}" }
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
@@ -0,0 +1,101 @@
1
+ module Spree
2
+ module TestingSupport
3
+ module FlatpickrCapybara
4
+ def fill_in_date_manually(label_text, with:)
5
+ with_open_flatpickr(label_text) do |field|
6
+ fill_in field[:id], with: with
7
+ end
8
+ end
9
+
10
+ def fill_in_date_picker(label_text, with:)
11
+ within_open_flatpickr(label_text) do
12
+ within_flatpickr_months do
13
+ fill_in_flatpickr_year(with.split('-')[0])
14
+
15
+ select_flatpickr_month(with.split('-')[1])
16
+
17
+ click_on_flatpickr_day(with.split('-')[2])
18
+ end
19
+ end
20
+ end
21
+
22
+ def fill_in_date_time_picker(label_text, with:)
23
+ within_open_flatpickr(label_text) do
24
+ within_flatpickr_months do
25
+ fill_in_flatpickr_year(with.split('-')[0])
26
+
27
+ select_flatpickr_month(with.split('-')[1])
28
+
29
+ click_on_flatpickr_day(with.split('-')[2])
30
+ end
31
+
32
+ within_flatpickr_time do
33
+ select_flatpickr_hour(with.split('-')[3])
34
+
35
+ select_flatpickr_min(with.split('-')[4])
36
+ end
37
+ end
38
+ end
39
+
40
+ def fill_in_date_with_js(label_text, with:)
41
+ date_field = find("input[id='#{label_text}']")
42
+ script = "document.querySelector('#{date_field}').flatpickr().setDate('#{with}');"
43
+
44
+ page.execute_script(script)
45
+ end
46
+
47
+ private
48
+
49
+ def with_open_flatpickr(label_text)
50
+ field_label = find_field(id: label_text, type: :hidden)
51
+
52
+ date_field = field_label.sibling('.flatpickr-alt-input')
53
+ date_field.click # Open the widget
54
+
55
+ yield(date_field)
56
+
57
+ date_field.send_keys :tab # Close the date picker widget
58
+ end
59
+
60
+ def within_open_flatpickr(label_text)
61
+ with_open_flatpickr(label_text) do
62
+ within find(:xpath, "/html/body/div[contains(@class, 'flatpickr-calendar')]") { yield }
63
+ end
64
+ end
65
+
66
+ def within_flatpickr_months
67
+ within find('.flatpickr-months .flatpickr-month .flatpickr-current-month') { yield }
68
+ end
69
+
70
+ def within_flatpickr_time
71
+ within find('.flatpickr-time') { yield }
72
+ end
73
+
74
+ def select_flatpickr_month(month)
75
+ find("select.flatpickr-monthDropdown-months > option:nth-child(#{month.to_i})").select_option
76
+ end
77
+
78
+ def fill_in_flatpickr_year(year)
79
+ find('input.cur-year').set(year)
80
+ end
81
+
82
+ def click_on_flatpickr_day(day)
83
+ within_flatpickr_days do
84
+ find('span', text: day).click
85
+ end
86
+ end
87
+
88
+ def within_flatpickr_days
89
+ within find('.flatpickr-innerContainer > .flatpickr-rContainer > .flatpickr-days') { yield }
90
+ end
91
+
92
+ def select_flatpickr_hour(hour)
93
+ find('input.flatpickr-hour').set(hour)
94
+ end
95
+
96
+ def select_flatpickr_min(min)
97
+ find('input.flatpickr-minute').set(min)
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,78 @@
1
+ module Spree
2
+ module TestingSupport
3
+ module LocaleHelpers
4
+ # rubocop:disable Layout/ArgumentAlignment
5
+ def add_french_locales
6
+ I18n.backend.store_translations(:fr,
7
+ spree: {
8
+ added_to_cart: 'Ajouté au panier avec succès!',
9
+ continue_shopping: 'Continuer vos achats',
10
+ choose_currency: 'Choisir la devise',
11
+ internationalization: 'Internationalisation',
12
+ i18n: {
13
+ language: 'Langue',
14
+ this_file_language: 'Français (FR)'
15
+ },
16
+ cart_page: {
17
+ header: 'Votre panier',
18
+ empty_info: 'Votre panier est vide',
19
+ add_promo_code: 'AJOUTER UN CODE PROMOTIONNEL',
20
+ checkout: 'Passer la commande',
21
+ product: 'articles',
22
+ quantity: 'quantité',
23
+ title: 'Panier',
24
+ change_quantity: 'Changer la quantité',
25
+ remove_from_cart: 'Retirer du panier'
26
+ },
27
+ shopping_cart: 'Panier',
28
+ cart: 'Panier',
29
+ close: 'Fermer',
30
+ search: 'Rechercher',
31
+ home: 'Accueil',
32
+ nav_bar: {
33
+ admin_panel: "Panneau d'administration",
34
+ close_menu: 'Fermer le menu',
35
+ go_to_previous_menu: 'Vers le menu précédent',
36
+ show_menu: 'Afficher le menu',
37
+ show_search: 'Afficher la recherche',
38
+ show_user_menu: 'Afficher le menu utilisateur',
39
+ change_country: 'Changer de pays',
40
+ desktop: 'Navigation sur le bureau',
41
+ mobile: 'Navigation mobile'
42
+ },
43
+ login: 'Connexion',
44
+ logout: 'Se déconnecter',
45
+ sign_up: 'Enregistrer',
46
+ email: 'Courriel',
47
+ password: 'Mot de passe',
48
+ remember_me: 'Se souvenir de moi',
49
+ my_account: 'Mon compte',
50
+ my_orders: 'Mes commandes',
51
+ logged_in_succesfully: 'Connexion réussie'
52
+ })
53
+ end
54
+ # rubocop:enable Layout/ArgumentAlignment
55
+
56
+ def open_i18n_menu
57
+ find('#header #internationalization-button-desktop').click
58
+ expect(page).to have_selector('#internationalization-options-desktop')
59
+ end
60
+
61
+ def close_i18n_menu
62
+ find('#header #internationalization-button-desktop').click
63
+ expect(page).not_to have_selector('#internationalization-options-desktop')
64
+ end
65
+
66
+ def switch_to_currency(currency)
67
+ open_i18n_menu
68
+ select currency, from: 'switch_to_currency'
69
+ expect(page).to have_no_css '.turbolinks-progress-bar'
70
+ end
71
+
72
+ def switch_to_locale(locale)
73
+ open_i18n_menu
74
+ select locale, from: 'Language'
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,38 @@
1
+ # Helper services with prepended ServiceModule
2
+ # https://gitlab.com/gitlab-org/gitlab-foss/-/issues/33587
3
+ #
4
+ # ex:
5
+ # expect_next_instance_of(service_class) do |instance|
6
+ # expect(instance).to receive(:call)
7
+ # end
8
+
9
+ module NextInstanceOf
10
+ def expect_next_instance_of(klass, *new_args)
11
+ stub_new(expect(klass), *new_args) do |expectation|
12
+ yield(expectation)
13
+ end
14
+ end
15
+
16
+ def allow_next_instance_of(klass, *new_args)
17
+ stub_new(allow(klass), *new_args) do |allowance|
18
+ yield(allowance)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def stub_new(target, *new_args)
25
+ receive_new = receive(:new)
26
+ receive_new.with(*new_args) if new_args.any?
27
+
28
+ target.to receive_new.and_wrap_original do |method, *original_args|
29
+ method.call(*original_args).tap do |instance|
30
+ yield(instance)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ RSpec.configure do |config|
37
+ config.include NextInstanceOf
38
+ end
@@ -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,9 +39,10 @@ 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'