spree_auth_devise 4.3.3 → 4.4.2

Sign up to get free protection for your applications and to get access to all the features.
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