spree_auth_devise 4.4.2 → 4.6.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +14 -73
  3. data/Gemfile +8 -1
  4. data/README.md +5 -11
  5. data/config/initializers/devise.rb +1 -1
  6. data/config/routes.rb +47 -45
  7. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +1 -1
  8. data/lib/controllers/backend/spree/{admin → auth/admin}/base_controller_decorator.rb +2 -2
  9. data/lib/controllers/backend/spree/{admin → auth/admin}/orders/customer_details_controller_decorator.rb +2 -2
  10. data/lib/controllers/backend/spree/{admin → auth/admin}/orders_controller_decorator.rb +2 -2
  11. data/lib/controllers/backend/spree/auth/admin/resource_controller_decorator.rb +6 -0
  12. data/lib/controllers/frontend/spree/{checkout_controller_decorator.rb → auth/checkout_controller_decorator.rb} +4 -4
  13. data/lib/controllers/frontend/spree/user_passwords_controller.rb +2 -2
  14. data/lib/controllers/frontend/spree/user_registrations_controller.rb +5 -3
  15. data/lib/controllers/frontend/spree/user_sessions_controller.rb +2 -2
  16. data/lib/controllers/frontend/spree/users_controller.rb +2 -2
  17. data/lib/mailers/spree/user_mailer.rb +38 -0
  18. data/lib/spree/auth/configuration.rb +33 -0
  19. data/lib/spree/auth/engine.rb +14 -3
  20. data/lib/spree/auth/version.rb +1 -1
  21. data/lib/spree/authentication_helpers.rb +6 -6
  22. data/lib/spree/testing_support/auth_helpers.rb +8 -0
  23. data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +17 -15
  24. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +13 -13
  25. data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +1 -1
  26. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +8 -9
  27. data/lib/views/backend/spree/layouts/login.html.erb +1 -1
  28. data/lib/views/frontend/spree/user_registrations/new.html.erb +1 -1
  29. data/spec/controllers/spree/api/v2/storefront/passwords_controller_spec.rb +2 -2
  30. data/spec/controllers/spree/checkout_controller_spec.rb +34 -2
  31. data/spec/controllers/spree/products_controller_spec.rb +1 -0
  32. data/spec/controllers/spree/user_registrations_controller_spec.rb +44 -0
  33. data/spec/controllers/spree/user_sessions_controller_spec.rb +18 -0
  34. data/spec/controllers/spree/users_controller_spec.rb +39 -5
  35. data/spec/features/account_spec.rb +1 -0
  36. data/spec/features/admin/sign_in_spec.rb +20 -1
  37. data/spec/features/checkout_spec.rb +5 -4
  38. data/spec/features/confirmation_spec.rb +1 -1
  39. data/spec/features/sign_in_spec.rb +2 -2
  40. data/spec/mailers/user_mailer_spec.rb +3 -3
  41. data/spec/models/user_spec.rb +3 -3
  42. data/spec/support/configuration_helpers.rb +1 -1
  43. data/spec/support/confirm_helpers.rb +3 -1
  44. data/spree_auth_devise.gemspec +1 -1
  45. metadata +18 -18
  46. data/app/mailers/spree/user_mailer.rb +0 -23
  47. data/app/models/spree/auth_configuration.rb +0 -8
  48. data/lib/controllers/backend/spree/admin/resource_controller_decorator.rb +0 -6
  49. /data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.html.erb +0 -0
  50. /data/{app/views → lib/views/emails}/spree/user_mailer/confirmation_instructions.text.erb +0 -0
  51. /data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.html.erb +0 -0
  52. /data/{app/views → lib/views/emails}/spree/user_mailer/reset_password_instructions.text.erb +0 -0
@@ -1,16 +1,18 @@
1
- <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
2
-
3
- <h2><%= Spree.t(:change_my_password) %></h2>
4
-
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 %>
1
+ <div id="forgot-password" class="card mt-5 shadow-sm">
2
+ <div class="card-body">
3
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
4
+ <h5 class="card-title"><%= Spree.t(:change_my_password) %></h5>
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>
14
+ <%= f.hidden_field :reset_password_token %>
15
+ <%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block' %>
16
+ <% end %>
9
17
  </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>
14
- <%= f.hidden_field :reset_password_token %>
15
- <%= f.submit Spree.t(:update), class: 'btn btn-primary btn-block' %>
16
- <% end %>
18
+ </div>
@@ -1,15 +1,15 @@
1
- <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
1
+ <div id="forgot-password" class="card mt-5 shadow-sm">
2
+ <div class="card-body">
3
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @spree_user } %>
2
4
 
3
- <div id="forgot-password" class="col-lg-6">
4
- <h1><%= Spree.t(:forgot_password) %></h1>
5
-
6
- <p><%= Spree.t(:instructions_to_reset_password) %></p>
7
-
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' %>
14
- <% end %>
5
+ <h5 class="card-title"><%= Spree.t(:forgot_password) %></h5>
6
+ <p><%= Spree.t(:instructions_to_reset_password) %></p>
7
+ <%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.admin_reset_password_path, data: { turbo: false } do |f| %>
8
+ <div class="form-group">
9
+ <%= f.label :email, Spree.t(:email) %>
10
+ <%= f.email_field :email, class: 'form-control', required: true %>
11
+ </div>
12
+ <%= f.submit Spree.t(:reset_password), class: 'btn btn-primary' %>
13
+ <% end %>
14
+ </div>
15
15
  </div>
@@ -1,4 +1,4 @@
1
- <div class="alert alert-danger">
1
+ <div class="alert alert-danger m-5">
2
2
  <%= Spree.t(:authorization_failure) %>
3
3
  </div>
4
4
  <!-- Add your own custom access denied message here if you like -->
@@ -1,17 +1,16 @@
1
- <% if flash[:alert] %>
2
- <div class="alert alert-danger"><%= flash[:alert] %></div>
3
- <% end %>
4
-
5
- <div data-hook="login" class="card border-0">
1
+ <div data-hook="login" class="card mt-5 shadow-sm">
6
2
  <div class="card-body">
3
+ <% if flash[:error] %>
4
+ <div class="alert alert-danger"><%= flash[:error] %></div>
5
+ <% end %>
6
+ <h5 class="card-title"><%= Spree.t(:login) %></h5>
7
+
7
8
  <%= form_for Spree.user_class.new, :as => :spree_user, :url => spree.admin_create_new_session_path do |f| %>
8
9
  <div id="password-credentials">
9
- <div class="form-group text-center">
10
- <%= f.label :email, Spree.t(:email) %>
10
+ <div class="form-group">
11
11
  <%= f.email_field :email, class: 'form-control', tabindex: 1, placeholder: Spree.t(:email) %>
12
12
  </div>
13
- <div class="form-group text-center">
14
- <%= f.label :password, Spree.t(:password) %>
13
+ <div class="form-group">
15
14
  <%= f.password_field :password, :class => 'form-control', :tabindex => 2, placeholder: Spree.t(:password) %>
16
15
  </div>
17
16
  </div>
@@ -8,7 +8,7 @@
8
8
  <%= render partial: 'spree/admin/shared/head' %>
9
9
  </head>
10
10
 
11
- <body class="pt-5">
11
+ <body class="admin bg-light pt-5">
12
12
  <div class="container">
13
13
 
14
14
  <div class="row">
@@ -3,7 +3,7 @@
3
3
  <div class="col-lg-6 offset-lg-3">
4
4
  <h3 class="spree-header spree-mb-large spree-mt-large"><%= Spree.t(:new_customer) %></h3>
5
5
  <div id="new-customer" data-hook="login">
6
- <%= form_for resource, as: :spree_user, url: spree.registration_path do |f| %>
6
+ <%= form_for resource, as: :spree_user, url: spree.registration_path, data: { turbo: false } do |f| %>
7
7
  <div data-hook="signup_inside_form">
8
8
  <%= render partial: 'spree/shared/user_form', locals: { f: f, remember_me_field: true } %>
9
9
  <div><%= f.submit Spree.t(:sign_up), class: 'btn btn-primary btn-block spree-btn mb-5' %></div>
@@ -32,7 +32,7 @@ RSpec.describe Spree::Api::V2::Storefront::PasswordsController, type: :controlle
32
32
  context 'when updating password with blank password' do
33
33
  let(:params) {
34
34
  {
35
- id: user.send_reset_password_instructions(Spree::Store.current),
35
+ id: user.send_reset_password_instructions(Spree::Store.default),
36
36
  user: {
37
37
  password: '',
38
38
  password_confirmation: ''
@@ -49,7 +49,7 @@ RSpec.describe Spree::Api::V2::Storefront::PasswordsController, type: :controlle
49
49
  context 'when updating password with specified password' do
50
50
  let(:params) {
51
51
  {
52
- id: user.send_reset_password_instructions(Spree::Store.current),
52
+ id: user.send_reset_password_instructions(Spree::Store.default),
53
53
  user: {
54
54
  password: password,
55
55
  password_confirmation: password
@@ -6,13 +6,14 @@ RSpec.describe Spree::CheckoutController, type: :controller do
6
6
  before do
7
7
  allow(controller).to receive(:current_order) { order }
8
8
  allow(order).to receive(:confirmation_required?) { true }
9
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr') if Spree.version.to_f >= 4.2
9
10
  end
10
11
 
11
12
  context '#edit' do
12
13
  context 'when registration step enabled' do
13
14
  before do
14
15
  allow(controller).to receive(:check_authorization)
15
- Spree::Auth::Config.set(registration_step: true)
16
+ Spree::Auth::Config.set(:registration_step, true)
16
17
  end
17
18
 
18
19
  context 'when authenticated as registered user' do
@@ -29,12 +30,19 @@ RSpec.describe Spree::CheckoutController, type: :controller do
29
30
  get :edit, params: { state: 'address' }
30
31
  expect(response).to redirect_to spree.checkout_registration_path
31
32
  end
33
+
34
+ context 'non default locale' do
35
+ it 'redirects to registration step with non default locale' do
36
+ get :edit, params: { state: 'address', locale: 'fr' }
37
+ expect(response).to redirect_to spree.checkout_registration_path(locale: 'fr')
38
+ end
39
+ end
32
40
  end
33
41
  end
34
42
 
35
43
  context 'when registration step disabled' do
36
44
  before do
37
- Spree::Auth::Config.set(registration_step: false)
45
+ Spree::Auth::Config.set(:registration_step, false)
38
46
  allow(controller).to receive(:check_authorization)
39
47
  end
40
48
 
@@ -84,6 +92,15 @@ RSpec.describe Spree::CheckoutController, type: :controller do
84
92
  post :update, params: { state: 'confirm' }
85
93
  expect(response).to redirect_to spree.order_path(order)
86
94
  end
95
+
96
+ context 'non default locale' do
97
+ it 'redirects to the tokenized order view with a non default locale' do
98
+ # spree version higher than 3.6 required for test to work correctly
99
+ request.cookie_jar.signed[:token] = 'ABC'
100
+ post :update, params: { state: 'confirm', locale: 'fr' }
101
+ expect(response).to redirect_to spree.order_path(order, locale: 'fr')
102
+ end
103
+ end
87
104
  end
88
105
 
89
106
  context 'with a registered user' do
@@ -101,6 +118,13 @@ RSpec.describe Spree::CheckoutController, type: :controller do
101
118
  post :update, params: { state: 'confirm' }
102
119
  expect(response).to redirect_to spree.order_path(order)
103
120
  end
121
+
122
+ context 'non default locale' do
123
+ it 'redirects to the standard order view with a non default locale' do
124
+ post :update, params: { state: 'confirm', locale: 'fr' }
125
+ expect(response).to redirect_to spree.order_path(order, locale: 'fr')
126
+ end
127
+ end
104
128
  end
105
129
  end
106
130
  end
@@ -147,6 +171,14 @@ RSpec.describe Spree::CheckoutController, type: :controller do
147
171
  expect(response).to redirect_to spree.checkout_state_path(:address)
148
172
  end
149
173
 
174
+ context 'non default locale' do
175
+ it 'redirects to the checkout_path after saving with non default locale' do
176
+ allow(controller).to receive(:check_authorization)
177
+ put :update_registration, params: { order: { email: 'jobs@spreecommerce.com' }, locale: 'fr' }
178
+ expect(response).to redirect_to spree.checkout_state_path(:address, locale: 'fr')
179
+ end
180
+ end
181
+
150
182
  it 'checks if the user is authorized for :edit' do
151
183
  if Spree.version.to_f > 3.6
152
184
  request.cookie_jar.signed[:token] = token
@@ -17,6 +17,7 @@ RSpec.describe Spree::ProductsController, type: :controller do
17
17
  end
18
18
 
19
19
  it 'cannot view non-active products' do
20
+ skip if Spree.version.to_f > 4.0
20
21
  allow(user).to receive(:has_spree_role?) { false }
21
22
 
22
23
  # this behaviour was introduced in rails 5.1 & Spree 3.5
@@ -9,6 +9,25 @@ RSpec.describe Spree::UserRegistrationsController, type: :controller do
9
9
  expect(response).to redirect_to spree.account_path
10
10
  end
11
11
 
12
+ context 'with non default locale' do
13
+ before do
14
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
15
+ end
16
+
17
+ after { I18n.locale = :en }
18
+
19
+ it 'redirects to account_path with locale' do
20
+ post :create, params: { spree_user: { email: 'foobar@example.com', password: 'foobar123', password_confirmation: 'foobar123' }, locale: 'fr'}
21
+ expect(response).to redirect_to spree.account_path(locale: 'fr')
22
+ end
23
+
24
+ it 'saves locale in user' do
25
+ post :create, params: { spree_user: { email: 'foobar@example.com', password: 'foobar123', password_confirmation: 'foobar123' }, locale: 'fr'}
26
+ user = Spree.user_class.find_by_email('foobar@example.com')
27
+ expect(user.selected_locale).to eq('fr')
28
+ end
29
+ end
30
+
12
31
  context 'with a guest token present' do
13
32
  before do
14
33
  if Spree.version.to_f > 3.6
@@ -55,4 +74,29 @@ RSpec.describe Spree::UserRegistrationsController, type: :controller do
55
74
  end
56
75
  end
57
76
  end
77
+
78
+ context 'when user session times out' do
79
+ let(:user) { build_stubbed(:user) }
80
+
81
+ before do
82
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
83
+ allow(Devise::Mapping).to receive(:find_scope!).and_return(:spree_user)
84
+ end
85
+
86
+ after { I18n.locale = :en }
87
+
88
+ it 'redirects to sign in after timeout' do
89
+ expect(controller.send(:after_inactive_sign_up_path_for, :user)).to eq(spree.login_path)
90
+ end
91
+
92
+ context 'with locale changed to fr' do
93
+ before do
94
+ allow(controller).to receive(:locale_param).and_return('fr')
95
+ end
96
+
97
+ it 'redirect to sign in after timeout with changed locale' do
98
+ expect(controller.send(:after_inactive_sign_up_path_for, :user)).to eq(spree.login_path('fr'))
99
+ end
100
+ end
101
+ end
58
102
  end
@@ -200,4 +200,22 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
200
200
  end
201
201
  end
202
202
  end
203
+
204
+ context "#destroy" do
205
+ before do
206
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
207
+ end
208
+
209
+ it "redirects to login page after signing out with default locale" do
210
+ post :create, params: { spree_user: { email: user.email, password: 'secret' }}
211
+ delete :destroy
212
+ expect(response).to redirect_to(spree.login_path)
213
+ end
214
+
215
+ it "persists fr locale when redirecting to login page after signing out" do
216
+ post :create, params: { spree_user: { email: user.email, password: 'secret' }, locale: 'fr' }
217
+ delete :destroy, params: { locale: 'fr' }
218
+ expect(response).to redirect_to spree.login_path(locale: 'fr')
219
+ end
220
+ end
203
221
  end
@@ -3,7 +3,10 @@ RSpec.describe Spree::UsersController, type: :controller do
3
3
  let(:user) { create(:user) }
4
4
  let(:role) { create(:role) }
5
5
 
6
- before { allow(controller).to receive(:spree_current_user) { user } }
6
+ before do
7
+ allow(controller).to receive(:spree_current_user) { user }
8
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
9
+ end
7
10
 
8
11
  context '#load_object' do
9
12
  it 'redirects to signup path if user is not found' do
@@ -11,6 +14,14 @@ RSpec.describe Spree::UsersController, type: :controller do
11
14
  put :update, params: { user: { email: 'foobar@example.com' } }
12
15
  expect(response).to redirect_to spree.login_path
13
16
  end
17
+
18
+ context "non default locale" do
19
+ it 'redirects to signup path with non default locale if user is not found' do
20
+ allow(controller).to receive(:spree_current_user) { nil }
21
+ put :update, params: { user: { email: 'foobar@example.com' }, locale: 'fr' }
22
+ expect(response).to redirect_to spree.login_path(locale: 'fr')
23
+ end
24
+ end
14
25
  end
15
26
 
16
27
  context '#create' do
@@ -22,10 +33,33 @@ RSpec.describe Spree::UsersController, type: :controller do
22
33
 
23
34
  context '#update' do
24
35
  context 'when updating own account' do
25
- it 'performs update' do
26
- put :update, params: { user: { email: 'mynew@email-address.com' } }
27
- expect(assigns[:user].email).to eq 'mynew@email-address.com'
28
- expect(response).to redirect_to spree.account_path
36
+ context 'deafult locale' do
37
+ before { put :update, params: { user: { email: 'mynew@email-address.com' } } }
38
+
39
+ it 'performs update of email' do
40
+ expect(assigns[:user].email).to eq 'mynew@email-address.com'
41
+ end
42
+
43
+ it 'redirects to correct path' do
44
+ expect(response).to redirect_to spree.account_path
45
+ end
46
+ end
47
+
48
+ context 'non default locale' do
49
+ before { put :update, params: { user: { email: 'mynew@email-address.com' }, locale: 'fr' } }
50
+
51
+ it 'performs update of email' do
52
+ expect(assigns[:user].email).to eq 'mynew@email-address.com'
53
+ end
54
+
55
+ it 'persists locale when redirecting to account' do
56
+ expect(response).to redirect_to spree.account_path(locale: 'fr')
57
+ end
58
+ end
59
+
60
+ it 'performs update of selected_locale' do
61
+ put :update, params: { user: { selected_locale: 'pl' } }
62
+ expect(assigns[:user].selected_locale).to eq 'pl'
29
63
  end
30
64
  end
31
65
 
@@ -28,6 +28,7 @@ RSpec.feature 'Accounts', type: :feature do
28
28
  expect(page).to have_text 'email@person.com'
29
29
 
30
30
  find('a.account-page-user-info-item-title-edit').click
31
+ wait_for_turbo
31
32
 
32
33
  fill_in 'Password', with: 'foobar'
33
34
  fill_in 'Password Confirmation', with: 'foobar'
@@ -18,6 +18,25 @@ RSpec.feature 'Admin - Sign In', type: :feature do
18
18
  expect(current_path).to eq '/account'
19
19
  end
20
20
 
21
+ context 'with non default locale' do
22
+ before do
23
+ add_french_locales
24
+ Spree::Store.default.update(default_locale: 'en', supported_locales: 'en,fr')
25
+ I18n.locale = :fr
26
+ end
27
+
28
+ after { I18n.locale = :en }
29
+
30
+ scenario 'lets a user sign in successfully', js: true do
31
+ log_in(email: @user.email, password: 'secret', locale: 'fr')
32
+ show_user_menu
33
+
34
+ expect(page).not_to have_text login_button.upcase
35
+ expect(page).to have_text logout_button.upcase
36
+ expect(current_path).to eq '/fr/account'
37
+ end
38
+ end
39
+
21
40
  scenario 'shows validation errors' do
22
41
  fill_in 'Email', with: @user.email
23
42
  fill_in 'Password', with: 'wrong_password'
@@ -44,6 +63,6 @@ RSpec.feature 'Admin - Sign In', type: :feature do
44
63
  expect(page).to have_text 'admin@person.com'
45
64
  end
46
65
  end
47
- expect(current_path).to eq '/admin/orders'
66
+ expect(current_path).to match('/admin')
48
67
  end
49
68
  end
@@ -30,7 +30,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
30
30
  end
31
31
 
32
32
  scenario 'allow a visitor to checkout as guest, without registration' do
33
- Spree::Auth::Config.set(registration_step: true)
33
+ Spree::Auth::Config.set(:registration_step, true)
34
34
  add_to_cart(mug)
35
35
  click_link 'checkout'
36
36
 
@@ -73,7 +73,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
73
73
  end
74
74
 
75
75
  # Regression test for #890
76
- scenario 'associate an incomplete guest order with user after successful password reset' do
76
+ xscenario 'associate an incomplete guest order with user after successful password reset' do
77
77
  add_to_cart(mug)
78
78
 
79
79
  visit spree.login_path
@@ -81,12 +81,12 @@ RSpec.feature 'Checkout', :js, type: :feature do
81
81
  fill_in('Email', with: 'email@person.com')
82
82
  find('#spree_user_email').set('email@person.com')
83
83
 
84
- click_button 'Reset my password'
84
+ expect { click_button 'Reset my password' }.to change { ActionMailer::Base.deliveries.size }.by(1)
85
85
 
86
86
  # Need to do this now because the token stored in the DB is the encrypted version
87
87
  # The 'plain-text' version is sent in the email and there's one way to get that!
88
88
  reset_password_email = ActionMailer::Base.deliveries.first
89
- token_url_regex = /^http:\/\/www.example.com\/user\/spree_user\/password\/edit\?reset_password_token=(.*)$/
89
+ token_url_regex = /^http:\/\/www.example.com\/password\/change\?reset_password_token=(.*)$/
90
90
  token = token_url_regex.match(reset_password_email.body.encoded)[1]
91
91
 
92
92
  visit spree.edit_spree_user_password_path(reset_password_token: token.strip).tr("%0D","")
@@ -103,6 +103,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
103
103
  click_button 'Save and Continue'
104
104
 
105
105
  expect(page).not_to have_text 'Email is invalid'
106
+ ActiveJob::Base.queue_adapter = :test
106
107
  end
107
108
 
108
109
  scenario 'allow a user to register during checkout' do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.feature 'Confirmation', type: :feature, confirmable: true do
4
4
  before do
5
- expect(Spree::UserMailer).to receive(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.current.id }).and_return(double(deliver: true))
5
+ expect(Spree::UserMailer).to receive(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.default.id }).and_return(double(deliver: true))
6
6
  end
7
7
 
8
8
  background do
@@ -45,7 +45,7 @@ RSpec.feature 'Sign In', type: :feature do
45
45
  expect(page).to have_text 'admin@person.com'
46
46
  end
47
47
  end
48
- expect(current_path).to eq '/admin/orders'
48
+ expect(current_path).to match('/admin')
49
49
  end
50
50
 
51
51
  it 'should store the user previous location' do
@@ -74,7 +74,7 @@ RSpec.feature 'Sign In', type: :feature do
74
74
 
75
75
  expect(page).not_to have_text Spree.t(:login).upcase
76
76
  expect(page).to have_text Spree.t(:logout).upcase
77
- expect(current_url).to match(/\/account\?locale\=fr$/)
77
+ expect(current_url).to match(/\/fr\/account/)
78
78
  end
79
79
  end
80
80
  end
@@ -5,7 +5,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
5
5
  describe '#reset_password_instructions' do
6
6
  describe 'message contents' do
7
7
  before do
8
- @message = described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.current.id })
8
+ @message = described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.default.id })
9
9
  end
10
10
 
11
11
  context 'subject includes' do
@@ -22,7 +22,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
22
22
 
23
23
  context 'body includes' do
24
24
  it 'password reset url' do
25
- expect(@message.body.encoded).to include "http://#{store.url}/user/spree_user/password/edit"
25
+ expect(@message.body.encoded).to include "http://#{store.url}/password/change"
26
26
  end
27
27
  end
28
28
  end
@@ -30,7 +30,7 @@ RSpec.describe Spree::UserMailer, type: :mailer do
30
30
  describe 'legacy support for User object' do
31
31
  it 'sends an email' do
32
32
  expect {
33
- described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.current.id }).deliver_now
33
+ described_class.reset_password_instructions(user, 'token goes here', { current_store_id: Spree::Store.default.id }).deliver_now
34
34
  }.to change(ActionMailer::Base.deliveries, :size).by(1)
35
35
  end
36
36
  end
@@ -9,7 +9,7 @@ RSpec.describe Spree::User, type: :model do
9
9
 
10
10
  it 'generates the reset password token' do
11
11
  user = build(:user)
12
- current_store = Spree::Store.current
12
+ current_store = Spree::Store.default
13
13
  expect(Spree::UserMailer).to receive(:reset_password_instructions).with(user, anything, { current_store_id: current_store.id }).and_return(double(deliver: true))
14
14
  user.send_reset_password_instructions(current_store)
15
15
  expect(user.reset_password_token).not_to be_nil
@@ -94,7 +94,7 @@ RSpec.describe Spree::User, type: :model do
94
94
 
95
95
  describe "confirmable" do
96
96
  it "is confirmable if the confirmable option is enabled", confirmable: true do
97
- Spree::UserMailer.stub(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.current.id }).and_return(double(deliver: true))
97
+ Spree::UserMailer.stub(:confirmation_instructions).with(anything, anything, { current_store_id: Spree::Store.default.id }).and_return(double(deliver: true))
98
98
  expect(Spree.user_class.devise_modules).to include(:confirmable)
99
99
  end
100
100
 
@@ -112,7 +112,7 @@ RSpec.describe Spree::User, type: :model do
112
112
  user.email = FFaker::Internet.email
113
113
  user.password = user.password_confirmation = 'pass1234'
114
114
  user.save
115
-
115
+
116
116
  expect(Spree::UserMailer).to receive(:confirmation_instructions).with(
117
117
  user, anything, { current_store_id: default_store.id }).and_return(double(deliver: true)
118
118
  )
@@ -1,6 +1,6 @@
1
1
  module ConfigurationHelpers
2
2
  def allow_bypass_sign_in
3
- Spree::Auth::Config.set(signout_after_password_change: false)
3
+ Spree::Auth::Config.set(:signout_after_password_change, false)
4
4
  end
5
5
  end
6
6
 
@@ -1,12 +1,14 @@
1
1
  RSpec.configure do |config|
2
2
  config.around do |example|
3
3
  if example.metadata.key?(:confirmable)
4
+ old_setting = Spree::Auth::Config.confirmable
4
5
  old_user = Spree::User
5
6
 
6
7
  begin
7
8
  example.run
8
9
  ensure
9
10
  Spree.const_set('User', old_user)
11
+ Spree::Auth::Config.confirmable = old_setting
10
12
  end
11
13
  else
12
14
  example.run
@@ -16,7 +18,7 @@ RSpec.configure do |config|
16
18
  config.before do |example|
17
19
  if example.metadata.key?(:confirmable)
18
20
  Rails.cache.clear
19
- Spree::Auth::Config[:confirmable] = example.metadata[:confirmable]
21
+ Spree::Auth::Config.confirmable = example.metadata[:confirmable]
20
22
 
21
23
  Spree.send(:remove_const, :User)
22
24
  load File.expand_path('../../../app/models/spree/user.rb', __FILE__)
@@ -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.3.0.rc1'
36
+ spree_version = '>= 4.5.0'
37
37
  s.add_dependency 'spree_core', spree_version
38
38
  s.add_dependency 'spree_extension'
39
39