spree_auth_devise 4.3.3 → 4.4.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +165 -29
  3. data/.github/dependabot.yml +11 -0
  4. data/.travis.yml +1 -11
  5. data/Gemfile +6 -2
  6. data/README.md +1 -2
  7. data/app/mailers/spree/user_mailer.rb +3 -3
  8. data/app/models/spree/user.rb +3 -0
  9. data/config/routes.rb +33 -29
  10. data/db/migrate/20210728103922_change_type_of_ship_address_id_and_bill_address_id_for_spree_users.rb +8 -0
  11. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +5 -4
  12. data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +2 -3
  13. data/{app/controllers → lib/controllers/frontend}/spree/user_confirmations_controller.rb +9 -6
  14. data/{app/controllers → lib/controllers/frontend}/spree/user_passwords_controller.rb +8 -9
  15. data/{app/controllers → lib/controllers/frontend}/spree/user_registrations_controller.rb +8 -9
  16. data/{app/controllers → lib/controllers/frontend}/spree/user_sessions_controller.rb +11 -12
  17. data/lib/controllers/frontend/spree/users_controller.rb +8 -3
  18. data/lib/spree/auth/version.rb +1 -1
  19. data/lib/spree/testing_support/auth_helpers.rb +18 -10
  20. data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +12 -11
  21. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +9 -11
  22. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +4 -4
  23. data/{app/views → lib/views/frontend}/spree/user_passwords/edit.html.erb +0 -0
  24. data/{app/views → lib/views/frontend}/spree/user_passwords/new.html.erb +0 -0
  25. data/{app/views → lib/views/frontend}/spree/user_registrations/new.html.erb +0 -0
  26. data/{app/views → lib/views/frontend}/spree/user_sessions/new.html.erb +0 -0
  27. data/spec/controllers/spree/user_sessions_controller_spec.rb +13 -1
  28. data/spec/controllers/spree/users_controller_spec.rb +1 -1
  29. data/spec/features/account_spec.rb +2 -2
  30. data/spec/features/admin/orders_spec.rb +4 -2
  31. data/spec/features/admin/password_reset_spec.rb +1 -1
  32. data/spec/features/admin/sign_in_spec.rb +5 -5
  33. data/spec/features/admin/sign_out_spec.rb +5 -5
  34. data/spec/features/admin_permissions_spec.rb +1 -1
  35. data/spec/features/checkout_spec.rb +1 -1
  36. data/spec/features/order_spec.rb +2 -2
  37. data/spec/features/sign_in_spec.rb +29 -7
  38. data/spec/features/sign_out_spec.rb +2 -2
  39. data/spec/models/user_spec.rb +27 -0
  40. data/spec/requests/spree/api/v2/storefront/account_confirmation_spec.rb +0 -9
  41. data/spec/requests/spree/frontend/user_update_spec.rb +42 -0
  42. data/spec/spec_helper.rb +4 -0
  43. data/spec/support/confirm_helpers.rb +1 -0
  44. data/spree_auth_devise.gemspec +1 -1
  45. metadata +19 -27
  46. data/Appraisals +0 -9
  47. data/app/services/spree/account/create.rb +0 -19
  48. data/app/services/spree/account/update.rb +0 -17
  49. data/gemfiles/spree_4_1.gemfile +0 -8
  50. data/gemfiles/spree_master.gemfile +0 -8
  51. data/lib/controllers/api/spree/api/v2/storefront/account_controller_decorator.rb +0 -41
@@ -1,34 +1,42 @@
1
1
  module Spree
2
2
  module TestingSupport
3
3
  module AuthHelpers
4
- def log_in(email:, password:, remember_me: true)
5
- visit spree.login_path
4
+ def login_button
5
+ Spree.version.to_f == 4.1 ? Spree.t(:log_in) : Spree.t(:login)
6
+ end
7
+
8
+ def logout_button
9
+ Spree.version.to_f == 4.1 ? Spree.t('nav_bar.log_out') : Spree.t(:logout).upcase
10
+ end
11
+
12
+ def log_in(email:, password:, remember_me: true, locale: nil)
13
+ visit spree.login_path(locale: locale)
6
14
 
7
- fill_in 'Email', with: email
8
- fill_in 'Password', with: password
15
+ fill_in Spree.t(:email), with: email
16
+ fill_in Spree.t(:password), with: password
9
17
 
10
18
  # Regression test for #1257
11
- first('label', text: 'Remember me').click if remember_me
12
- click_button 'Log in'
19
+ first('label', text: Spree.t(:remember_me)).click if remember_me
20
+ click_button login_button
13
21
 
14
- expect(page).to have_content 'Logged in successfully'
22
+ expect(page).to have_content Spree.t(:logged_in_successfully)
15
23
  end
16
24
 
17
25
  def log_out
18
26
  show_user_menu
19
- click_link 'LOG OUT'
27
+ click_link logout_button
20
28
 
21
29
  expect(page).to have_content 'Signed out successfully'
22
30
  end
23
31
 
24
32
  def show_user_menu
25
- find("button[aria-label='Show user menu']").click
33
+ find("button[aria-label='#{Spree.t('nav_bar.show_user_menu')}']").click
26
34
  end
27
35
 
28
36
  def show_user_account
29
37
  within '#nav-bar' do
30
38
  show_user_menu
31
- click_link 'MY ACCOUNT'
39
+ click_link Spree.t(:my_account).upcase
32
40
  end
33
41
  end
34
42
  end
@@ -1,15 +1,16 @@
1
- <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @spree_user } %>
1
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
2
+
2
3
  <h2><%= Spree.t(:change_my_password) %></h2>
3
4
 
4
- <%= form_for @spree_user, :as => :spree_user, :url => spree.update_password_path, :method => :put do |f| %>
5
- <p>
6
- <%= f.label :password, Spree.t(:password) %><br />
7
- <%= f.password_field :password %><br />
8
- </p>
9
- <p>
10
- <%= f.label :password_confirmation, Spree.t(:confirm_password) %><br />
11
- <%= f.password_field :password_confirmation %><br />
12
- </p>
5
+ <%= form_for @spree_user, as: :spree_user, url: spree.admin_update_password_path, method: :put do |f| %>
6
+ <div class="form-group">
7
+ <%= f.label :password, Spree.t(:password) %>
8
+ <%= f.password_field :password, class: 'form-control', required: true %>
9
+ </div>
10
+ <div class="form-group">
11
+ <%= f.label :password_confirmation, Spree.t(:confirm_password) %>
12
+ <%= f.password_field :password_confirmation, class: 'form-control', required: true %>
13
+ </div>
13
14
  <%= f.hidden_field :reset_password_token %>
14
- <%= f.submit Spree.t(:update), :class => 'button primary' %>
15
+ <%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block' %>
15
16
  <% end %>
@@ -1,17 +1,15 @@
1
- <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @spree_user } %>
1
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
2
2
 
3
- <div id="forgot-password">
4
- <h6><%= Spree.t(:forgot_password) %></h6>
3
+ <div id="forgot-password" class="col-lg-6">
4
+ <h1><%= Spree.t(:forgot_password) %></h1>
5
5
 
6
6
  <p><%= Spree.t(:instructions_to_reset_password) %></p>
7
7
 
8
- <%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.reset_password_path do |f| %>
9
- <p>
10
- <%= f.label :email, Spree.t(:email) %><br />
11
- <%= f.email_field :email %>
12
- </p>
13
- <p>
14
- <%= f.submit Spree.t(:reset_password), :class => 'button primary' %>
15
- </p>
8
+ <%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.admin_reset_password_path, data: { turbo: false } do |f| %>
9
+ <div class="form-group">
10
+ <%= f.label :email, Spree.t(:email) %>
11
+ <%= f.email_field :email, class: 'form-control', required: true %>
12
+ </div>
13
+ <%= f.submit Spree.t(:reset_password), class: 'btn btn-primary' %>
16
14
  <% end %>
17
15
  </div>
@@ -8,7 +8,7 @@
8
8
  <div id="password-credentials">
9
9
  <div class="form-group text-center">
10
10
  <%= f.label :email, Spree.t(:email) %>
11
- <%= f.email_field :email, class: 'form-control', tabindex: 1, placeholder: Spree.t(:email) %>
11
+ <%= f.email_field :email, class: 'form-control', tabindex: 1, placeholder: Spree.t(:email) %>
12
12
  </div>
13
13
  <div class="form-group text-center">
14
14
  <%= f.label :password, Spree.t(:password) %>
@@ -21,12 +21,12 @@
21
21
  <%= f.label :remember_me do %>
22
22
  <%= f.check_box :remember_me, :tabindex => 3 %>
23
23
  <%= Spree.t(:remember_me) %>
24
- <% end %>
24
+ <% end %>
25
25
  </div>
26
26
  <div class="col-lg-6 text-right">
27
27
  <%= link_to Spree.t(:forgot_password), spree.admin_recover_password_path %>
28
- </div>
29
- </div>
28
+ </div>
29
+ </div>
30
30
  </div>
31
31
  <div class="form-group">
32
32
  <%= f.submit Spree.t(:login), :class => 'btn btn-primary btn-block', :tabindex => 4 %>
@@ -137,7 +137,7 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
137
137
  request.cookie_jar.signed[:guest_token] = 'ABC'
138
138
  request.cookie_jar.signed[:token] = 'DEF'
139
139
  end
140
-
140
+
141
141
  it 'assigns the correct token attribute for the order' do
142
142
  if Spree.version.to_f > 3.6
143
143
  order = create(:order, email: user.email, token: 'ABC', user_id: nil, created_by_id: nil)
@@ -157,6 +157,18 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
157
157
  post :create, params: { spree_user: { email: user.email, password: 'secret' }}
158
158
  expect(response).to redirect_to spree.account_path
159
159
  end
160
+
161
+ context 'different locale' do
162
+ before do
163
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr') if Spree.version.to_f >= 4.2
164
+ end
165
+
166
+ it 'redirects to localized account path after signing in' do
167
+ skip if Spree.version.to_f < 4.2
168
+ post :create, params: { spree_user: { email: user.email, password: 'secret' }, locale: 'fr' }
169
+ expect(response).to redirect_to spree.account_path(locale: 'fr')
170
+ end
171
+ end
160
172
  end
161
173
 
162
174
  context "and js format is used" do
@@ -25,7 +25,7 @@ RSpec.describe Spree::UsersController, type: :controller do
25
25
  it 'performs update' do
26
26
  put :update, params: { user: { email: 'mynew@email-address.com' } }
27
27
  expect(assigns[:user].email).to eq 'mynew@email-address.com'
28
- expect(response).to redirect_to spree.account_url(only_path: true)
28
+ expect(response).to redirect_to spree.account_path
29
29
  end
30
30
  end
31
31
 
@@ -10,7 +10,7 @@ RSpec.feature 'Accounts', type: :feature do
10
10
 
11
11
  fill_in 'Email', with: user.email
12
12
  fill_in 'Password', with: user.password
13
- click_button 'Log in'
13
+ click_button login_button
14
14
 
15
15
  show_user_account
16
16
  expect(page).to have_text 'admin@person.com'
@@ -43,7 +43,7 @@ RSpec.feature 'Accounts', type: :feature do
43
43
 
44
44
  fill_in 'Email', with: user.email
45
45
  fill_in 'Password', with: user.password
46
- click_button 'Log in'
46
+ click_button login_button
47
47
 
48
48
  show_user_account
49
49
  expect(page).to have_text 'email@person.com'
@@ -1,6 +1,7 @@
1
1
  RSpec.feature 'Admin orders', type: :feature do
2
2
  background do
3
- sign_in_as! create(:admin_user)
3
+ user = create(:admin_user)
4
+ log_in email: user.email, password: user.password
4
5
  end
5
6
 
6
7
  # Regression #203
@@ -15,7 +16,8 @@ RSpec.feature 'Admin orders', type: :feature do
15
16
 
16
17
  # Regression #203
17
18
  scenario 'can not edit orders' do
18
- expect { visit spree.edit_admin_order_path('nodata') }.to raise_error(ActiveRecord::RecordNotFound)
19
+ visit spree.edit_admin_order_path('nodata')
20
+ expect(page).to have_text('Order is not found')
19
21
  end
20
22
 
21
23
  # Regression #203
@@ -7,7 +7,7 @@ RSpec.feature 'Admin - Reset Password', type: :feature do
7
7
  user = create(:user, email: 'foobar@example.com', password: 'secret', password_confirmation: 'secret')
8
8
  visit spree.admin_login_path
9
9
  click_link 'Forgot password?'
10
- fill_in 'Email', with: 'foobar@example.com'
10
+ fill_in 'Email', with: user.email
11
11
  click_button 'Reset my password'
12
12
  expect(page).to have_text 'You will receive an email with instructions'
13
13
  end
@@ -13,8 +13,8 @@ RSpec.feature 'Admin - Sign In', type: :feature do
13
13
  log_in(email: @user.email, password: 'secret')
14
14
  show_user_menu
15
15
 
16
- expect(page).not_to have_text 'Login'
17
- expect(page).to have_text 'LOG OUT'
16
+ expect(page).not_to have_text login_button.upcase
17
+ expect(page).to have_text logout_button.upcase
18
18
  expect(current_path).to eq '/account'
19
19
  end
20
20
 
@@ -33,13 +33,13 @@ RSpec.feature 'Admin - Sign In', type: :feature do
33
33
 
34
34
  fill_in 'Email', with: user.email
35
35
  fill_in 'Password', with: 'secret'
36
+ click_button login_button
37
+
36
38
  if Spree.version.to_f > 4.1
37
- click_button 'Login'
38
- within '.navbar .dropdown-menu' do
39
+ within '.navbar .dropdown-menu-right' do
39
40
  expect(page).to have_text 'admin@person.com'
40
41
  end
41
42
  else
42
- click_button 'Log in'
43
43
  within '.user-menu' do
44
44
  expect(page).to have_text 'admin@person.com'
45
45
  end
@@ -1,4 +1,4 @@
1
- RSpec.feature 'Admin - Sign Out', type: :feature do
1
+ RSpec.feature 'Admin - Sign Out', type: :feature, js: true do
2
2
  given!(:user) do
3
3
  create :user, email: 'email@person.com'
4
4
  end
@@ -9,13 +9,13 @@ RSpec.feature 'Admin - Sign Out', type: :feature do
9
9
  fill_in 'Password', with: 'secret'
10
10
  # Regression test for #1257
11
11
  check 'Remember me'
12
- click_button 'Login'
12
+ click_button Spree.t(:login)
13
13
  end
14
14
 
15
- scenario 'allows a signed in user to logout', js: true do
15
+ scenario 'allows a signed in user to logout' do
16
16
  log_out
17
17
  visit spree.admin_login_path
18
- expect(page).to have_button 'Login'
19
- expect(page).not_to have_text 'Logout'
18
+ expect(page).to have_button Spree.t(:login)
19
+ expect(page).not_to have_text Spree.t(:logout)
20
20
  end
21
21
  end
@@ -7,7 +7,7 @@ RSpec.feature 'Admin Permissions', type: :feature do
7
7
 
8
8
  fill_in 'Email', with: user.email
9
9
  fill_in 'Password', with: user.password
10
- click_button 'Log in'
10
+ click_button login_button
11
11
  end
12
12
 
13
13
  context 'admin is restricted from accessing orders' do
@@ -55,7 +55,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
55
55
  visit spree.login_path
56
56
  fill_in 'Email', with: user.email
57
57
  fill_in 'Password', with: user.password
58
- click_button 'Log in'
58
+ click_button login_button
59
59
  expect(page).to have_text('Logged in successfully')
60
60
  find('a.cart-icon').click
61
61
 
@@ -17,7 +17,7 @@ RSpec.feature 'Orders', :js, type: :feature do
17
17
  visit spree.login_path
18
18
  fill_in 'Email', with: user.email
19
19
  fill_in 'Password', with: user.password
20
- click_button 'Log in'
20
+ click_button login_button
21
21
 
22
22
  visit spree.cart_path
23
23
  expect(page).to have_text 'RoR Mug'
@@ -29,7 +29,7 @@ RSpec.feature 'Orders', :js, type: :feature do
29
29
  visit spree.login_path
30
30
  fill_in 'Email', with: user.email
31
31
  fill_in 'Password', with: user.password
32
- click_button 'Log in'
32
+ click_button login_button
33
33
 
34
34
  # Order should have been merged with first session
35
35
  visit spree.cart_path
@@ -13,15 +13,15 @@ RSpec.feature 'Sign In', type: :feature do
13
13
  log_in(email: @user.email, password: @user.password)
14
14
  show_user_menu
15
15
 
16
- expect(page).not_to have_text 'Login'
17
- expect(page).to have_text 'LOG OUT'
16
+ expect(page).not_to have_text login_button.upcase
17
+ expect(page).to have_text logout_button.upcase
18
18
  expect(current_path).to eq '/account'
19
19
  end
20
20
 
21
21
  scenario 'show validation erros' do
22
22
  fill_in 'Email', with: @user.email
23
23
  fill_in 'Password', with: 'wrong_password'
24
- click_button 'Log in'
24
+ click_button login_button
25
25
 
26
26
  expect(page).to have_text 'Invalid email or password'
27
27
  expect(page).to have_text 'Log in'
@@ -35,12 +35,12 @@ RSpec.feature 'Sign In', type: :feature do
35
35
  fill_in 'Password', with: user.password
36
36
 
37
37
  if Spree.version.to_f > 4.1
38
- click_button 'Login'
39
- within '.navbar .dropdown-menu' do
38
+ click_button login_button
39
+ within '.navbar .dropdown-menu-right' do
40
40
  expect(page).to have_text 'admin@person.com'
41
41
  end
42
42
  else
43
- click_button 'Log in'
43
+ click_button login_button
44
44
  within '.user-menu' do
45
45
  expect(page).to have_text 'admin@person.com'
46
46
  end
@@ -52,7 +52,29 @@ RSpec.feature 'Sign In', type: :feature do
52
52
  visit spree.account_path
53
53
  fill_in 'Email', with: @user.email
54
54
  fill_in 'Password', with: @user.password
55
- click_button 'Log in'
55
+ click_button login_button
56
56
  expect(current_path).to eq '/account'
57
57
  end
58
+
59
+ context 'localized' do
60
+ before do
61
+ if Spree.version.to_f >= 4.2
62
+ add_french_locales
63
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
64
+ I18n.locale = :fr
65
+ end
66
+ end
67
+
68
+ after { I18n.locale = :en }
69
+
70
+ scenario 'let a user sign in successfully', js: true do
71
+ skip if Spree.version.to_f < 4.2
72
+ log_in(email: @user.email, password: @user.password, locale: 'fr')
73
+ show_user_menu
74
+
75
+ expect(page).not_to have_text Spree.t(:login).upcase
76
+ expect(page).to have_text Spree.t(:logout).upcase
77
+ expect(current_url).to match(/\/account\?locale\=fr$/)
78
+ end
79
+ end
58
80
  end
@@ -16,8 +16,8 @@ RSpec.feature 'Sign Out', type: :feature, js: true do
16
16
  visit spree.root_path
17
17
  show_user_menu
18
18
 
19
- expect(page).to have_link 'LOG IN'
20
- expect(page).not_to have_link 'LOG OUT'
19
+ expect(page).to have_link login_button.upcase
20
+ expect(page).not_to have_link logout_button.upcase
21
21
  end
22
22
 
23
23
  describe 'before_logout' do
@@ -27,6 +27,33 @@ RSpec.describe Spree::User, type: :model do
27
27
  end
28
28
  end
29
29
 
30
+ describe 'validations' do
31
+ context 'email' do
32
+ let(:user) { build(:user, email: nil) }
33
+
34
+ it 'cannot be empty' do
35
+ expect(user.valid?).to be false
36
+ expect(user.errors.messages[:email].first).to eq "can't be blank"
37
+ end
38
+ end
39
+
40
+ context 'password' do
41
+ let(:user) { build(:user, password_confirmation: nil) }
42
+
43
+ it 'password confirmation cannot be empty' do
44
+ expect(user.valid?).to be false
45
+ expect(user.errors.messages[:password_confirmation].first).to eq "doesn't match Password"
46
+ end
47
+
48
+ let(:user) { build(:user, password: 'pass1234', password_confirmation: 'pass') }
49
+
50
+ it 'passwords has to be equal to password confirmation' do
51
+ expect(user.valid?).to be false
52
+ expect(user.errors.messages[:password_confirmation].first).to eq "doesn't match Password"
53
+ end
54
+ end
55
+ end
56
+
30
57
  context '#destroy' do
31
58
  it 'will soft delete with uncompleted orders' do
32
59
  order = build(:order)
@@ -35,14 +35,5 @@ describe 'Storefront API v2 Account Confirmation spec', type: :request do
35
35
  expect(JSON.parse(response.body)['error']).to eq("Confirmation token is invalid")
36
36
  end
37
37
  end
38
-
39
- context 'blank confirmation_token param' do
40
- let(:user) { build(:user) }
41
- let(:confirmation_token) { '' }
42
-
43
- it 'return 301 status' do
44
- expect(response.code).to eq('301')
45
- end
46
- end
47
38
  end
48
39
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.feature 'User update', type: :request do
4
+ context 'CSRF protection' do
5
+ %i[exception reset_session null_session].each do |strategy|
6
+ # Completely clean the configuration of forgery protection for the
7
+ # controller and reset it after the expectations. However, besides `:with`,
8
+ # the options given to `protect_from_forgery` are processed on the fly.
9
+ # I.e., there's no way to retain them. The initial setup corresponds to the
10
+ # dummy application, which uses the default Rails skeleton in that regard.
11
+ # So, if at some point Rails changed the given options, we should update it
12
+ # here.
13
+ around do |example|
14
+ controller = Spree::UsersController
15
+ old_allow_forgery_protection_value = controller.allow_forgery_protection
16
+ old_forgery_protection_strategy = controller.forgery_protection_strategy
17
+ controller.skip_forgery_protection
18
+ controller.allow_forgery_protection = true
19
+ controller.protect_from_forgery with: strategy
20
+
21
+ example.run
22
+
23
+ controller.allow_forgery_protection = old_allow_forgery_protection_value
24
+ controller.forgery_protection_strategy = old_forgery_protection_strategy
25
+ end
26
+
27
+ it "is not possible to take account over with the #{strategy} forgery protection strategy" do
28
+ user = create(:user, email: 'legit@mail.com', password: 'password')
29
+
30
+ post '/login', params: "spree_user[email]=legit@mail.com&spree_user[password]=password"
31
+ begin
32
+ put '/users/123456', params: 'user[email]=hacked@example.com'
33
+ rescue
34
+ # testing that the account is not compromised regardless of any raised
35
+ # exception
36
+ end
37
+
38
+ expect(user.reload.email).to eq('legit@mail.com')
39
+ end
40
+ end
41
+ end
42
+ end
data/spec/spec_helper.rb CHANGED
@@ -9,10 +9,14 @@ require 'spree_dev_tools/rspec/spec_helper'
9
9
  # in spec/support/ and its subdirectories.
10
10
  Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].sort.each { |f| require f }
11
11
 
12
+ require 'spree/testing_support/locale_helpers' if Spree.version.to_f >= 4.2
13
+
12
14
  RSpec.configure do |config|
13
15
  config.before(:each) do
14
16
  allow(RSpec::Rails::ViewRendering::EmptyTemplateHandler)
15
17
  .to receive(:call)
16
18
  .and_return(%("")) if Rails.gem_version >= Gem::Version.new('6.0.0.beta1')
17
19
  end
20
+
21
+ config.include Spree::TestingSupport::LocaleHelpers if defined?(Spree::TestingSupport::LocaleHelpers)
18
22
  end
@@ -15,6 +15,7 @@ RSpec.configure do |config|
15
15
 
16
16
  config.before do |example|
17
17
  if example.metadata.key?(:confirmable)
18
+ Rails.cache.clear
18
19
  Spree::Auth::Config[:confirmable] = example.metadata[:confirmable]
19
20
 
20
21
  Spree.send(:remove_const, :User)
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
33
33
  s.add_dependency 'devise', '~> 4.7'
34
34
  s.add_dependency 'devise-encryptable', '0.2.0'
35
35
 
36
- spree_version = '>= 4.1', '< 5.0'
36
+ spree_version = '>= 4.3.0.rc1'
37
37
  s.add_dependency 'spree_core', spree_version
38
38
  s.add_dependency 'spree_extension'
39
39