solidus_auth_devise 2.2.0 → 2.3.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +326 -0
  3. data/CHANGELOG.md +250 -163
  4. data/Gemfile +4 -5
  5. data/README.md +22 -5
  6. data/Rakefile +2 -0
  7. data/app/mailers/spree/user_mailer.rb +4 -2
  8. data/app/models/spree/auth_configuration.rb +2 -0
  9. data/app/models/spree/user.rb +19 -19
  10. data/config/initializers/devise.rb +11 -3
  11. data/config/initializers/warden.rb +4 -2
  12. data/config/locales/en.yml +3 -1
  13. data/config/routes.rb +5 -11
  14. data/db/default/users.rb +10 -8
  15. data/db/migrate/20101026184949_create_users.rb +9 -7
  16. data/db/migrate/20101026184950_rename_columns_for_devise.rb +3 -0
  17. data/db/migrate/20101214150824_convert_user_remember_field.rb +2 -0
  18. data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -0
  19. data/db/migrate/20120605211305_make_users_email_index_unique.rb +4 -2
  20. data/db/migrate/20140904000425_add_deleted_at_to_users.rb +2 -0
  21. data/db/migrate/20141002154641_add_confirmable_to_users.rb +2 -0
  22. data/db/migrate/20190125170630_add_reset_password_token_index_to_spree_users.rb +4 -2
  23. data/db/seeds.rb +2 -0
  24. data/lib/controllers/backend/spree/admin/base_controller_decorator.rb +20 -0
  25. data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +11 -8
  26. data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +4 -2
  27. data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +11 -8
  28. data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +29 -19
  29. data/lib/controllers/frontend/spree/user_confirmations_controller.rb +2 -0
  30. data/lib/controllers/frontend/spree/user_passwords_controller.rb +4 -1
  31. data/lib/controllers/frontend/spree/user_registrations_controller.rb +4 -0
  32. data/lib/controllers/frontend/spree/user_sessions_controller.rb +2 -0
  33. data/lib/controllers/frontend/spree/users_controller.rb +17 -14
  34. data/lib/generators/solidus/auth/install/install_generator.rb +4 -2
  35. data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +2 -0
  36. data/lib/solidus/auth.rb +2 -0
  37. data/lib/solidus_auth_devise.rb +2 -0
  38. data/lib/spree/auth/devise.rb +3 -1
  39. data/lib/spree/auth/engine.rb +3 -1
  40. data/lib/spree/auth/version.rb +1 -1
  41. data/lib/spree/authentication_helpers.rb +5 -11
  42. data/lib/tasks/auth.rake +3 -1
  43. data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +1 -1
  44. data/lib/views/backend/spree/admin/user_passwords/new.html.erb +1 -3
  45. data/lib/views/backend/spree/admin/user_sessions/new.html.erb +1 -1
  46. data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +1 -1
  47. data/lib/views/frontend/spree/user_passwords/new.html.erb +1 -3
  48. data/solidus_auth_devise.gemspec +16 -6
  49. data/spec/controllers/spree/admin/user_passwords_controller_spec.rb +2 -0
  50. data/spec/controllers/spree/checkout_controller_spec.rb +5 -9
  51. data/spec/controllers/spree/products_controller_spec.rb +2 -1
  52. data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -3
  53. data/spec/controllers/spree/user_registrations_controller_spec.rb +3 -2
  54. data/spec/controllers/spree/user_sessions_controller_spec.rb +14 -0
  55. data/spec/controllers/spree/users_controller_spec.rb +2 -2
  56. data/spec/factories/confirmed_user.rb +5 -3
  57. data/spec/features/account_spec.rb +4 -3
  58. data/spec/features/admin/orders_spec.rb +2 -1
  59. data/spec/features/admin/password_reset_spec.rb +23 -10
  60. data/spec/features/admin/products_spec.rb +2 -1
  61. data/spec/features/admin/sign_in_spec.rb +2 -1
  62. data/spec/features/admin/sign_out_spec.rb +2 -1
  63. data/spec/features/admin_permissions_spec.rb +2 -1
  64. data/spec/features/change_email_spec.rb +3 -2
  65. data/spec/features/checkout_spec.rb +15 -13
  66. data/spec/features/confirmation_spec.rb +2 -0
  67. data/spec/features/order_spec.rb +2 -1
  68. data/spec/features/password_reset_spec.rb +23 -10
  69. data/spec/features/sign_in_spec.rb +2 -1
  70. data/spec/features/sign_out_spec.rb +4 -3
  71. data/spec/features/sign_up_spec.rb +2 -1
  72. data/spec/mailers/user_mailer_spec.rb +2 -1
  73. data/spec/models/order_spec.rb +2 -1
  74. data/spec/models/user_spec.rb +2 -1
  75. data/spec/spec_helper.rb +3 -1
  76. data/spec/support/ability.rb +3 -1
  77. data/spec/support/authentication_helpers.rb +2 -0
  78. data/spec/support/confirm_helpers.rb +4 -2
  79. data/spec/support/email.rb +2 -0
  80. data/spec/support/preferences.rb +10 -2
  81. data/spec/support/spree.rb +2 -0
  82. metadata +94 -35
  83. data/.travis.yml +0 -18
  84. data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +0 -11
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spree/core'
2
4
  require 'devise'
3
5
  require 'devise-encryptable'
@@ -5,7 +7,7 @@ require 'cancan'
5
7
 
6
8
  module Spree
7
9
  module Auth
8
- def self.config(&block)
10
+ def self.config
9
11
  yield(Spree::Auth::Config)
10
12
  end
11
13
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'devise'
2
4
  require 'devise-encryptable'
3
5
 
@@ -7,7 +9,7 @@ module Spree
7
9
  isolate_namespace Spree
8
10
  engine_name 'solidus_auth'
9
11
 
10
- initializer "spree.auth.environment", before: :load_config_initializers do |app|
12
+ initializer "spree.auth.environment", before: :load_config_initializers do |_app|
11
13
  Spree::Auth::Config = Spree::AuthConfiguration.new
12
14
  end
13
15
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Spree
4
4
  module Auth
5
- VERSION = '2.2.0'
5
+ VERSION = '2.3.0'
6
6
  end
7
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spree
2
4
  module AuthenticationHelpers
3
5
  def self.included(receiver)
@@ -17,17 +19,9 @@ module Spree
17
19
  end
18
20
 
19
21
  if SolidusSupport.frontend_available?
20
- def spree_login_path
21
- spree.login_path
22
- end
23
-
24
- def spree_signup_path
25
- spree.signup_path
26
- end
27
-
28
- def spree_logout_path
29
- spree.logout_path
30
- end
22
+ delegate :login_path, :signup_path, :logout_path,
23
+ to: :spree,
24
+ prefix: :spree
31
25
  end
32
26
  end
33
27
  end
data/lib/tasks/auth.rake CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :spree_auth do
2
4
  namespace :admin do
3
5
  desc "Create admin username and password"
4
- task :create => :environment do
6
+ task create: :environment do
5
7
  require File.join(File.dirname(__FILE__), '..', '..', 'db', 'default', 'users.rb')
6
8
  puts "Done!"
7
9
  end
@@ -14,7 +14,7 @@
14
14
  <% end %>
15
15
  </li>
16
16
  <li data-hook="user-logout-link">
17
- <%= link_to spree.admin_logout_path do %>
17
+ <%= link_to spree.admin_logout_path, method: Devise.sign_out_via do %>
18
18
  <i class='fa fa-sign-out'></i>
19
19
  <%= I18n.t('spree.logout') %>
20
20
  <% end %>
@@ -1,5 +1,3 @@
1
- <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
-
3
1
  <div id="forgot-password">
4
2
  <h6><%= I18n.t('spree.forgot_password') %></h6>
5
3
 
@@ -8,7 +6,7 @@
8
6
  <%= form_for Spree::User.new, as: :spree_user, url: spree.admin_reset_password_path do |f| %>
9
7
  <p>
10
8
  <%= f.label :email, I18n.t('spree.email') %><br />
11
- <%= f.email_field :email %>
9
+ <%= f.email_field :email, required: true %>
12
10
  </p>
13
11
  <p>
14
12
  <%= f.submit I18n.t('spree.reset_password'), class: 'button primary' %>
@@ -22,7 +22,7 @@
22
22
  <%= f.label :remember_me, I18n.t('spree.remember_me') %>
23
23
  </p>
24
24
 
25
- <p><%= f.submit I18n.t('spree.login'), class: 'button primary', tabindex: 4 %></p>
25
+ <p><%= f.submit I18n.t('spree.login'), class: 'btn btn-primary', tabindex: 4 %></p>
26
26
  <% end %>
27
27
  <%= I18n.t('spree.or') %>
28
28
  <%= link_to I18n.t('spree.forgot_password'), spree.admin_recover_password_path %>
@@ -1,6 +1,6 @@
1
1
  <% if spree_current_user %>
2
2
  <li><%= link_to I18n.t('spree.my_account'), spree.account_path %></li>
3
- <li><%= link_to I18n.t('spree.logout'), spree.logout_path %></li>
3
+ <li><%= link_to I18n.t('spree.logout'), spree.logout_path, method: Devise.sign_out_via %></li>
4
4
  <% else %>
5
5
  <li id="link-to-login"><%= link_to I18n.t('spree.login'), spree.login_path %></li>
6
6
  <% end %>
@@ -1,5 +1,3 @@
1
- <%= render partial: 'spree/shared/error_messages', locals: { target: @spree_user } %>
2
-
3
1
  <div id="forgot-password">
4
2
  <h6><%= I18n.t('spree.forgot_password') %></h6>
5
3
 
@@ -8,7 +6,7 @@
8
6
  <%= form_for Spree::User.new, as: :spree_user, url: spree.reset_password_path do |f| %>
9
7
  <p>
10
8
  <%= f.label :email, I18n.t('spree.email') %><br />
11
- <%= f.email_field :email %>
9
+ <%= f.email_field :email, required: true %>
12
10
  </p>
13
11
  <p>
14
12
  <%= f.submit I18n.t('spree.reset_password'), class: 'button primary' %>
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  $:.unshift File.expand_path('lib', __dir__)
4
4
  require 'spree/auth/version'
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  s.author = 'Solidus Team'
14
14
  s.email = 'contact@solidus.io'
15
15
 
16
- s.required_ruby_version = ">= 2.1"
17
- s.license = %q{BSD-3}
16
+ s.required_ruby_version = ">= 2.3"
17
+ s.license = 'BSD-3'
18
18
 
19
19
  s.files = `git ls-files`.split("\n")
20
20
  s.test_files = `git ls-files -- spec/*`.split("\n")
@@ -23,10 +23,16 @@ Gem::Specification.new do |s|
23
23
 
24
24
  solidus_version = [">= 1.2.0", "< 3"]
25
25
 
26
- s.add_dependency "solidus_core", solidus_version
27
- s.add_dependency "solidus_support", ">= 0.1.3"
26
+ s.post_install_message = "
27
+ NOTE: Rails 6 has removed secret_token in favor of secret_key_base, which was deprecated in
28
+ Rails 5.2. solidus_auth_devise will keep using secret_token, when present, as the pepper. If
29
+ secret_token is undefined or not available, secret_key_base will be used instead.
30
+ ".strip.gsub(/ +/, ' ')
31
+
28
32
  s.add_dependency "devise", '~> 4.1'
29
33
  s.add_dependency "devise-encryptable", "0.2.0"
34
+ s.add_dependency "solidus_core", solidus_version
35
+ s.add_dependency "solidus_support", ">= 0.1.3"
30
36
 
31
37
  s.add_development_dependency "capybara", "~> 2.14"
32
38
  s.add_development_dependency "capybara-screenshot"
@@ -34,9 +40,13 @@ Gem::Specification.new do |s|
34
40
  s.add_development_dependency "database_cleaner", "~> 1.6"
35
41
  s.add_development_dependency "ffaker"
36
42
  s.add_development_dependency "gem-release", "~> 2.0"
37
- s.add_development_dependency "poltergeist", "~> 1.5"
43
+ s.add_development_dependency "github_changelog_generator", "~> 1.14"
38
44
  s.add_development_dependency "rspec-rails", "~> 3.3"
45
+ s.add_development_dependency "rubocop", "~> 0.71"
46
+ s.add_development_dependency "rubocop-performance", "~> 1.4"
47
+ s.add_development_dependency "rubocop-rails", "~> 2.2"
39
48
  s.add_development_dependency "sass-rails"
49
+ s.add_development_dependency "selenium-webdriver", "~> 3.142"
40
50
  s.add_development_dependency "shoulda-matchers", "~> 3.1"
41
51
  s.add_development_dependency "simplecov", "~> 0.14"
42
52
  s.add_development_dependency "solidus_backend", solidus_version
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe Spree::Admin::UserPasswordsController, type: :controller do
2
4
  before { @request.env['devise.mapping'] = Devise.mappings[:spree_user] }
3
5
 
@@ -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 }
@@ -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
 
@@ -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,5 +1,6 @@
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) }
@@ -22,7 +23,6 @@ RSpec.describe Spree::UsersController, type: :controller do
22
23
  before { sign_in(user) }
23
24
 
24
25
  context 'when updating own account' do
25
-
26
26
  context 'when user updated successfuly' do
27
27
  before { put :update, params: { user: { email: 'mynew@email-address.com' } } }
28
28
 
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  factory :confirmed_user, parent: :user do
3
- confirmed_at { Time.now }
4
- confirmation_sent_at { Time.now }
5
+ confirmed_at { Time.zone.now }
6
+ confirmation_sent_at { Time.zone.now }
5
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,5 +1,6 @@
1
- RSpec.feature 'Admin orders', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Admin orders', type: :feature do
3
4
  background do
4
5
  create(:store)
5
6
  sign_in_as! create(:admin_user)
@@ -1,24 +1,37 @@
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'
23
36
  end
24
37
  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' }
@@ -61,9 +63,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
61
63
  str_addr = 'bill_address'
62
64
  select 'United States', from: "order_#{str_addr}_attributes_country_id"
63
65
  %w(firstname lastname address1 city zipcode phone).each do |field|
64
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
66
+ fill_in "order_#{str_addr}_attributes_#{field}", with: address.send(field).to_s
65
67
  end
66
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
68
+ select address.state.name.to_s, from: "order_#{str_addr}_attributes_state_id"
67
69
  check 'order_use_billing'
68
70
 
69
71
  click_button 'Save and Continue'
@@ -93,9 +95,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
93
95
  str_addr = 'bill_address'
94
96
  select 'United States', from: "order_#{str_addr}_attributes_country_id"
95
97
  %w(firstname lastname address1 city zipcode phone).each do |field|
96
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
98
+ fill_in "order_#{str_addr}_attributes_#{field}", with: address.send(field).to_s
97
99
  end
98
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
100
+ select address.state.name.to_s, from: "order_#{str_addr}_attributes_state_id"
99
101
  check 'order_use_billing'
100
102
 
101
103
  click_button 'Save and Continue'
@@ -109,7 +111,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
109
111
 
110
112
  # Regression test for #890
111
113
  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')
114
+ create(:user, email: 'email@person.com', password: 'password', password_confirmation: 'password')
113
115
  click_link 'RoR Mug'
114
116
  click_button 'Add To Cart'
115
117
 
@@ -135,9 +137,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
135
137
  str_addr = 'bill_address'
136
138
  select 'United States', from: "order_#{str_addr}_attributes_country_id"
137
139
  %w(firstname lastname address1 city zipcode phone).each do |field|
138
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
140
+ fill_in "order_#{str_addr}_attributes_#{field}", with: address.send(field).to_s
139
141
  end
140
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
142
+ select address.state.name.to_s, from: "order_#{str_addr}_attributes_state_id"
141
143
  check 'order_use_billing'
142
144
 
143
145
  click_button 'Save and Continue'
@@ -164,9 +166,9 @@ RSpec.feature 'Checkout', :js, type: :feature do
164
166
  str_addr = 'bill_address'
165
167
  select 'United States', from: "order_#{str_addr}_attributes_country_id"
166
168
  %w(firstname lastname address1 city zipcode phone).each do |field|
167
- fill_in "order_#{str_addr}_attributes_#{field}", with: "#{address.send(field)}"
169
+ fill_in "order_#{str_addr}_attributes_#{field}", with: address.send(field).to_s
168
170
  end
169
- select "#{address.state.name}", from: "order_#{str_addr}_attributes_state_id"
171
+ select address.state.name.to_s, from: "order_#{str_addr}_attributes_state_id"
170
172
  check 'order_use_billing'
171
173
 
172
174
  click_button 'Save and Continue'
@@ -175,7 +177,7 @@ RSpec.feature 'Checkout', :js, type: :feature do
175
177
  click_button 'Place Order'
176
178
 
177
179
  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')
180
+ expect(Spree::Order.first.user).to eq Spree::User.find_by(email: 'email@person.com')
179
181
  end
180
182
  end
181
183
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  feature 'Confirmation' do
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Orders', :js, type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Orders', :js, type: :feature do
3
4
  scenario 'allow a user to view their cart at any time' do
4
5
  visit spree.cart_path
5
6
  expect(page).to have_text 'Your cart is empty'
@@ -1,24 +1,37 @@
1
- RSpec.feature 'Reset Password', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature '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 'allow 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.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.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
+ # Test that we are extending the functionality from
23
+ # https://github.com/solidusio/solidus_auth_devise/pull/155
24
+ # to the non-admin login
25
+ scenario 'does not reveal email addresses if they are not found' do
19
26
  visit spree.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'
23
36
  end
24
37
  end
@@ -1,5 +1,6 @@
1
- RSpec.feature 'Sign In', type: :feature do
1
+ # frozen_string_literal: true
2
2
 
3
+ RSpec.feature 'Sign In', type: :feature do
3
4
  background do
4
5
  @user = create(:user, email: 'email@person.com', password: 'secret', password_confirmation: 'secret')
5
6
  visit spree.login_path