devise 3.2.2 → 4.6.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGELOG.md +242 -978
- data/MIT-LICENSE +1 -1
- data/README.md +371 -100
- data/app/controllers/devise/confirmations_controller.rb +11 -5
- data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
- data/app/controllers/devise/passwords_controller.rb +21 -8
- data/app/controllers/devise/registrations_controller.rb +59 -26
- data/app/controllers/devise/sessions_controller.rb +47 -17
- data/app/controllers/devise/unlocks_controller.rb +9 -4
- data/app/controllers/devise_controller.rb +67 -31
- data/app/helpers/devise_helper.rb +12 -19
- data/app/mailers/devise/mailer.rb +10 -0
- data/app/views/devise/confirmations/new.html.erb +9 -5
- data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/devise/passwords/edit.html.erb +16 -7
- data/app/views/devise/passwords/new.html.erb +9 -5
- data/app/views/devise/registrations/edit.html.erb +29 -15
- data/app/views/devise/registrations/new.html.erb +20 -9
- data/app/views/devise/sessions/new.html.erb +19 -10
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/{_links.erb → _links.html.erb} +9 -9
- data/app/views/devise/unlocks/new.html.erb +9 -5
- data/config/locales/en.yml +23 -17
- data/lib/devise/controllers/helpers.rb +112 -32
- data/lib/devise/controllers/rememberable.rb +15 -6
- data/lib/devise/controllers/scoped_views.rb +3 -1
- data/lib/devise/controllers/sign_in_out.rb +42 -26
- data/lib/devise/controllers/store_location.rb +31 -5
- data/lib/devise/controllers/url_helpers.rb +9 -7
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +24 -0
- data/lib/devise/failure_app.rb +125 -39
- data/lib/devise/hooks/activatable.rb +7 -6
- data/lib/devise/hooks/csrf_cleaner.rb +5 -1
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +7 -2
- data/lib/devise/hooks/proxy.rb +4 -2
- data/lib/devise/hooks/rememberable.rb +4 -2
- data/lib/devise/hooks/timeoutable.rb +16 -9
- data/lib/devise/hooks/trackable.rb +3 -1
- data/lib/devise/mailers/helpers.rb +15 -12
- data/lib/devise/mapping.rb +8 -2
- data/lib/devise/models/authenticatable.rb +82 -56
- data/lib/devise/models/confirmable.rb +125 -42
- data/lib/devise/models/database_authenticatable.rb +110 -32
- data/lib/devise/models/lockable.rb +30 -17
- data/lib/devise/models/omniauthable.rb +3 -1
- data/lib/devise/models/recoverable.rb +62 -26
- data/lib/devise/models/registerable.rb +4 -0
- data/lib/devise/models/rememberable.rb +62 -33
- data/lib/devise/models/timeoutable.rb +4 -8
- data/lib/devise/models/trackable.rb +20 -4
- data/lib/devise/models/validatable.rb +16 -9
- data/lib/devise/models.rb +3 -1
- data/lib/devise/modules.rb +12 -10
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +14 -5
- data/lib/devise/omniauth.rb +2 -0
- data/lib/devise/orm/active_record.rb +5 -1
- data/lib/devise/orm/mongoid.rb +6 -2
- data/lib/devise/parameter_filter.rb +4 -0
- data/lib/devise/parameter_sanitizer.rb +139 -65
- data/lib/devise/rails/routes.rb +147 -116
- data/lib/devise/rails/warden_compat.rb +3 -10
- data/lib/devise/rails.rb +10 -13
- data/lib/devise/secret_key_finder.rb +27 -0
- data/lib/devise/strategies/authenticatable.rb +20 -9
- data/lib/devise/strategies/base.rb +3 -1
- data/lib/devise/strategies/database_authenticatable.rb +14 -6
- data/lib/devise/strategies/rememberable.rb +15 -3
- data/lib/devise/test/controller_helpers.rb +165 -0
- data/lib/devise/test/integration_helpers.rb +63 -0
- data/lib/devise/test_helpers.rb +7 -124
- data/lib/devise/time_inflector.rb +4 -2
- data/lib/devise/token_generator.rb +3 -41
- data/lib/devise/version.rb +3 -1
- data/lib/devise.rb +111 -84
- data/lib/generators/active_record/devise_generator.rb +49 -12
- data/lib/generators/active_record/templates/migration.rb +9 -7
- data/lib/generators/active_record/templates/migration_existing.rb +9 -7
- data/lib/generators/devise/controllers_generator.rb +46 -0
- data/lib/generators/devise/devise_generator.rb +7 -5
- data/lib/generators/devise/install_generator.rb +21 -0
- data/lib/generators/devise/orm_helpers.rb +10 -21
- data/lib/generators/devise/views_generator.rb +49 -28
- data/lib/generators/mongoid/devise_generator.rb +21 -19
- data/lib/generators/templates/README +5 -12
- data/lib/generators/templates/controllers/README +14 -0
- data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
- data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
- data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
- data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
- data/lib/generators/templates/devise.rb +81 -36
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +3 -0
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +6 -2
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +9 -4
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +5 -2
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +14 -6
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +12 -4
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +11 -6
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +5 -2
- metadata +52 -280
- data/.gitignore +0 -10
- data/.travis.yml +0 -20
- data/.yardopts +0 -9
- data/CONTRIBUTING.md +0 -14
- data/Gemfile +0 -31
- data/Gemfile.lock +0 -160
- data/Rakefile +0 -35
- data/devise.gemspec +0 -27
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-3.2.x +0 -31
- data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
- data/test/controllers/custom_strategy_test.rb +0 -62
- data/test/controllers/helpers_test.rb +0 -276
- data/test/controllers/internal_helpers_test.rb +0 -120
- data/test/controllers/passwords_controller_test.rb +0 -31
- data/test/controllers/sessions_controller_test.rb +0 -99
- data/test/controllers/url_helpers_test.rb +0 -59
- data/test/delegator_test.rb +0 -19
- data/test/devise_test.rb +0 -94
- data/test/failure_app_test.rb +0 -232
- data/test/generators/active_record_generator_test.rb +0 -103
- data/test/generators/devise_generator_test.rb +0 -39
- data/test/generators/install_generator_test.rb +0 -13
- data/test/generators/mongoid_generator_test.rb +0 -23
- data/test/generators/views_generator_test.rb +0 -67
- data/test/helpers/devise_helper_test.rb +0 -51
- data/test/integration/authenticatable_test.rb +0 -713
- data/test/integration/confirmable_test.rb +0 -284
- data/test/integration/database_authenticatable_test.rb +0 -84
- data/test/integration/http_authenticatable_test.rb +0 -105
- data/test/integration/lockable_test.rb +0 -239
- data/test/integration/omniauthable_test.rb +0 -133
- data/test/integration/recoverable_test.rb +0 -334
- data/test/integration/registerable_test.rb +0 -349
- data/test/integration/rememberable_test.rb +0 -167
- data/test/integration/timeoutable_test.rb +0 -183
- data/test/integration/trackable_test.rb +0 -92
- data/test/mailers/confirmation_instructions_test.rb +0 -115
- data/test/mailers/reset_password_instructions_test.rb +0 -96
- data/test/mailers/unlock_instructions_test.rb +0 -91
- data/test/mapping_test.rb +0 -127
- data/test/models/authenticatable_test.rb +0 -13
- data/test/models/confirmable_test.rb +0 -454
- data/test/models/database_authenticatable_test.rb +0 -249
- data/test/models/lockable_test.rb +0 -298
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -184
- data/test/models/registerable_test.rb +0 -7
- data/test/models/rememberable_test.rb +0 -183
- data/test/models/serializable_test.rb +0 -49
- data/test/models/timeoutable_test.rb +0 -51
- data/test/models/trackable_test.rb +0 -13
- data/test/models/validatable_test.rb +0 -127
- data/test/models_test.rb +0 -144
- data/test/omniauth/config_test.rb +0 -57
- data/test/omniauth/url_helpers_test.rb +0 -54
- data/test/orm/active_record.rb +0 -10
- data/test/orm/mongoid.rb +0 -13
- data/test/parameter_sanitizer_test.rb +0 -81
- data/test/rails_app/Rakefile +0 -6
- data/test/rails_app/app/active_record/admin.rb +0 -6
- data/test/rails_app/app/active_record/shim.rb +0 -2
- data/test/rails_app/app/active_record/user.rb +0 -6
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
- data/test/rails_app/app/controllers/admins_controller.rb +0 -11
- data/test/rails_app/app/controllers/application_controller.rb +0 -9
- data/test/rails_app/app/controllers/home_controller.rb +0 -25
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
- data/test/rails_app/app/controllers/users_controller.rb +0 -31
- data/test/rails_app/app/helpers/application_helper.rb +0 -3
- data/test/rails_app/app/mailers/users/mailer.rb +0 -12
- data/test/rails_app/app/mongoid/admin.rb +0 -29
- data/test/rails_app/app/mongoid/shim.rb +0 -23
- data/test/rails_app/app/mongoid/user.rb +0 -39
- data/test/rails_app/app/views/admins/index.html.erb +0 -1
- data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/home/index.html.erb +0 -1
- data/test/rails_app/app/views/home/join.html.erb +0 -1
- data/test/rails_app/app/views/home/private.html.erb +0 -1
- data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/layouts/application.html.erb +0 -24
- data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
- data/test/rails_app/app/views/users/index.html.erb +0 -1
- data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
- data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
- data/test/rails_app/bin/bundle +0 -3
- data/test/rails_app/bin/rails +0 -4
- data/test/rails_app/bin/rake +0 -4
- data/test/rails_app/config/application.rb +0 -40
- data/test/rails_app/config/boot.rb +0 -14
- data/test/rails_app/config/database.yml +0 -18
- data/test/rails_app/config/environment.rb +0 -5
- data/test/rails_app/config/environments/development.rb +0 -30
- data/test/rails_app/config/environments/production.rb +0 -80
- data/test/rails_app/config/environments/test.rb +0 -36
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/rails_app/config/initializers/devise.rb +0 -181
- data/test/rails_app/config/initializers/inflections.rb +0 -2
- data/test/rails_app/config/initializers/secret_token.rb +0 -8
- data/test/rails_app/config/initializers/session_store.rb +0 -1
- data/test/rails_app/config/routes.rb +0 -104
- data/test/rails_app/config.ru +0 -4
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
- data/test/rails_app/db/schema.rb +0 -55
- data/test/rails_app/lib/shared_admin.rb +0 -17
- data/test/rails_app/lib/shared_user.rb +0 -29
- data/test/rails_app/public/404.html +0 -26
- data/test/rails_app/public/422.html +0 -26
- data/test/rails_app/public/500.html +0 -26
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/routes_test.rb +0 -250
- data/test/support/assertions.rb +0 -40
- data/test/support/helpers.rb +0 -70
- data/test/support/integration.rb +0 -92
- data/test/support/locale/en.yml +0 -8
- data/test/support/webrat/integrations/rails.rb +0 -24
- data/test/test_helper.rb +0 -27
- data/test/test_helpers_test.rb +0 -173
- data/test/test_models.rb +0 -33
@@ -1,334 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class PasswordTest < ActionDispatch::IntegrationTest
|
4
|
-
|
5
|
-
def visit_new_password_path
|
6
|
-
visit new_user_session_path
|
7
|
-
click_link 'Forgot your password?'
|
8
|
-
end
|
9
|
-
|
10
|
-
def request_forgot_password(&block)
|
11
|
-
visit_new_password_path
|
12
|
-
assert_response :success
|
13
|
-
assert_not warden.authenticated?(:user)
|
14
|
-
|
15
|
-
fill_in 'email', :with => 'user@test.com'
|
16
|
-
yield if block_given?
|
17
|
-
|
18
|
-
Devise.stubs(:friendly_token).returns("abcdef")
|
19
|
-
click_button 'Send me reset password instructions'
|
20
|
-
end
|
21
|
-
|
22
|
-
def reset_password(options={}, &block)
|
23
|
-
unless options[:visit] == false
|
24
|
-
visit edit_user_password_path(:reset_password_token => options[:reset_password_token] || "abcdef")
|
25
|
-
assert_response :success
|
26
|
-
end
|
27
|
-
|
28
|
-
fill_in 'New password', :with => '987654321'
|
29
|
-
fill_in 'Confirm new password', :with => '987654321'
|
30
|
-
yield if block_given?
|
31
|
-
click_button 'Change my password'
|
32
|
-
end
|
33
|
-
|
34
|
-
test 'reset password with email of different case should succeed when email is in the list of case insensitive keys' do
|
35
|
-
create_user(:email => 'Foo@Bar.com')
|
36
|
-
|
37
|
-
request_forgot_password do
|
38
|
-
fill_in 'email', :with => 'foo@bar.com'
|
39
|
-
end
|
40
|
-
|
41
|
-
assert_current_url '/users/sign_in'
|
42
|
-
assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
|
43
|
-
end
|
44
|
-
|
45
|
-
test 'reset password with email should send an email from a custom mailer' do
|
46
|
-
create_user(:email => 'Foo@Bar.com')
|
47
|
-
|
48
|
-
User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
|
49
|
-
request_forgot_password do
|
50
|
-
fill_in 'email', :with => 'foo@bar.com'
|
51
|
-
end
|
52
|
-
|
53
|
-
mail = ActionMailer::Base.deliveries.last
|
54
|
-
assert_equal ['custom@example.com'], mail.from
|
55
|
-
assert_match edit_user_password_path(reset_password_token: 'abcdef'), mail.body.encoded
|
56
|
-
end
|
57
|
-
|
58
|
-
test 'reset password with email of different case should fail when email is NOT the list of case insensitive keys' do
|
59
|
-
swap Devise, :case_insensitive_keys => [] do
|
60
|
-
create_user(:email => 'Foo@Bar.com')
|
61
|
-
|
62
|
-
request_forgot_password do
|
63
|
-
fill_in 'email', :with => 'foo@bar.com'
|
64
|
-
end
|
65
|
-
|
66
|
-
assert_response :success
|
67
|
-
assert_current_url '/users/password'
|
68
|
-
assert_have_selector "input[type=email][value='foo@bar.com']"
|
69
|
-
assert_contain 'not found'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
test 'reset password with email with extra whitespace should succeed when email is in the list of strip whitespace keys' do
|
74
|
-
create_user(:email => 'foo@bar.com')
|
75
|
-
|
76
|
-
request_forgot_password do
|
77
|
-
fill_in 'email', :with => ' foo@bar.com '
|
78
|
-
end
|
79
|
-
|
80
|
-
assert_current_url '/users/sign_in'
|
81
|
-
assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
|
82
|
-
end
|
83
|
-
|
84
|
-
test 'reset password with email with extra whitespace should fail when email is NOT the list of strip whitespace keys' do
|
85
|
-
swap Devise, :strip_whitespace_keys => [] do
|
86
|
-
create_user(:email => 'foo@bar.com')
|
87
|
-
|
88
|
-
request_forgot_password do
|
89
|
-
fill_in 'email', :with => ' foo@bar.com '
|
90
|
-
end
|
91
|
-
|
92
|
-
assert_response :success
|
93
|
-
assert_current_url '/users/password'
|
94
|
-
assert_have_selector "input[type=email][value=' foo@bar.com ']"
|
95
|
-
assert_contain 'not found'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
test 'authenticated user should not be able to visit forgot password page' do
|
100
|
-
sign_in_as_user
|
101
|
-
assert warden.authenticated?(:user)
|
102
|
-
|
103
|
-
get new_user_password_path
|
104
|
-
|
105
|
-
assert_response :redirect
|
106
|
-
assert_redirected_to root_path
|
107
|
-
end
|
108
|
-
|
109
|
-
test 'not authenticated user should be able to request a forgot password' do
|
110
|
-
create_user
|
111
|
-
request_forgot_password
|
112
|
-
|
113
|
-
assert_current_url '/users/sign_in'
|
114
|
-
assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
|
115
|
-
end
|
116
|
-
|
117
|
-
test 'not authenticated user with invalid email should receive an error message' do
|
118
|
-
request_forgot_password do
|
119
|
-
fill_in 'email', :with => 'invalid.test@test.com'
|
120
|
-
end
|
121
|
-
|
122
|
-
assert_response :success
|
123
|
-
assert_current_url '/users/password'
|
124
|
-
assert_have_selector "input[type=email][value='invalid.test@test.com']"
|
125
|
-
assert_contain 'not found'
|
126
|
-
end
|
127
|
-
|
128
|
-
test 'authenticated user should not be able to visit edit password page' do
|
129
|
-
sign_in_as_user
|
130
|
-
get edit_user_password_path
|
131
|
-
assert_response :redirect
|
132
|
-
assert_redirected_to root_path
|
133
|
-
assert warden.authenticated?(:user)
|
134
|
-
end
|
135
|
-
|
136
|
-
test 'not authenticated user without a reset password token should not be able to visit the page' do
|
137
|
-
get edit_user_password_path
|
138
|
-
assert_response :redirect
|
139
|
-
assert_redirected_to "/users/sign_in"
|
140
|
-
end
|
141
|
-
|
142
|
-
test 'not authenticated user with invalid reset password token should not be able to change his password' do
|
143
|
-
user = create_user
|
144
|
-
reset_password :reset_password_token => 'invalid_reset_password'
|
145
|
-
|
146
|
-
assert_response :success
|
147
|
-
assert_current_url '/users/password'
|
148
|
-
assert_have_selector '#error_explanation'
|
149
|
-
assert_contain /Reset password token(.*)invalid/
|
150
|
-
assert_not user.reload.valid_password?('987654321')
|
151
|
-
end
|
152
|
-
|
153
|
-
test 'not authenticated user with valid reset password token but invalid password should not be able to change his password' do
|
154
|
-
user = create_user
|
155
|
-
request_forgot_password
|
156
|
-
reset_password do
|
157
|
-
fill_in 'Confirm new password', :with => 'other_password'
|
158
|
-
end
|
159
|
-
|
160
|
-
assert_response :success
|
161
|
-
assert_current_url '/users/password'
|
162
|
-
assert_have_selector '#error_explanation'
|
163
|
-
assert_contain Devise.rails4? ?
|
164
|
-
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
165
|
-
assert_not user.reload.valid_password?('987654321')
|
166
|
-
end
|
167
|
-
|
168
|
-
test 'not authenticated user with valid data should be able to change his password' do
|
169
|
-
user = create_user
|
170
|
-
request_forgot_password
|
171
|
-
reset_password
|
172
|
-
|
173
|
-
assert_current_url '/'
|
174
|
-
assert_contain 'Your password was changed successfully. You are now signed in.'
|
175
|
-
assert user.reload.valid_password?('987654321')
|
176
|
-
end
|
177
|
-
|
178
|
-
test 'after entering invalid data user should still be able to change his password' do
|
179
|
-
user = create_user
|
180
|
-
request_forgot_password
|
181
|
-
|
182
|
-
reset_password { fill_in 'Confirm new password', :with => 'other_password' }
|
183
|
-
assert_response :success
|
184
|
-
assert_have_selector '#error_explanation'
|
185
|
-
assert_not user.reload.valid_password?('987654321')
|
186
|
-
|
187
|
-
reset_password :visit => false
|
188
|
-
assert_contain 'Your password was changed successfully.'
|
189
|
-
assert user.reload.valid_password?('987654321')
|
190
|
-
end
|
191
|
-
|
192
|
-
test 'sign in user automatically after changing its password' do
|
193
|
-
create_user
|
194
|
-
request_forgot_password
|
195
|
-
reset_password
|
196
|
-
|
197
|
-
assert warden.authenticated?(:user)
|
198
|
-
end
|
199
|
-
|
200
|
-
test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
|
201
|
-
[:none, :time].each do |strategy|
|
202
|
-
swap Devise, :unlock_strategy => strategy do
|
203
|
-
user = create_user(:locked => true)
|
204
|
-
request_forgot_password
|
205
|
-
reset_password
|
206
|
-
|
207
|
-
assert_contain 'Your password was changed successfully.'
|
208
|
-
assert_not_contain 'You are now signed in.'
|
209
|
-
assert_equal new_user_session_path, @request.path
|
210
|
-
assert !warden.authenticated?(:user)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
|
216
|
-
swap Devise, :unlock_strategy => :email do
|
217
|
-
user = create_user(:locked => true)
|
218
|
-
request_forgot_password
|
219
|
-
reset_password
|
220
|
-
|
221
|
-
assert_contain 'Your password was changed successfully.'
|
222
|
-
assert !user.reload.access_locked?
|
223
|
-
assert warden.authenticated?(:user)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
|
228
|
-
swap Devise, :unlock_strategy => :both do
|
229
|
-
user = create_user(:locked => true)
|
230
|
-
request_forgot_password
|
231
|
-
reset_password
|
232
|
-
|
233
|
-
assert_contain 'Your password was changed successfully.'
|
234
|
-
assert !user.reload.access_locked?
|
235
|
-
assert warden.authenticated?(:user)
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
test 'reset password request with valid E-Mail in XML format should return valid response' do
|
240
|
-
create_user
|
241
|
-
post user_password_path(:format => 'xml'), :user => {:email => "user@test.com"}
|
242
|
-
assert_response :success
|
243
|
-
assert_equal response.body, { }.to_xml
|
244
|
-
end
|
245
|
-
|
246
|
-
test 'reset password request with invalid E-Mail in XML format should return valid response' do
|
247
|
-
create_user
|
248
|
-
post user_password_path(:format => 'xml'), :user => {:email => "invalid.test@test.com"}
|
249
|
-
assert_response :unprocessable_entity
|
250
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
251
|
-
end
|
252
|
-
|
253
|
-
test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
|
254
|
-
swap Devise, :paranoid => true do
|
255
|
-
create_user
|
256
|
-
post user_password_path(:format => 'xml'), :user => {:email => "invalid@test.com"}
|
257
|
-
assert_response :success
|
258
|
-
assert_equal response.body, { }.to_xml
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
test 'change password with valid parameters in XML format should return valid response' do
|
263
|
-
create_user
|
264
|
-
request_forgot_password
|
265
|
-
put user_password_path(:format => 'xml'), :user => {
|
266
|
-
:reset_password_token => 'abcdef', :password => '987654321', :password_confirmation => '987654321'
|
267
|
-
}
|
268
|
-
assert_response :success
|
269
|
-
assert warden.authenticated?(:user)
|
270
|
-
end
|
271
|
-
|
272
|
-
test 'change password with invalid token in XML format should return invalid response' do
|
273
|
-
create_user
|
274
|
-
request_forgot_password
|
275
|
-
put user_password_path(:format => 'xml'), :user => {:reset_password_token => 'invalid.token', :password => '987654321', :password_confirmation => '987654321'}
|
276
|
-
assert_response :unprocessable_entity
|
277
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
278
|
-
end
|
279
|
-
|
280
|
-
test 'change password with invalid new password in XML format should return invalid response' do
|
281
|
-
user = create_user
|
282
|
-
request_forgot_password
|
283
|
-
put user_password_path(:format => 'xml'), :user => {:reset_password_token => user.reload.reset_password_token, :password => '', :password_confirmation => '987654321'}
|
284
|
-
assert_response :unprocessable_entity
|
285
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
286
|
-
end
|
287
|
-
|
288
|
-
test "when using json requests to ask a confirmable request, should not return the object" do
|
289
|
-
user = create_user(:confirm => false)
|
290
|
-
|
291
|
-
post user_password_path(:format => :json), :user => { :email => user.email }
|
292
|
-
|
293
|
-
assert_response :success
|
294
|
-
assert_equal response.body, "{}"
|
295
|
-
end
|
296
|
-
|
297
|
-
test "when in paranoid mode and with an invalid e-mail, asking to reset a password should display a message that does not indicates that the e-mail does not exists in the database" do
|
298
|
-
swap Devise, :paranoid => true do
|
299
|
-
visit_new_password_path
|
300
|
-
fill_in "email", :with => "arandomemail@test.com"
|
301
|
-
click_button 'Send me reset password instructions'
|
302
|
-
|
303
|
-
assert_not_contain "1 error prohibited this user from being saved:"
|
304
|
-
assert_not_contain "Email not found"
|
305
|
-
assert_contain "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
|
306
|
-
assert_current_url "/users/sign_in"
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
test "when in paranoid mode and with a valid e-mail, asking to reset password should display a message that does not indicates that the email exists in the database and redirect to the failure route" do
|
311
|
-
swap Devise, :paranoid => true do
|
312
|
-
user = create_user
|
313
|
-
visit_new_password_path
|
314
|
-
fill_in 'email', :with => user.email
|
315
|
-
click_button 'Send me reset password instructions'
|
316
|
-
|
317
|
-
assert_contain "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
|
318
|
-
assert_current_url "/users/sign_in"
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
test "after recovering a password, should set failed attempts to 0" do
|
323
|
-
user = create_user
|
324
|
-
user.update_attribute(:failed_attempts, 10)
|
325
|
-
|
326
|
-
assert_equal 10, user.failed_attempts
|
327
|
-
request_forgot_password
|
328
|
-
reset_password
|
329
|
-
|
330
|
-
assert warden.authenticated?(:user)
|
331
|
-
user.reload
|
332
|
-
assert_equal 0, user.failed_attempts
|
333
|
-
end
|
334
|
-
end
|
@@ -1,349 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class RegistrationTest < ActionDispatch::IntegrationTest
|
4
|
-
|
5
|
-
test 'a guest admin should be able to sign in successfully' do
|
6
|
-
get new_admin_session_path
|
7
|
-
click_link 'Sign up'
|
8
|
-
|
9
|
-
assert_template 'registrations/new'
|
10
|
-
|
11
|
-
fill_in 'email', :with => 'new_user@test.com'
|
12
|
-
fill_in 'password', :with => 'new_user123'
|
13
|
-
fill_in 'password confirmation', :with => 'new_user123'
|
14
|
-
click_button 'Sign up'
|
15
|
-
|
16
|
-
assert_contain 'You have signed up successfully'
|
17
|
-
assert warden.authenticated?(:admin)
|
18
|
-
assert_current_url "/admin_area/home"
|
19
|
-
|
20
|
-
admin = Admin.order(:id).last
|
21
|
-
assert_equal admin.email, 'new_user@test.com'
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'a guest admin should be able to sign in and be redirected to a custom location' do
|
25
|
-
Devise::RegistrationsController.any_instance.stubs(:after_sign_up_path_for).returns("/?custom=1")
|
26
|
-
get new_admin_session_path
|
27
|
-
click_link 'Sign up'
|
28
|
-
|
29
|
-
fill_in 'email', :with => 'new_user@test.com'
|
30
|
-
fill_in 'password', :with => 'new_user123'
|
31
|
-
fill_in 'password confirmation', :with => 'new_user123'
|
32
|
-
click_button 'Sign up'
|
33
|
-
|
34
|
-
assert_contain 'Welcome! You have signed up successfully.'
|
35
|
-
assert warden.authenticated?(:admin)
|
36
|
-
assert_current_url "/?custom=1"
|
37
|
-
end
|
38
|
-
|
39
|
-
def user_sign_up
|
40
|
-
ActionMailer::Base.deliveries.clear
|
41
|
-
|
42
|
-
get new_user_registration_path
|
43
|
-
|
44
|
-
fill_in 'email', :with => 'new_user@test.com'
|
45
|
-
fill_in 'password', :with => 'new_user123'
|
46
|
-
fill_in 'password confirmation', :with => 'new_user123'
|
47
|
-
click_button 'Sign up'
|
48
|
-
end
|
49
|
-
|
50
|
-
test 'a guest user should be able to sign up successfully and be blocked by confirmation' do
|
51
|
-
user_sign_up
|
52
|
-
|
53
|
-
assert_contain 'A message with a confirmation link has been sent to your email address. Please open the link to activate your account.'
|
54
|
-
assert_not_contain 'You have to confirm your account before continuing'
|
55
|
-
assert_current_url "/"
|
56
|
-
|
57
|
-
assert_not warden.authenticated?(:user)
|
58
|
-
|
59
|
-
user = User.order(:id).last
|
60
|
-
assert_equal user.email, 'new_user@test.com'
|
61
|
-
assert_not user.confirmed?
|
62
|
-
end
|
63
|
-
|
64
|
-
test 'a guest user should receive the confirmation instructions from the default mailer' do
|
65
|
-
user_sign_up
|
66
|
-
assert_equal ['please-change-me@config-initializers-devise.com'], ActionMailer::Base.deliveries.first.from
|
67
|
-
end
|
68
|
-
|
69
|
-
test 'a guest user should receive the confirmation instructions from a custom mailer' do
|
70
|
-
User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
|
71
|
-
user_sign_up
|
72
|
-
assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.first.from
|
73
|
-
end
|
74
|
-
|
75
|
-
test 'a guest user should be blocked by confirmation and redirected to a custom path' do
|
76
|
-
Devise::RegistrationsController.any_instance.stubs(:after_inactive_sign_up_path_for).returns("/?custom=1")
|
77
|
-
get new_user_registration_path
|
78
|
-
|
79
|
-
fill_in 'email', :with => 'new_user@test.com'
|
80
|
-
fill_in 'password', :with => 'new_user123'
|
81
|
-
fill_in 'password confirmation', :with => 'new_user123'
|
82
|
-
click_button 'Sign up'
|
83
|
-
|
84
|
-
assert_current_url "/?custom=1"
|
85
|
-
assert_not warden.authenticated?(:user)
|
86
|
-
end
|
87
|
-
|
88
|
-
test 'a guest user cannot sign up with invalid information' do
|
89
|
-
# Dirty tracking behavior prevents email validations from being applied:
|
90
|
-
# https://github.com/mongoid/mongoid/issues/756
|
91
|
-
(pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
|
92
|
-
|
93
|
-
get new_user_registration_path
|
94
|
-
|
95
|
-
fill_in 'email', :with => 'invalid_email'
|
96
|
-
fill_in 'password', :with => 'new_user123'
|
97
|
-
fill_in 'password confirmation', :with => 'new_user321'
|
98
|
-
click_button 'Sign up'
|
99
|
-
|
100
|
-
assert_template 'registrations/new'
|
101
|
-
assert_have_selector '#error_explanation'
|
102
|
-
assert_contain "Email is invalid"
|
103
|
-
assert_contain Devise.rails4? ?
|
104
|
-
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
105
|
-
assert_contain "2 errors prohibited"
|
106
|
-
assert_nil User.first
|
107
|
-
|
108
|
-
assert_not warden.authenticated?(:user)
|
109
|
-
end
|
110
|
-
|
111
|
-
test 'a guest should not sign up with email/password that already exists' do
|
112
|
-
# Dirty tracking behavior prevents email validations from being applied:
|
113
|
-
# https://github.com/mongoid/mongoid/issues/756
|
114
|
-
(pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
|
115
|
-
|
116
|
-
create_user
|
117
|
-
get new_user_registration_path
|
118
|
-
|
119
|
-
fill_in 'email', :with => 'user@test.com'
|
120
|
-
fill_in 'password', :with => '123456'
|
121
|
-
fill_in 'password confirmation', :with => '123456'
|
122
|
-
click_button 'Sign up'
|
123
|
-
|
124
|
-
assert_current_url '/users'
|
125
|
-
assert_contain(/Email.*already.*taken/)
|
126
|
-
|
127
|
-
assert_not warden.authenticated?(:user)
|
128
|
-
end
|
129
|
-
|
130
|
-
test 'a guest should not be able to change account' do
|
131
|
-
get edit_user_registration_path
|
132
|
-
assert_redirected_to new_user_session_path
|
133
|
-
follow_redirect!
|
134
|
-
assert_contain 'You need to sign in or sign up before continuing.'
|
135
|
-
end
|
136
|
-
|
137
|
-
test 'a signed in user should not be able to access sign up' do
|
138
|
-
sign_in_as_user
|
139
|
-
get new_user_registration_path
|
140
|
-
assert_redirected_to root_path
|
141
|
-
end
|
142
|
-
|
143
|
-
test 'a signed in user should be able to edit his account' do
|
144
|
-
sign_in_as_user
|
145
|
-
get edit_user_registration_path
|
146
|
-
|
147
|
-
fill_in 'email', :with => 'user.new@example.com'
|
148
|
-
fill_in 'current password', :with => '12345678'
|
149
|
-
click_button 'Update'
|
150
|
-
|
151
|
-
assert_current_url '/'
|
152
|
-
assert_contain 'You updated your account successfully.'
|
153
|
-
|
154
|
-
assert_equal "user.new@example.com", User.first.email
|
155
|
-
end
|
156
|
-
|
157
|
-
test 'a signed in user should still be able to use the website after changing his password' do
|
158
|
-
sign_in_as_user
|
159
|
-
get edit_user_registration_path
|
160
|
-
|
161
|
-
fill_in 'password', :with => '1234567890'
|
162
|
-
fill_in 'password confirmation', :with => '1234567890'
|
163
|
-
fill_in 'current password', :with => '12345678'
|
164
|
-
click_button 'Update'
|
165
|
-
|
166
|
-
assert_contain 'You updated your account successfully.'
|
167
|
-
get users_path
|
168
|
-
assert warden.authenticated?(:user)
|
169
|
-
end
|
170
|
-
|
171
|
-
test 'a signed in user should not change his current user with invalid password' do
|
172
|
-
sign_in_as_user
|
173
|
-
get edit_user_registration_path
|
174
|
-
|
175
|
-
fill_in 'email', :with => 'user.new@example.com'
|
176
|
-
fill_in 'current password', :with => 'invalid'
|
177
|
-
click_button 'Update'
|
178
|
-
|
179
|
-
assert_template 'registrations/edit'
|
180
|
-
assert_contain 'user@test.com'
|
181
|
-
assert_have_selector 'form input[value="user.new@example.com"]'
|
182
|
-
|
183
|
-
assert_equal "user@test.com", User.first.email
|
184
|
-
end
|
185
|
-
|
186
|
-
test 'a signed in user should be able to edit his password' do
|
187
|
-
sign_in_as_user
|
188
|
-
get edit_user_registration_path
|
189
|
-
|
190
|
-
fill_in 'password', :with => 'pass1234'
|
191
|
-
fill_in 'password confirmation', :with => 'pass1234'
|
192
|
-
fill_in 'current password', :with => '12345678'
|
193
|
-
click_button 'Update'
|
194
|
-
|
195
|
-
assert_current_url '/'
|
196
|
-
assert_contain 'You updated your account successfully.'
|
197
|
-
|
198
|
-
assert User.first.valid_password?('pass1234')
|
199
|
-
end
|
200
|
-
|
201
|
-
test 'a signed in user should not be able to edit his password with invalid confirmation' do
|
202
|
-
sign_in_as_user
|
203
|
-
get edit_user_registration_path
|
204
|
-
|
205
|
-
fill_in 'password', :with => 'pas123'
|
206
|
-
fill_in 'password confirmation', :with => ''
|
207
|
-
fill_in 'current password', :with => '12345678'
|
208
|
-
click_button 'Update'
|
209
|
-
|
210
|
-
assert_contain Devise.rails4? ?
|
211
|
-
"Password confirmation doesn't match Password" : "Password doesn't match confirmation"
|
212
|
-
assert_not User.first.valid_password?('pas123')
|
213
|
-
end
|
214
|
-
|
215
|
-
test 'a signed in user should be able to cancel his account' do
|
216
|
-
sign_in_as_user
|
217
|
-
get edit_user_registration_path
|
218
|
-
|
219
|
-
click_button "Cancel my account"
|
220
|
-
assert_contain "Bye! Your account was successfully cancelled. We hope to see you again soon."
|
221
|
-
|
222
|
-
assert User.all.empty?
|
223
|
-
end
|
224
|
-
|
225
|
-
test 'a user should be able to cancel sign up by deleting data in the session' do
|
226
|
-
get "/set"
|
227
|
-
assert_equal "something", @request.session["devise.foo_bar"]
|
228
|
-
|
229
|
-
get "/users/sign_up"
|
230
|
-
assert_equal "something", @request.session["devise.foo_bar"]
|
231
|
-
|
232
|
-
get "/users/cancel"
|
233
|
-
assert_nil @request.session["devise.foo_bar"]
|
234
|
-
assert_redirected_to new_user_registration_path
|
235
|
-
end
|
236
|
-
|
237
|
-
test 'a user with XML sign up stub' do
|
238
|
-
get new_user_registration_path(:format => 'xml')
|
239
|
-
assert_response :success
|
240
|
-
assert_match %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>), response.body
|
241
|
-
assert_no_match(/<confirmation-token/, response.body)
|
242
|
-
end
|
243
|
-
|
244
|
-
test 'a user with JSON sign up stub' do
|
245
|
-
get new_user_registration_path(:format => 'json')
|
246
|
-
assert_response :success
|
247
|
-
assert_match %({"user":), response.body
|
248
|
-
assert_no_match(/"confirmation_token"/, response.body)
|
249
|
-
end
|
250
|
-
|
251
|
-
test 'an admin sign up with valid information in XML format should return valid response' do
|
252
|
-
post admin_registration_path(:format => 'xml'), :admin => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'new_user123' }
|
253
|
-
assert_response :success
|
254
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
|
255
|
-
|
256
|
-
admin = Admin.order(:id).last
|
257
|
-
assert_equal admin.email, 'new_user@test.com'
|
258
|
-
end
|
259
|
-
|
260
|
-
test 'a user sign up with valid information in XML format should return valid response' do
|
261
|
-
post user_registration_path(:format => 'xml'), :user => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'new_user123' }
|
262
|
-
assert_response :success
|
263
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
264
|
-
|
265
|
-
user = User.order(:id).last
|
266
|
-
assert_equal user.email, 'new_user@test.com'
|
267
|
-
end
|
268
|
-
|
269
|
-
test 'a user sign up with invalid information in XML format should return invalid response' do
|
270
|
-
post user_registration_path(:format => 'xml'), :user => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'invalid' }
|
271
|
-
assert_response :unprocessable_entity
|
272
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
273
|
-
end
|
274
|
-
|
275
|
-
test 'a user update information with valid data in XML format should return valid response' do
|
276
|
-
user = sign_in_as_user
|
277
|
-
put user_registration_path(:format => 'xml'), :user => { :current_password => '12345678', :email => 'user.new@test.com' }
|
278
|
-
assert_response :success
|
279
|
-
assert_equal user.reload.email, 'user.new@test.com'
|
280
|
-
end
|
281
|
-
|
282
|
-
test 'a user update information with invalid data in XML format should return invalid response' do
|
283
|
-
user = sign_in_as_user
|
284
|
-
put user_registration_path(:format => 'xml'), :user => { :current_password => 'invalid', :email => 'user.new@test.com' }
|
285
|
-
assert_response :unprocessable_entity
|
286
|
-
assert_equal user.reload.email, 'user@test.com'
|
287
|
-
end
|
288
|
-
|
289
|
-
test 'a user cancel his account in XML format should return valid response' do
|
290
|
-
sign_in_as_user
|
291
|
-
delete user_registration_path(:format => 'xml')
|
292
|
-
assert_response :success
|
293
|
-
assert_equal User.count, 0
|
294
|
-
end
|
295
|
-
end
|
296
|
-
|
297
|
-
class ReconfirmableRegistrationTest < ActionDispatch::IntegrationTest
|
298
|
-
test 'a signed in admin should see a more appropriate flash message when editing his account if reconfirmable is enabled' do
|
299
|
-
sign_in_as_admin
|
300
|
-
get edit_admin_registration_path
|
301
|
-
|
302
|
-
fill_in 'email', :with => 'admin.new@example.com'
|
303
|
-
fill_in 'current password', :with => '123456'
|
304
|
-
click_button 'Update'
|
305
|
-
|
306
|
-
assert_current_url '/admin_area/home'
|
307
|
-
assert_contain 'but we need to verify your new email address'
|
308
|
-
assert_equal 'admin.new@example.com', Admin.first.unconfirmed_email
|
309
|
-
|
310
|
-
get edit_admin_registration_path
|
311
|
-
assert_contain 'Currently waiting confirmation for: admin.new@example.com'
|
312
|
-
end
|
313
|
-
|
314
|
-
test 'a signed in admin should not see a reconfirmation message if they did not change their password' do
|
315
|
-
sign_in_as_admin
|
316
|
-
get edit_admin_registration_path
|
317
|
-
|
318
|
-
fill_in 'password', :with => 'pas123'
|
319
|
-
fill_in 'password confirmation', :with => 'pas123'
|
320
|
-
fill_in 'current password', :with => '123456'
|
321
|
-
click_button 'Update'
|
322
|
-
|
323
|
-
assert_current_url '/admin_area/home'
|
324
|
-
assert_contain 'You updated your account successfully.'
|
325
|
-
|
326
|
-
assert Admin.first.valid_password?('pas123')
|
327
|
-
end
|
328
|
-
|
329
|
-
test 'a signed in admin should not see a reconfirmation message if he did not change his email, despite having an unconfirmed email' do
|
330
|
-
sign_in_as_admin
|
331
|
-
|
332
|
-
get edit_admin_registration_path
|
333
|
-
fill_in 'email', :with => 'admin.new@example.com'
|
334
|
-
fill_in 'current password', :with => '123456'
|
335
|
-
click_button 'Update'
|
336
|
-
|
337
|
-
get edit_admin_registration_path
|
338
|
-
fill_in 'password', :with => 'pas123'
|
339
|
-
fill_in 'password confirmation', :with => 'pas123'
|
340
|
-
fill_in 'current password', :with => '123456'
|
341
|
-
click_button 'Update'
|
342
|
-
|
343
|
-
assert_current_url '/admin_area/home'
|
344
|
-
assert_contain 'You updated your account successfully.'
|
345
|
-
|
346
|
-
assert_equal "admin.new@example.com", Admin.first.unconfirmed_email
|
347
|
-
assert Admin.first.valid_password?('pas123')
|
348
|
-
end
|
349
|
-
end
|