solidus_auth_devise 2.0.0 → 2.5.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 (121) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +12 -8
  6. data/.rubocop.yml +2 -0
  7. data/CHANGELOG.md +284 -145
  8. data/Gemfile +22 -14
  9. data/{LICENSE.md → LICENSE} +2 -2
  10. data/README.md +50 -3
  11. data/Rakefile +2 -0
  12. data/app/mailers/spree/user_mailer.rb +4 -2
  13. data/app/models/spree/auth_configuration.rb +2 -0
  14. data/app/models/spree/user.rb +30 -20
  15. data/app/overrides/spree/admin/users/edit/_add_reset_password_form.html.erb.deface +20 -0
  16. data/bin/console +17 -0
  17. data/bin/rails +12 -4
  18. data/bin/setup +8 -0
  19. data/config/initializers/devise.rb +11 -3
  20. data/config/initializers/warden.rb +4 -2
  21. data/config/locales/en.yml +4 -1
  22. data/config/locales/fr.yml +1 -1
  23. data/config/locales/it.yml +4 -4
  24. data/config/routes.rb +16 -15
  25. data/db/default/users.rb +10 -8
  26. data/db/migrate/20101026184949_create_users.rb +9 -7
  27. data/db/migrate/20101026184950_rename_columns_for_devise.rb +3 -1
  28. data/db/migrate/20101214150824_convert_user_remember_field.rb +2 -0
  29. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -0
  30. data/db/migrate/20120605211305_make_users_email_index_unique.rb +4 -2
  31. data/db/migrate/20140904000425_add_deleted_at_to_users.rb +2 -0
  32. data/db/migrate/20141002154641_add_confirmable_to_users.rb +2 -0
  33. data/db/migrate/20190125170630_add_reset_password_token_index_to_spree_users.rb +34 -0
  34. data/db/migrate/20200417153503_add_unconfirmed_email_to_spree_users.rb +7 -0
  35. data/db/seeds.rb +2 -0
  36. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +7 -4
  37. data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +12 -10
  38. data/lib/controllers/frontend/spree/user_confirmations_controller.rb +2 -0
  39. data/lib/controllers/frontend/spree/user_passwords_controller.rb +4 -1
  40. data/lib/controllers/frontend/spree/user_registrations_controller.rb +4 -0
  41. data/lib/controllers/frontend/spree/user_sessions_controller.rb +4 -2
  42. data/lib/controllers/frontend/spree/users_controller.rb +20 -15
  43. data/lib/decorators/backend/controllers/spree/admin/base_controller_decorator.rb +20 -0
  44. data/lib/decorators/backend/controllers/spree/admin/orders/customer_details_controller_decorator.rb +22 -0
  45. data/lib/{controllers/frontend → decorators/frontend/controllers}/spree/checkout_controller_decorator.rb +29 -19
  46. data/lib/generators/solidus/auth/install/install_generator.rb +15 -3
  47. data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +3 -1
  48. data/lib/solidus/auth.rb +2 -0
  49. data/lib/solidus_auth_devise.rb +13 -5
  50. data/lib/spree/auth/devise.rb +2 -7
  51. data/lib/spree/auth/engine.rb +51 -38
  52. data/lib/spree/auth/version.rb +7 -0
  53. data/lib/spree/authentication_helpers.rb +5 -11
  54. data/lib/tasks/auth.rake +3 -1
  55. data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +13 -6
  56. data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +4 -4
  57. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +6 -8
  58. data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +1 -1
  59. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +9 -9
  60. data/lib/views/backend/spree/layouts/admin/_login_nav.html.erb +4 -4
  61. data/lib/views/frontend/spree/checkout/registration.html.erb +4 -4
  62. data/lib/views/frontend/spree/shared/_login.html.erb +4 -4
  63. data/lib/views/frontend/spree/shared/_login_bar.html.erb +2 -6
  64. data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +6 -0
  65. data/lib/views/frontend/spree/shared/_user_form.html.erb +3 -3
  66. data/lib/views/frontend/spree/user_passwords/edit.html.erb +4 -4
  67. data/lib/views/frontend/spree/user_passwords/new.html.erb +5 -7
  68. data/lib/views/frontend/spree/user_registrations/new.html.erb +3 -3
  69. data/lib/views/frontend/spree/user_sessions/authorization_failure.html.erb +1 -1
  70. data/lib/views/frontend/spree/user_sessions/new.html.erb +2 -2
  71. data/lib/views/frontend/spree/users/edit.html.erb +2 -2
  72. data/lib/views/frontend/spree/users/show.html.erb +12 -12
  73. data/solidus_auth_devise.gemspec +38 -31
  74. data/spec/controllers/spree/admin/base_controller_spec.rb +53 -0
  75. data/spec/controllers/spree/admin/user_passwords_controller_spec.rb +14 -0
  76. data/spec/controllers/spree/base_controller_spec.rb +53 -0
  77. data/spec/controllers/spree/checkout_controller_spec.rb +6 -10
  78. data/spec/controllers/spree/products_controller_spec.rb +6 -3
  79. data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -3
  80. data/spec/controllers/spree/user_registrations_controller_spec.rb +3 -2
  81. data/spec/controllers/spree/user_sessions_controller_spec.rb +14 -0
  82. data/spec/controllers/spree/users_controller_spec.rb +26 -8
  83. data/spec/factories/confirmed_user.rb +7 -5
  84. data/spec/features/account_spec.rb +4 -3
  85. data/spec/features/admin/password_reset_spec.rb +66 -10
  86. data/spec/features/admin/products_spec.rb +2 -1
  87. data/spec/features/admin/sign_in_spec.rb +2 -1
  88. data/spec/features/admin/sign_out_spec.rb +2 -1
  89. data/spec/features/admin_permissions_spec.rb +2 -1
  90. data/spec/features/change_email_spec.rb +3 -2
  91. data/spec/features/checkout_spec.rb +14 -37
  92. data/spec/features/confirmation_spec.rb +6 -10
  93. data/spec/features/order_spec.rb +2 -1
  94. data/spec/features/password_reset_spec.rb +23 -10
  95. data/spec/features/sign_in_spec.rb +2 -1
  96. data/spec/features/sign_out_spec.rb +4 -3
  97. data/spec/features/sign_up_spec.rb +2 -1
  98. data/spec/mailers/user_mailer_spec.rb +2 -1
  99. data/spec/models/order_spec.rb +2 -1
  100. data/spec/models/user_spec.rb +57 -38
  101. data/spec/spec_helper.rb +13 -9
  102. data/spec/support/ability.rb +3 -1
  103. data/spec/support/authentication_helpers.rb +2 -0
  104. data/spec/support/confirm_helpers.rb +23 -10
  105. data/spec/support/email.rb +2 -0
  106. data/spec/support/features/fill_addresses_fields.rb +29 -0
  107. data/spec/support/preferences.rb +10 -2
  108. data/spec/support/spree.rb +2 -0
  109. metadata +327 -243
  110. data/.travis.yml +0 -22
  111. data/app/overrides/auth_admin_login_navigation_bar.rb +0 -11
  112. data/app/overrides/auth_shared_login_bar.rb +0 -10
  113. data/circle.yml +0 -6
  114. data/lib/assets/javascripts/spree/backend/solidus_auth.js +0 -1
  115. data/lib/assets/javascripts/spree/frontend/solidus_auth.js +0 -1
  116. data/lib/assets/stylesheets/spree/backend/solidus_auth.css +0 -3
  117. data/lib/assets/stylesheets/spree/frontend/solidus_auth.css +0 -3
  118. data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +0 -11
  119. data/lib/controllers/backend/spree/admin/admin_orders_controller_decorator.rb +0 -20
  120. data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +0 -15
  121. data/spec/features/admin/orders_spec.rb +0 -30
@@ -1,5 +1,6 @@
1
- RSpec.describe Spree::CheckoutController, type: :controller do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.describe Spree::CheckoutController, type: :controller do
3
4
  let(:order) { create(:order_with_line_items, email: nil, user: nil, guest_token: token) }
4
5
  let(:user) { build(:user, spree_api_key: 'fake') }
5
6
  let(:token) { 'some_token' }
@@ -39,11 +40,7 @@ RSpec.describe Spree::CheckoutController, type: :controller do
39
40
 
40
41
  context 'when guest checkout not allowed' do
41
42
  before do
42
- Spree::Config.set(allow_guest_checkout: false)
43
- end
44
-
45
- after do
46
- Spree::Config.set(allow_guest_checkout: true)
43
+ stub_spree_preferences(allow_guest_checkout: false)
47
44
  end
48
45
 
49
46
  it 'redirects to registration step' do
@@ -56,7 +53,7 @@ RSpec.describe Spree::CheckoutController, type: :controller do
56
53
 
57
54
  context 'when registration step disabled' do
58
55
  before do
59
- Spree::Auth::Config.set(registration_step: false)
56
+ stub_spree_preferences(Spree::Auth::Config, registration_step: false)
60
57
  end
61
58
 
62
59
  context 'when authenticated as registered' do
@@ -80,8 +77,7 @@ RSpec.describe Spree::CheckoutController, type: :controller do
80
77
  context '#update' do
81
78
  context 'when in the confirm state' do
82
79
  before do
83
- order.update_column(:email, 'spree@example.com')
84
- order.update_column(:state, 'confirm')
80
+ order.update(email: 'spree@example.com', state: 'confirm')
85
81
 
86
82
  # So that the order can transition to complete successfully
87
83
  allow(order).to receive(:payment_required?) { false }
@@ -94,7 +90,7 @@ RSpec.describe Spree::CheckoutController, type: :controller do
94
90
  request.cookie_jar.signed[:guest_token] = 'ABC'
95
91
  post :update, params: { state: 'confirm' }
96
92
  expect(response).to redirect_to spree.token_order_path(order, 'ABC')
97
- expect(flash.notice).to eq Spree.t(:order_processed_successfully)
93
+ expect(flash.notice).to eq I18n.t('spree.order_processed_successfully')
98
94
  end
99
95
  end
100
96
 
@@ -1,5 +1,6 @@
1
- RSpec.describe Spree::ProductsController, type: :controller do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.describe Spree::ProductsController, type: :controller do
3
4
  let!(:product) { create(:product, available_on: 1.year.from_now) }
4
5
  let!(:user) { build(:user, spree_api_key: 'fake') }
5
6
 
@@ -15,7 +16,9 @@ RSpec.describe Spree::ProductsController, type: :controller do
15
16
  allow(controller).to receive(:before_save_new_order)
16
17
  allow(controller).to receive(:spree_current_user) { user }
17
18
  allow(user).to receive(:has_spree_role?) { false }
18
- get :show, params: { id: product.to_param }
19
- expect(response.status).to eq(404)
19
+
20
+ expect {
21
+ get :show, params: { id: product.to_param }
22
+ }.to raise_error(ActiveRecord::RecordNotFound)
20
23
  end
21
24
  end
@@ -1,5 +1,6 @@
1
- RSpec.describe Spree::UserPasswordsController, type: :controller do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.describe Spree::UserPasswordsController, type: :controller do
3
4
  let(:token) { 'some_token' }
4
5
 
5
6
  before { @request.env['devise.mapping'] = Devise.mappings[:spree_user] }
@@ -16,7 +17,7 @@ RSpec.describe Spree::UserPasswordsController, type: :controller do
16
17
  it 'flashes an error' do
17
18
  get :edit
18
19
  expect(flash[:alert]).to include(
19
- "You can't access this page without coming from a password reset " +
20
+ "You can't access this page without coming from a password reset " \
20
21
  'email'
21
22
  )
22
23
  end
@@ -34,7 +35,7 @@ RSpec.describe Spree::UserPasswordsController, type: :controller do
34
35
  context 'when updating password with blank password' do
35
36
  it 'shows error flash message, sets spree_user with token and re-displays password edit form' do
36
37
  put :update, params: { spree_user: { password: '', password_confirmation: '', reset_password_token: token } }
37
- expect(assigns(:spree_user).kind_of?(Spree::User)).to eq true
38
+ expect(assigns(:spree_user).is_a?(Spree::User)).to eq true
38
39
  expect(assigns(:spree_user).reset_password_token).to eq token
39
40
  expect(flash[:error]).to eq I18n.t(:cannot_be_blank, scope: [:devise, :user_passwords, :spree_user])
40
41
  expect(response).to render_template :edit
@@ -1,5 +1,6 @@
1
- RSpec.describe Spree::UserRegistrationsController, type: :controller do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.describe Spree::UserRegistrationsController, type: :controller do
3
4
  before { @request.env['devise.mapping'] = Devise.mappings[:spree_user] }
4
5
 
5
6
  context '#create' do
@@ -56,7 +57,7 @@ RSpec.describe Spree::UserRegistrationsController, type: :controller do
56
57
  it 'assigns orders with the correct token and no user present' do
57
58
  order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
58
59
  subject
59
- user = Spree::User.find_by_email('foobar@example.com')
60
+ user = Spree::User.find_by(email: 'foobar@example.com')
60
61
 
61
62
  order.reload
62
63
  expect(order.user_id).to eq user.id
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe Spree::UserSessionsController, type: :controller do
2
4
  let(:user) { create(:user) }
3
5
 
@@ -110,4 +112,16 @@ RSpec.describe Spree::UserSessionsController, type: :controller do
110
112
  end
111
113
  end
112
114
  end
115
+
116
+ context "#destroy" do
117
+ subject do
118
+ delete(:destroy)
119
+ end
120
+
121
+ it "redirects to default after signing out" do
122
+ subject
123
+ expect(controller.spree_current_user).to be_nil
124
+ expect(response).to redirect_to spree.root_path
125
+ end
126
+ end
113
127
  end
@@ -1,14 +1,12 @@
1
- RSpec.describe Spree::UsersController, type: :controller do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.describe Spree::UsersController, type: :controller do
3
4
  let(:admin_user) { create(:user) }
4
5
  let(:user) { create(:user) }
5
6
  let(:role) { create(:role) }
6
7
 
7
- before { allow(controller).to receive(:spree_current_user) { user } }
8
-
9
8
  context '#load_object' do
10
9
  it 'redirects to signup path if user is not found' do
11
- allow(controller).to receive(:spree_current_user) { nil }
12
10
  put :update, params: { user: { email: 'foobar@example.com' } }
13
11
  expect(response).to redirect_to spree.login_path
14
12
  end
@@ -22,11 +20,31 @@ RSpec.describe Spree::UsersController, type: :controller do
22
20
  end
23
21
 
24
22
  context '#update' do
23
+ before { sign_in(user) }
24
+
25
25
  context 'when updating own account' do
26
- it 'performs update' do
27
- put :update, params: { user: { email: 'mynew@email-address.com' } }
28
- expect(assigns[:user].email).to eq 'mynew@email-address.com'
29
- expect(response).to redirect_to spree.account_url(only_path: true)
26
+ context 'when user updated successfuly' do
27
+ before { put :update, params: { user: { email: 'mynew@email-address.com' } } }
28
+
29
+ it 'saves user' do
30
+ expect(assigns[:user].email).to eq 'mynew@email-address.com'
31
+ end
32
+
33
+ it 'updates spree_current_user' do
34
+ expect(subject.spree_current_user.email).to eq 'mynew@email-address.com'
35
+ end
36
+
37
+ it 'redirects to account url' do
38
+ expect(response).to redirect_to spree.account_url(only_path: true)
39
+ end
40
+ end
41
+
42
+ context 'when user not valid' do
43
+ before { put :update, params: { user: { email: '' } } }
44
+
45
+ it 'does not affect spree_current_user' do
46
+ expect(subject.spree_current_user.email).to eq user.email
47
+ end
30
48
  end
31
49
  end
32
50
 
@@ -1,7 +1,9 @@
1
- FactoryGirl.define do
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
2
4
  factory :confirmed_user, parent: :user do
3
- confirmed_at { Time.now }
4
- confirmation_sent_at { Time.now }
5
- confirmation_token "12345"
5
+ confirmed_at { Time.zone.now }
6
+ confirmation_sent_at { Time.zone.now }
7
+ confirmation_token { "12345" }
6
8
  end
7
- end
9
+ end
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Accounts', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Accounts', type: :feature do
3
4
  context 'editing' do
4
5
  scenario 'can edit an admin user' do
5
6
  user = create(:admin_user, email: 'admin@person.com', password: 'password', password_confirmation: 'password')
@@ -14,7 +15,7 @@ RSpec.feature 'Accounts', type: :feature do
14
15
  end
15
16
 
16
17
  scenario 'can edit a new user' do
17
- Spree::Auth::Config.set(signout_after_password_change: false)
18
+ stub_spree_preferences(Spree::Auth::Config, signout_after_password_change: false)
18
19
  visit spree.signup_path
19
20
 
20
21
  fill_in 'Email', with: 'email@person.com'
@@ -35,7 +36,7 @@ RSpec.feature 'Accounts', type: :feature do
35
36
  end
36
37
 
37
38
  scenario 'can edit an existing user account' do
38
- Spree::Auth::Config.set(signout_after_password_change: false)
39
+ stub_spree_preferences(Spree::Auth::Config ,signout_after_password_change: false)
39
40
  user = create(:user, email: 'email@person.com', password: 'secret', password_confirmation: 'secret')
40
41
  visit spree.login_path
41
42
 
@@ -1,24 +1,80 @@
1
- RSpec.feature 'Admin - Reset Password', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin - Reset Password', type: :feature do
3
4
  let!(:store) { create(:store) }
4
5
 
5
6
  background do
6
7
  ActionMailer::Base.default_url_options[:host] = 'http://example.com'
7
8
  end
8
9
 
9
- scenario 'allows a user to supply an email for the password reset' do
10
- user = create(:user, email: 'foobar@example.com', password: 'secret', password_confirmation: 'secret')
11
- visit spree.admin_login_path
12
- click_link 'Forgot Password?'
13
- fill_in 'Email', with: 'foobar@example.com'
14
- click_button 'Reset my password'
15
- expect(page).to have_text 'You will receive an email with instructions'
10
+ context 'when an account with this email address exists' do
11
+ let!(:user) { create(:user, email: 'foobar@example.com', password: 'secret', password_confirmation: 'secret') }
12
+
13
+ scenario 'allows a user to supply an email for the password reset' do
14
+ visit spree.admin_login_path
15
+ click_link 'Forgot Password?'
16
+ fill_in_email
17
+ click_button 'Reset my password'
18
+ expect(page).to have_text 'you will receive an email with instructions'
19
+ end
16
20
  end
17
21
 
18
- scenario 'shows errors if no email is supplied' do
22
+ # Revealing that an admin email address is not found allows an attacker to
23
+ # find admin account email addresses by trying email addresses until this
24
+ # error is not shown.
25
+ scenario 'does not reveal email addresses if they are not found' do
19
26
  visit spree.admin_login_path
20
27
  click_link 'Forgot Password?'
28
+ fill_in_email
21
29
  click_button 'Reset my password'
22
- expect(page).to have_text "Email can't be blank"
30
+ expect(page).to_not have_text "Email not found"
31
+ expect(page).to have_text 'you will receive an email with instructions'
32
+ end
33
+
34
+ def fill_in_email
35
+ fill_in 'Email', with: 'foobar@example.com'
36
+ end
37
+
38
+ context 'password management' do
39
+ let!(:admin) do
40
+ create(:admin_user,
41
+ email: 'admin@example.com',
42
+ password: 'secret',
43
+ password_confirmation: 'secret'
44
+ )
45
+ end
46
+
47
+ let!(:user) do
48
+ create(:user,
49
+ email: 'user@example.com',
50
+ password: 'test123',
51
+ password_confirmation: 'test123'
52
+ )
53
+ end
54
+
55
+ before do
56
+ visit spree.admin_login_path
57
+ fill_in 'Email', with: admin.email
58
+ fill_in 'Password', with: admin.password
59
+ click_button 'Login'
60
+ visit spree.admin_users_path
61
+ end
62
+
63
+ context 'if currently logged-in admin' do
64
+ context "clicks on an user's page" do
65
+ it 'can reset its password' do
66
+ within("#spree_user_#{user.id}") do
67
+ click_link user.email
68
+ end
69
+
70
+ click_button 'Reset password'
71
+ expect(page).to have_content(
72
+ 'If an account with that email address exists, '\
73
+ 'you will receive an email with instructions about '\
74
+ 'how to reset your password in a few minutes.'
75
+ )
76
+ end
77
+ end
78
+ end
23
79
  end
24
80
  end
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Admin products', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin products', type: :feature do
3
4
  context 'as anonymous user' do
4
5
  # Regression test for #1250
5
6
  scenario 'redirects to login page when attempting to access product listing' do
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Admin - Sign In', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin - Sign In', type: :feature do
3
4
  background do
4
5
  @user = create(:user, email: 'email@person.com')
5
6
  visit spree.admin_login_path
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Admin - Sign Out', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin - Sign Out', type: :feature, js: true do
3
4
  given!(:user) do
4
5
  create :user, email: 'email@person.com'
5
6
  end
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Admin Permissions', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin Permissions', type: :feature do
3
4
  context 'orders' do
4
5
  background do
5
6
  user = create(:admin_user, email: 'admin@person.com', password: 'password', password_confirmation: 'password')
@@ -1,7 +1,8 @@
1
- RSpec.feature 'Change email', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Change email', type: :feature do
3
4
  background do
4
- Spree::Auth::Config.set(signout_after_password_change: false)
5
+ stub_spree_preferences(Spree::Auth::Config, signout_after_password_change: false)
5
6
 
6
7
  user = create(:user)
7
8
  visit spree.root_path
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.feature 'Checkout', :js, type: :feature do
2
4
  given!(:store) { create(:store) }
3
5
  given!(:country) { create(:country, name: 'United States', states_required: true) }
@@ -15,17 +17,17 @@ RSpec.feature 'Checkout', :js, type: :feature do
15
17
 
16
18
  background do
17
19
  @product = create(:product, name: 'RoR Mug')
18
- @product.master.stock_items.first.update_column(:count_on_hand, 1)
20
+ @product.master.stock_items.first.set_count_on_hand(1)
19
21
 
20
22
  # Bypass gateway error on checkout | ..or stub a gateway
21
- Spree::Config[:allow_checkout_on_gateway_error] = true
23
+ stub_spree_preferences(allow_checkout_on_gateway_error: true)
22
24
 
23
25
  visit spree.root_path
24
26
  end
25
27
 
26
28
  # Regression test for https://github.com/solidusio/solidus/issues/1588
27
29
  scenario 'leaving and returning to address step' do
28
- Spree::Auth::Config.set(registration_step: true)
30
+ stub_spree_preferences(Spree::Auth::Config, registration_step: true)
29
31
  click_link 'RoR Mug'
30
32
  click_button 'Add To Cart'
31
33
  within('h1') { expect(page).to have_text 'Shopping Cart' }
@@ -58,15 +60,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
58
60
  expect(page).to have_text(/Billing Address/i)
59
61
  expect(page).to have_text(/Shipping Address/i)
60
62
 
61
- str_addr = 'bill_address'
62
- select 'United States', from: "order_#{str_addr}_attributes_country_id"
63
- %w(firstname lastname address1 city zipcode phone).each do |field|
64
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
65
- end
66
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
67
- check 'order_use_billing'
68
-
63
+ fill_addresses_fields_with(address)
69
64
  click_button 'Save and Continue'
65
+
70
66
  click_button 'Save and Continue'
71
67
  click_button 'Save and Continue'
72
68
  click_button 'Place Order'
@@ -90,15 +86,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
90
86
 
91
87
  click_button 'Checkout'
92
88
 
93
- str_addr = 'bill_address'
94
- select 'United States', from: "order_#{str_addr}_attributes_country_id"
95
- %w(firstname lastname address1 city zipcode phone).each do |field|
96
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
97
- end
98
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
99
- check 'order_use_billing'
100
-
89
+ fill_addresses_fields_with(address)
101
90
  click_button 'Save and Continue'
91
+
102
92
  click_button 'Save and Continue'
103
93
  click_button 'Save and Continue'
104
94
  click_button 'Place Order'
@@ -109,7 +99,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
109
99
 
110
100
  # Regression test for #890
111
101
  scenario 'associate an incomplete guest order with user after successful password reset' do
112
- user = create(:user, email: 'email@person.com', password: 'password', password_confirmation: 'password')
102
+ create(:user, email: 'email@person.com', password: 'password', password_confirmation: 'password')
113
103
  click_link 'RoR Mug'
114
104
  click_button 'Add To Cart'
115
105
 
@@ -132,14 +122,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
132
122
  click_link 'Cart'
133
123
  click_button 'Checkout'
134
124
 
135
- str_addr = 'bill_address'
136
- select 'United States', from: "order_#{str_addr}_attributes_country_id"
137
- %w(firstname lastname address1 city zipcode phone).each do |field|
138
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
139
- end
140
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
141
- check 'order_use_billing'
142
-
125
+ fill_addresses_fields_with(address)
143
126
  click_button 'Save and Continue'
144
127
 
145
128
  expect(page).not_to have_text 'Email is invalid'
@@ -161,21 +144,15 @@ RSpec.feature 'Checkout', :js, type: :feature do
161
144
 
162
145
  expect(page).to have_text 'You have signed up successfully.'
163
146
 
164
- str_addr = 'bill_address'
165
- select 'United States', from: "order_#{str_addr}_attributes_country_id"
166
- %w(firstname lastname address1 city zipcode phone).each do |field|
167
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
168
- end
169
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
170
- check 'order_use_billing'
171
-
147
+ fill_addresses_fields_with(address)
172
148
  click_button 'Save and Continue'
149
+
173
150
  click_button 'Save and Continue'
174
151
  click_button 'Save and Continue'
175
152
  click_button 'Place Order'
176
153
 
177
154
  expect(page).to have_text 'Your order has been processed successfully'
178
- expect(Spree::Order.first.user).to eq Spree::User.find_by_email('email@person.com')
155
+ expect(Spree::Order.first.user).to eq Spree::User.find_by(email: 'email@person.com')
179
156
  end
180
157
  end
181
158
  end