devise 4.5.0 → 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 +5 -5
- data/CHANGELOG.md +30 -1
- data/MIT-LICENSE +1 -1
- data/README.md +18 -0
- data/app/controllers/devise/passwords_controller.rb +1 -0
- data/app/controllers/devise/registrations_controller.rb +25 -7
- data/app/helpers/devise_helper.rb +10 -19
- data/app/views/devise/confirmations/new.html.erb +1 -1
- data/app/views/devise/passwords/edit.html.erb +1 -1
- data/app/views/devise/passwords/new.html.erb +1 -1
- data/app/views/devise/registrations/edit.html.erb +1 -1
- data/app/views/devise/registrations/new.html.erb +1 -1
- data/app/views/devise/sessions/new.html.erb +2 -2
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/_links.html.erb +7 -7
- data/app/views/devise/unlocks/new.html.erb +1 -1
- data/config/locales/en.yml +1 -0
- data/lib/devise.rb +4 -0
- data/lib/devise/controllers/helpers.rb +1 -1
- data/lib/devise/failure_app.rb +28 -3
- data/lib/devise/models/authenticatable.rb +7 -15
- data/lib/devise/models/confirmable.rb +4 -1
- data/lib/devise/models/database_authenticatable.rb +41 -6
- data/lib/devise/models/lockable.rb +2 -2
- data/lib/devise/models/registerable.rb +2 -0
- data/lib/devise/strategies/database_authenticatable.rb +3 -0
- data/lib/devise/test/controller_helpers.rb +1 -1
- data/lib/devise/version.rb +1 -1
- data/lib/generators/active_record/devise_generator.rb +4 -4
- data/lib/generators/devise/controllers_generator.rb +1 -1
- data/lib/generators/templates/devise.rb +12 -3
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +1 -1
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +1 -1
- metadata +5 -305
- data/.gitignore +0 -10
- data/.travis.yml +0 -69
- data/.yardopts +0 -9
- data/CODE_OF_CONDUCT.md +0 -22
- data/CONTRIBUTING.md +0 -79
- data/Gemfile +0 -39
- data/Gemfile.lock +0 -202
- data/ISSUE_TEMPLATE.md +0 -19
- data/Rakefile +0 -37
- data/bin/test +0 -13
- data/devise.gemspec +0 -28
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-4.1-stable +0 -32
- data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
- data/gemfiles/Gemfile.rails-4.2-stable +0 -32
- data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
- data/gemfiles/Gemfile.rails-5.0-stable +0 -33
- data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -192
- data/gemfiles/Gemfile.rails-5.2-rc1 +0 -26
- data/gemfiles/Gemfile.rails-5.2-rc1.lock +0 -201
- data/guides/bug_report_templates/integration_test.rb +0 -106
- data/test/controllers/custom_registrations_controller_test.rb +0 -42
- data/test/controllers/custom_strategy_test.rb +0 -66
- data/test/controllers/helper_methods_test.rb +0 -24
- data/test/controllers/helpers_test.rb +0 -318
- data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -53
- data/test/controllers/internal_helpers_test.rb +0 -129
- data/test/controllers/load_hooks_controller_test.rb +0 -21
- data/test/controllers/passwords_controller_test.rb +0 -34
- data/test/controllers/sessions_controller_test.rb +0 -108
- data/test/controllers/url_helpers_test.rb +0 -67
- data/test/delegator_test.rb +0 -21
- data/test/devise_test.rb +0 -109
- data/test/failure_app_test.rb +0 -346
- data/test/generators/active_record_generator_test.rb +0 -130
- data/test/generators/controllers_generator_test.rb +0 -50
- data/test/generators/devise_generator_test.rb +0 -41
- data/test/generators/install_generator_test.rb +0 -26
- data/test/generators/mongoid_generator_test.rb +0 -25
- data/test/generators/views_generator_test.rb +0 -105
- data/test/helpers/devise_helper_test.rb +0 -51
- data/test/integration/authenticatable_test.rb +0 -706
- data/test/integration/confirmable_test.rb +0 -326
- data/test/integration/database_authenticatable_test.rb +0 -110
- data/test/integration/http_authenticatable_test.rb +0 -114
- data/test/integration/lockable_test.rb +0 -242
- data/test/integration/mounted_engine_test.rb +0 -38
- data/test/integration/omniauthable_test.rb +0 -148
- data/test/integration/recoverable_test.rb +0 -349
- data/test/integration/registerable_test.rb +0 -365
- data/test/integration/rememberable_test.rb +0 -219
- data/test/integration/timeoutable_test.rb +0 -186
- data/test/integration/trackable_test.rb +0 -99
- data/test/mailers/confirmation_instructions_test.rb +0 -117
- data/test/mailers/email_changed_test.rb +0 -132
- data/test/mailers/mailer_test.rb +0 -20
- data/test/mailers/reset_password_instructions_test.rb +0 -98
- data/test/mailers/unlock_instructions_test.rb +0 -93
- data/test/mapping_test.rb +0 -136
- data/test/models/authenticatable_test.rb +0 -25
- data/test/models/confirmable_test.rb +0 -549
- data/test/models/database_authenticatable_test.rb +0 -290
- data/test/models/lockable_test.rb +0 -352
- data/test/models/omniauthable_test.rb +0 -9
- data/test/models/recoverable_test.rb +0 -263
- data/test/models/registerable_test.rb +0 -9
- data/test/models/rememberable_test.rb +0 -184
- data/test/models/serializable_test.rb +0 -60
- data/test/models/timeoutable_test.rb +0 -53
- data/test/models/trackable_test.rb +0 -80
- data/test/models/validatable_test.rb +0 -121
- data/test/models_test.rb +0 -155
- data/test/omniauth/config_test.rb +0 -61
- data/test/omniauth/url_helpers_test.rb +0 -53
- data/test/orm/active_record.rb +0 -24
- data/test/orm/mongoid.rb +0 -15
- data/test/parameter_sanitizer_test.rb +0 -105
- data/test/rails_app/Rakefile +0 -6
- data/test/rails_app/app/active_record/admin.rb +0 -8
- data/test/rails_app/app/active_record/shim.rb +0 -4
- data/test/rails_app/app/active_record/user.rb +0 -20
- data/test/rails_app/app/active_record/user_on_engine.rb +0 -9
- data/test/rails_app/app/active_record/user_on_main_app.rb +0 -9
- data/test/rails_app/app/active_record/user_with_validations.rb +0 -12
- data/test/rails_app/app/active_record/user_without_email.rb +0 -10
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -8
- data/test/rails_app/app/controllers/admins_controller.rb +0 -8
- data/test/rails_app/app/controllers/application_controller.rb +0 -13
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -32
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -33
- data/test/rails_app/app/controllers/home_controller.rb +0 -31
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -4
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -4
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -16
- data/test/rails_app/app/controllers/users_controller.rb +0 -33
- data/test/rails_app/app/helpers/application_helper.rb +0 -5
- data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -5
- data/test/rails_app/app/mailers/users/mailer.rb +0 -5
- data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -6
- data/test/rails_app/app/mongoid/admin.rb +0 -31
- data/test/rails_app/app/mongoid/shim.rb +0 -25
- data/test/rails_app/app/mongoid/user.rb +0 -50
- data/test/rails_app/app/mongoid/user_on_engine.rb +0 -41
- data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -41
- data/test/rails_app/app/mongoid/user_with_validations.rb +0 -37
- data/test/rails_app/app/mongoid/user_without_email.rb +0 -35
- 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.ru +0 -4
- data/test/rails_app/config/application.rb +0 -48
- data/test/rails_app/config/boot.rb +0 -27
- data/test/rails_app/config/database.yml +0 -18
- data/test/rails_app/config/environment.rb +0 -7
- data/test/rails_app/config/environments/development.rb +0 -32
- data/test/rails_app/config/environments/production.rb +0 -88
- data/test/rails_app/config/environments/test.rb +0 -47
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -9
- data/test/rails_app/config/initializers/devise.rb +0 -187
- data/test/rails_app/config/initializers/inflections.rb +0 -4
- data/test/rails_app/config/initializers/secret_token.rb +0 -5
- data/test/rails_app/config/initializers/session_store.rb +0 -3
- data/test/rails_app/config/routes.rb +0 -128
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -77
- data/test/rails_app/db/schema.rb +0 -57
- data/test/rails_app/lib/lazy_load_test_module.rb +0 -5
- data/test/rails_app/lib/shared_admin.rb +0 -23
- data/test/rails_app/lib/shared_user.rb +0 -32
- data/test/rails_app/lib/shared_user_without_email.rb +0 -28
- data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -15
- 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/rails_test.rb +0 -11
- data/test/routes_test.rb +0 -281
- data/test/secret_key_finder_test.rb +0 -121
- data/test/support/action_controller/record_identifier.rb +0 -12
- data/test/support/assertions.rb +0 -30
- data/test/support/helpers.rb +0 -83
- data/test/support/http_method_compatibility.rb +0 -53
- data/test/support/integration.rb +0 -95
- data/test/support/locale/en.yml +0 -8
- data/test/support/mongoid.yml +0 -6
- data/test/support/webrat/integrations/rails.rb +0 -35
- data/test/test/controller_helpers_test.rb +0 -193
- data/test/test/integration_helpers_test.rb +0 -34
- data/test/test_helper.rb +0 -36
- data/test/test_models.rb +0 -35
@@ -1,242 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class LockTest < Devise::IntegrationTest
|
6
|
-
|
7
|
-
def visit_user_unlock_with_token(unlock_token)
|
8
|
-
visit user_unlock_path(unlock_token: unlock_token)
|
9
|
-
end
|
10
|
-
|
11
|
-
def send_unlock_request
|
12
|
-
user = create_user(locked: true)
|
13
|
-
ActionMailer::Base.deliveries.clear
|
14
|
-
|
15
|
-
visit new_user_session_path
|
16
|
-
click_link "Didn't receive unlock instructions?"
|
17
|
-
|
18
|
-
Devise.stubs(:friendly_token).returns("abcdef")
|
19
|
-
fill_in 'email', with: user.email
|
20
|
-
click_button 'Resend unlock instructions'
|
21
|
-
end
|
22
|
-
|
23
|
-
test 'user should be able to request a new unlock token' do
|
24
|
-
send_unlock_request
|
25
|
-
|
26
|
-
assert_template 'sessions/new'
|
27
|
-
assert_contain 'You will receive an email with instructions for how to unlock your account in a few minutes'
|
28
|
-
|
29
|
-
mail = ActionMailer::Base.deliveries.last
|
30
|
-
assert_equal 1, ActionMailer::Base.deliveries.size
|
31
|
-
assert_equal ['please-change-me@config-initializers-devise.com'], mail.from
|
32
|
-
assert_match user_unlock_path(unlock_token: 'abcdef'), mail.body.encoded
|
33
|
-
end
|
34
|
-
|
35
|
-
test 'user should receive the instructions from a custom mailer' do
|
36
|
-
User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
|
37
|
-
|
38
|
-
send_unlock_request
|
39
|
-
|
40
|
-
assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.first.from
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'unlocked user should not be able to request a unlock token' do
|
44
|
-
user = create_user(locked: false)
|
45
|
-
ActionMailer::Base.deliveries.clear
|
46
|
-
|
47
|
-
visit new_user_session_path
|
48
|
-
click_link "Didn't receive unlock instructions?"
|
49
|
-
|
50
|
-
fill_in 'email', with: user.email
|
51
|
-
click_button 'Resend unlock instructions'
|
52
|
-
|
53
|
-
assert_template 'unlocks/new'
|
54
|
-
assert_contain 'not locked'
|
55
|
-
assert_equal 0, ActionMailer::Base.deliveries.size
|
56
|
-
end
|
57
|
-
|
58
|
-
test 'unlocked pages should not be available if email strategy is disabled' do
|
59
|
-
visit "/admin_area/sign_in"
|
60
|
-
|
61
|
-
assert_raise Webrat::NotFoundError do
|
62
|
-
click_link "Didn't receive unlock instructions?"
|
63
|
-
end
|
64
|
-
|
65
|
-
assert_raise NameError do
|
66
|
-
visit new_admin_unlock_path
|
67
|
-
end
|
68
|
-
|
69
|
-
assert_raise ActionController::RoutingError do
|
70
|
-
visit "/admin_area/unlock/new"
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
test 'user with invalid unlock token should not be able to unlock an account' do
|
75
|
-
visit_user_unlock_with_token('invalid_token')
|
76
|
-
|
77
|
-
assert_response :success
|
78
|
-
assert_current_url '/users/unlock?unlock_token=invalid_token'
|
79
|
-
assert_have_selector '#error_explanation'
|
80
|
-
assert_contain %r{Unlock token(.*)invalid}
|
81
|
-
end
|
82
|
-
|
83
|
-
test "locked user should be able to unlock account" do
|
84
|
-
user = create_user
|
85
|
-
raw = user.lock_access!
|
86
|
-
visit_user_unlock_with_token(raw)
|
87
|
-
|
88
|
-
assert_current_url "/users/sign_in"
|
89
|
-
assert_contain 'Your account has been unlocked successfully. Please sign in to continue.'
|
90
|
-
refute user.reload.access_locked?
|
91
|
-
end
|
92
|
-
|
93
|
-
test "user should not send a new e-mail if already locked" do
|
94
|
-
user = create_user(locked: true)
|
95
|
-
user.failed_attempts = User.maximum_attempts + 1
|
96
|
-
user.save!
|
97
|
-
|
98
|
-
ActionMailer::Base.deliveries.clear
|
99
|
-
|
100
|
-
sign_in_as_user(password: "invalid")
|
101
|
-
assert_contain 'Your account is locked.'
|
102
|
-
assert ActionMailer::Base.deliveries.empty?
|
103
|
-
end
|
104
|
-
|
105
|
-
test 'error message is configurable by resource name' do
|
106
|
-
store_translations :en, devise: {
|
107
|
-
failure: {user: {locked: "You are locked!"}}
|
108
|
-
} do
|
109
|
-
|
110
|
-
user = create_user(locked: true)
|
111
|
-
user.failed_attempts = User.maximum_attempts + 1
|
112
|
-
user.save!
|
113
|
-
|
114
|
-
sign_in_as_user(password: "invalid")
|
115
|
-
assert_contain "You are locked!"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
test "user should not be able to sign in when locked" do
|
120
|
-
store_translations :en, devise: {
|
121
|
-
failure: {user: {locked: "You are locked!"}}
|
122
|
-
} do
|
123
|
-
|
124
|
-
user = create_user(locked: true)
|
125
|
-
user.failed_attempts = User.maximum_attempts + 1
|
126
|
-
user.save!
|
127
|
-
|
128
|
-
sign_in_as_user(password: "123456")
|
129
|
-
assert_contain "You are locked!"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
test 'user should be able to request a new unlock token via XML request' do
|
134
|
-
user = create_user(locked: true)
|
135
|
-
ActionMailer::Base.deliveries.clear
|
136
|
-
|
137
|
-
post user_unlock_path(format: 'xml'), params: { user: {email: user.email} }
|
138
|
-
assert_response :success
|
139
|
-
assert_equal response.body, {}.to_xml
|
140
|
-
|
141
|
-
assert_equal 1, ActionMailer::Base.deliveries.size
|
142
|
-
end
|
143
|
-
|
144
|
-
test 'unlocked user should not be able to request a unlock token via XML request' do
|
145
|
-
user = create_user(locked: false)
|
146
|
-
ActionMailer::Base.deliveries.clear
|
147
|
-
|
148
|
-
post user_unlock_path(format: 'xml'), params: { user: {email: user.email} }
|
149
|
-
assert_response :unprocessable_entity
|
150
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
151
|
-
assert_equal 0, ActionMailer::Base.deliveries.size
|
152
|
-
end
|
153
|
-
|
154
|
-
test 'user with valid unlock token should be able to unlock account via XML request' do
|
155
|
-
user = create_user()
|
156
|
-
raw = user.lock_access!
|
157
|
-
assert user.access_locked?
|
158
|
-
get user_unlock_path(format: 'xml', unlock_token: raw)
|
159
|
-
assert_response :success
|
160
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
|
161
|
-
end
|
162
|
-
|
163
|
-
|
164
|
-
test 'user with invalid unlock token should not be able to unlock the account via XML request' do
|
165
|
-
get user_unlock_path(format: 'xml', unlock_token: 'invalid_token')
|
166
|
-
assert_response :unprocessable_entity
|
167
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
168
|
-
end
|
169
|
-
|
170
|
-
test "when using json to ask a unlock request, should not return the user" do
|
171
|
-
user = create_user(locked: true)
|
172
|
-
post user_unlock_path(format: "json", user: {email: user.email})
|
173
|
-
assert_response :success
|
174
|
-
assert_equal response.body, {}.to_json
|
175
|
-
end
|
176
|
-
|
177
|
-
test "in paranoid mode, when trying to unlock a user that exists it should not say that it exists if it is locked" do
|
178
|
-
swap Devise, paranoid: true do
|
179
|
-
user = create_user(locked: true)
|
180
|
-
|
181
|
-
visit new_user_session_path
|
182
|
-
click_link "Didn't receive unlock instructions?"
|
183
|
-
|
184
|
-
fill_in 'email', with: user.email
|
185
|
-
click_button 'Resend unlock instructions'
|
186
|
-
|
187
|
-
assert_current_url "/users/sign_in"
|
188
|
-
assert_contain "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
test "in paranoid mode, when trying to unlock a user that exists it should not say that it exists if it is not locked" do
|
193
|
-
swap Devise, paranoid: true do
|
194
|
-
user = create_user(locked: false)
|
195
|
-
|
196
|
-
visit new_user_session_path
|
197
|
-
click_link "Didn't receive unlock instructions?"
|
198
|
-
|
199
|
-
fill_in 'email', with: user.email
|
200
|
-
click_button 'Resend unlock instructions'
|
201
|
-
|
202
|
-
assert_current_url "/users/sign_in"
|
203
|
-
assert_contain "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
test "in paranoid mode, when trying to unlock a user that does not exists it should not say that it does not exists" do
|
208
|
-
swap Devise, paranoid: true do
|
209
|
-
visit new_user_session_path
|
210
|
-
click_link "Didn't receive unlock instructions?"
|
211
|
-
|
212
|
-
fill_in 'email', with: "arandomemail@hotmail.com"
|
213
|
-
click_button 'Resend unlock instructions'
|
214
|
-
|
215
|
-
assert_not_contain "1 error prohibited this user from being saved:"
|
216
|
-
assert_not_contain "Email not found"
|
217
|
-
assert_current_url "/users/sign_in"
|
218
|
-
|
219
|
-
assert_contain "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
|
220
|
-
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
test "in paranoid mode, when locking a user that exists it should not say that the user was locked" do
|
225
|
-
swap Devise, paranoid: true, maximum_attempts: 1 do
|
226
|
-
user = create_user(locked: false)
|
227
|
-
|
228
|
-
visit new_user_session_path
|
229
|
-
fill_in 'email', with: user.email
|
230
|
-
fill_in 'password', with: "abadpassword"
|
231
|
-
click_button 'Log in'
|
232
|
-
|
233
|
-
fill_in 'email', with: user.email
|
234
|
-
fill_in 'password', with: "abadpassword"
|
235
|
-
click_button 'Log in'
|
236
|
-
|
237
|
-
assert_current_url "/users/sign_in"
|
238
|
-
assert_not_contain "locked"
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class MyMountableEngine
|
6
|
-
def self.call(env)
|
7
|
-
['200', { 'Content-Type' => 'text/html' }, ['Rendered content of MyMountableEngine']]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# If disable_clear_and_finalize is set to true, Rails will not clear other routes when calling
|
12
|
-
# again the draw method. Look at the source code at:
|
13
|
-
# http://www.rubydoc.info/docs/rails/ActionDispatch/Routing/RouteSet:draw
|
14
|
-
Rails.application.routes.disable_clear_and_finalize = true
|
15
|
-
|
16
|
-
Rails.application.routes.draw do
|
17
|
-
authenticate(:user) do
|
18
|
-
mount MyMountableEngine, at: '/mountable_engine'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class AuthenticatedMountedEngineTest < Devise::IntegrationTest
|
23
|
-
test 'redirects to the sign in page when not authenticated' do
|
24
|
-
get '/mountable_engine'
|
25
|
-
follow_redirect!
|
26
|
-
|
27
|
-
assert_response :ok
|
28
|
-
assert_contain 'You need to sign in or sign up before continuing.'
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'renders the mounted engine when authenticated' do
|
32
|
-
sign_in_as_user
|
33
|
-
get '/mountable_engine'
|
34
|
-
|
35
|
-
assert_response :success
|
36
|
-
assert_contain 'Rendered content of MyMountableEngine'
|
37
|
-
end
|
38
|
-
end
|
@@ -1,148 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
|
6
|
-
class OmniauthableIntegrationTest < Devise::IntegrationTest
|
7
|
-
FACEBOOK_INFO = {
|
8
|
-
"id" => '12345',
|
9
|
-
"link" => 'http://facebook.com/josevalim',
|
10
|
-
"email" => 'user@example.com',
|
11
|
-
"first_name" => 'Jose',
|
12
|
-
"last_name" => 'Valim',
|
13
|
-
"website" => 'http://blog.plataformatec.com.br'
|
14
|
-
}
|
15
|
-
|
16
|
-
setup do
|
17
|
-
OmniAuth.config.test_mode = true
|
18
|
-
OmniAuth.config.mock_auth[:facebook] = {
|
19
|
-
"uid" => '12345',
|
20
|
-
"provider" => 'facebook',
|
21
|
-
"user_info" => {"nickname" => 'josevalim'},
|
22
|
-
"credentials" => {"token" => 'plataformatec'},
|
23
|
-
"extra" => {"user_hash" => FACEBOOK_INFO}
|
24
|
-
}
|
25
|
-
OmniAuth.config.add_camelization 'facebook', 'FaceBook'
|
26
|
-
end
|
27
|
-
|
28
|
-
teardown do
|
29
|
-
OmniAuth.config.camelizations.delete('facebook')
|
30
|
-
OmniAuth.config.test_mode = false
|
31
|
-
end
|
32
|
-
|
33
|
-
def stub_action!(name)
|
34
|
-
Users::OmniauthCallbacksController.class_eval do
|
35
|
-
alias_method :__old_facebook, :facebook
|
36
|
-
alias_method :facebook, name
|
37
|
-
end
|
38
|
-
yield
|
39
|
-
ensure
|
40
|
-
Users::OmniauthCallbacksController.class_eval do
|
41
|
-
alias_method :facebook, :__old_facebook
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
test "omniauth sign in should not run model validations" do
|
46
|
-
stub_action!(:sign_in_facebook) do
|
47
|
-
create_user
|
48
|
-
visit "/users/sign_in"
|
49
|
-
click_link "Sign in with FaceBook"
|
50
|
-
assert warden.authenticated?(:user)
|
51
|
-
|
52
|
-
refute User.validations_performed
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
test "can access omniauth.auth in the env hash" do
|
57
|
-
visit "/users/sign_in"
|
58
|
-
click_link "Sign in with FaceBook"
|
59
|
-
|
60
|
-
json = ActiveSupport::JSON.decode(response.body)
|
61
|
-
|
62
|
-
assert_equal "12345", json["uid"]
|
63
|
-
assert_equal "facebook", json["provider"]
|
64
|
-
assert_equal "josevalim", json["user_info"]["nickname"]
|
65
|
-
assert_equal FACEBOOK_INFO, json["extra"]["user_hash"]
|
66
|
-
assert_equal "plataformatec", json["credentials"]["token"]
|
67
|
-
end
|
68
|
-
|
69
|
-
test "cleans up session on sign up" do
|
70
|
-
assert_no_difference "User.count" do
|
71
|
-
visit "/users/sign_in"
|
72
|
-
click_link "Sign in with FaceBook"
|
73
|
-
end
|
74
|
-
|
75
|
-
assert session["devise.facebook_data"]
|
76
|
-
|
77
|
-
assert_difference "User.count" do
|
78
|
-
visit "/users/sign_up"
|
79
|
-
fill_in "Password", with: "12345678"
|
80
|
-
fill_in "Password confirmation", with: "12345678"
|
81
|
-
click_button "Sign up"
|
82
|
-
end
|
83
|
-
|
84
|
-
assert_current_url "/"
|
85
|
-
assert_contain "You have signed up successfully."
|
86
|
-
assert_contain "Hello User user@example.com"
|
87
|
-
refute session["devise.facebook_data"]
|
88
|
-
end
|
89
|
-
|
90
|
-
test "cleans up session on cancel" do
|
91
|
-
assert_no_difference "User.count" do
|
92
|
-
visit "/users/sign_in"
|
93
|
-
click_link "Sign in with FaceBook"
|
94
|
-
end
|
95
|
-
|
96
|
-
assert session["devise.facebook_data"]
|
97
|
-
visit "/users/cancel"
|
98
|
-
assert !session["devise.facebook_data"]
|
99
|
-
end
|
100
|
-
|
101
|
-
test "cleans up session on sign in" do
|
102
|
-
assert_no_difference "User.count" do
|
103
|
-
visit "/users/sign_in"
|
104
|
-
click_link "Sign in with FaceBook"
|
105
|
-
end
|
106
|
-
|
107
|
-
assert session["devise.facebook_data"]
|
108
|
-
sign_in_as_user
|
109
|
-
assert !session["devise.facebook_data"]
|
110
|
-
end
|
111
|
-
|
112
|
-
test "sign in and send remember token if configured" do
|
113
|
-
visit "/users/sign_in"
|
114
|
-
click_link "Sign in with FaceBook"
|
115
|
-
assert_nil warden.cookies["remember_user_token"]
|
116
|
-
|
117
|
-
stub_action!(:sign_in_facebook) do
|
118
|
-
create_user
|
119
|
-
visit "/users/sign_in"
|
120
|
-
click_link "Sign in with FaceBook"
|
121
|
-
assert warden.authenticated?(:user)
|
122
|
-
assert warden.cookies["remember_user_token"]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
test "generates a proper link when SCRIPT_NAME is set" do
|
127
|
-
header 'SCRIPT_NAME', '/q'
|
128
|
-
visit "/users/sign_in"
|
129
|
-
assert_select "a", href: "/q/users/auth/facebook"
|
130
|
-
end
|
131
|
-
|
132
|
-
test "handles callback error parameter according to the specification" do
|
133
|
-
OmniAuth.config.mock_auth[:facebook] = :access_denied
|
134
|
-
visit "/users/auth/facebook/callback?error=access_denied"
|
135
|
-
assert_current_url "/users/sign_in"
|
136
|
-
assert_contain 'Could not authenticate you from FaceBook because "Access denied".'
|
137
|
-
end
|
138
|
-
|
139
|
-
test "handles other exceptions from OmniAuth" do
|
140
|
-
OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
|
141
|
-
|
142
|
-
visit "/users/sign_in"
|
143
|
-
click_link "Sign in with FaceBook"
|
144
|
-
|
145
|
-
assert_current_url "/users/sign_in"
|
146
|
-
assert_contain 'Could not authenticate you from FaceBook because "Invalid credentials".'
|
147
|
-
end
|
148
|
-
end
|
@@ -1,349 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class PasswordTest < Devise::IntegrationTest
|
6
|
-
|
7
|
-
def visit_new_password_path
|
8
|
-
visit new_user_session_path
|
9
|
-
click_link 'Forgot your password?'
|
10
|
-
end
|
11
|
-
|
12
|
-
def request_forgot_password(&block)
|
13
|
-
visit_new_password_path
|
14
|
-
assert_response :success
|
15
|
-
refute warden.authenticated?(:user)
|
16
|
-
|
17
|
-
fill_in 'email', with: 'user@test.com'
|
18
|
-
yield if block_given?
|
19
|
-
|
20
|
-
Devise.stubs(:friendly_token).returns("abcdef")
|
21
|
-
click_button 'Send me reset password instructions'
|
22
|
-
end
|
23
|
-
|
24
|
-
def reset_password(options={}, &block)
|
25
|
-
unless options[:visit] == false
|
26
|
-
visit edit_user_password_path(reset_password_token: options[:reset_password_token] || "abcdef")
|
27
|
-
assert_response :success
|
28
|
-
end
|
29
|
-
|
30
|
-
fill_in 'New password', with: '987654321'
|
31
|
-
fill_in 'Confirm new password', with: '987654321'
|
32
|
-
yield if block_given?
|
33
|
-
click_button 'Change my password'
|
34
|
-
end
|
35
|
-
|
36
|
-
test 'reset password with email of different case should succeed when email is in the list of case insensitive keys' do
|
37
|
-
create_user(email: 'Foo@Bar.com')
|
38
|
-
|
39
|
-
request_forgot_password do
|
40
|
-
fill_in 'email', with: 'foo@bar.com'
|
41
|
-
end
|
42
|
-
|
43
|
-
assert_current_url '/users/sign_in'
|
44
|
-
assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
|
45
|
-
end
|
46
|
-
|
47
|
-
test 'reset password with email should send an email from a custom mailer' do
|
48
|
-
create_user(email: 'Foo@Bar.com')
|
49
|
-
|
50
|
-
User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
|
51
|
-
request_forgot_password do
|
52
|
-
fill_in 'email', with: 'foo@bar.com'
|
53
|
-
end
|
54
|
-
|
55
|
-
mail = ActionMailer::Base.deliveries.last
|
56
|
-
assert_equal ['custom@example.com'], mail.from
|
57
|
-
assert_match edit_user_password_path(reset_password_token: 'abcdef'), mail.body.encoded
|
58
|
-
end
|
59
|
-
|
60
|
-
test 'reset password with email of different case should fail when email is NOT the list of case insensitive keys' do
|
61
|
-
swap Devise, case_insensitive_keys: [] do
|
62
|
-
create_user(email: 'Foo@Bar.com')
|
63
|
-
|
64
|
-
request_forgot_password do
|
65
|
-
fill_in 'email', with: 'foo@bar.com'
|
66
|
-
end
|
67
|
-
|
68
|
-
assert_response :success
|
69
|
-
assert_current_url '/users/password'
|
70
|
-
assert_have_selector "input[type=email][value='foo@bar.com']"
|
71
|
-
assert_contain 'not found'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
test 'reset password with email with extra whitespace should succeed when email is in the list of strip whitespace keys' do
|
76
|
-
create_user(email: 'foo@bar.com')
|
77
|
-
|
78
|
-
request_forgot_password do
|
79
|
-
fill_in 'email', with: ' foo@bar.com '
|
80
|
-
end
|
81
|
-
|
82
|
-
assert_current_url '/users/sign_in'
|
83
|
-
assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
|
84
|
-
end
|
85
|
-
|
86
|
-
test 'reset password with email with extra whitespace should fail when email is NOT the list of strip whitespace keys' do
|
87
|
-
swap Devise, strip_whitespace_keys: [] do
|
88
|
-
create_user(email: 'foo@bar.com')
|
89
|
-
|
90
|
-
request_forgot_password do
|
91
|
-
fill_in 'email', with: ' foo@bar.com '
|
92
|
-
end
|
93
|
-
|
94
|
-
assert_response :success
|
95
|
-
assert_current_url '/users/password'
|
96
|
-
assert_have_selector "input[type=email][value=' foo@bar.com ']"
|
97
|
-
assert_contain 'not found'
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
test 'authenticated user should not be able to visit forgot password page' do
|
102
|
-
sign_in_as_user
|
103
|
-
assert warden.authenticated?(:user)
|
104
|
-
|
105
|
-
get new_user_password_path
|
106
|
-
|
107
|
-
assert_response :redirect
|
108
|
-
assert_redirected_to root_path
|
109
|
-
end
|
110
|
-
|
111
|
-
test 'not authenticated user should be able to request a forgot password' do
|
112
|
-
create_user
|
113
|
-
request_forgot_password
|
114
|
-
|
115
|
-
assert_current_url '/users/sign_in'
|
116
|
-
assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
|
117
|
-
end
|
118
|
-
|
119
|
-
test 'not authenticated user with invalid email should receive an error message' do
|
120
|
-
request_forgot_password do
|
121
|
-
fill_in 'email', with: 'invalid.test@test.com'
|
122
|
-
end
|
123
|
-
|
124
|
-
assert_response :success
|
125
|
-
assert_current_url '/users/password'
|
126
|
-
assert_have_selector "input[type=email][value='invalid.test@test.com']"
|
127
|
-
assert_contain 'not found'
|
128
|
-
end
|
129
|
-
|
130
|
-
test 'authenticated user should not be able to visit edit password page' do
|
131
|
-
sign_in_as_user
|
132
|
-
get edit_user_password_path
|
133
|
-
assert_response :redirect
|
134
|
-
assert_redirected_to root_path
|
135
|
-
assert warden.authenticated?(:user)
|
136
|
-
end
|
137
|
-
|
138
|
-
test 'not authenticated user without a reset password token should not be able to visit the page' do
|
139
|
-
get edit_user_password_path
|
140
|
-
assert_response :redirect
|
141
|
-
assert_redirected_to "/users/sign_in"
|
142
|
-
end
|
143
|
-
|
144
|
-
test 'not authenticated user with invalid reset password token should not be able to change their password' do
|
145
|
-
user = create_user
|
146
|
-
reset_password reset_password_token: 'invalid_reset_password'
|
147
|
-
|
148
|
-
assert_response :success
|
149
|
-
assert_current_url '/users/password'
|
150
|
-
assert_have_selector '#error_explanation'
|
151
|
-
assert_contain %r{Reset password token(.*)invalid}
|
152
|
-
refute user.reload.valid_password?('987654321')
|
153
|
-
end
|
154
|
-
|
155
|
-
test 'not authenticated user with valid reset password token but invalid password should not be able to change their password' do
|
156
|
-
user = create_user
|
157
|
-
request_forgot_password
|
158
|
-
reset_password do
|
159
|
-
fill_in 'Confirm new password', with: 'other_password'
|
160
|
-
end
|
161
|
-
|
162
|
-
assert_response :success
|
163
|
-
assert_current_url '/users/password'
|
164
|
-
assert_have_selector '#error_explanation'
|
165
|
-
assert_contain "Password confirmation doesn't match Password"
|
166
|
-
refute user.reload.valid_password?('987654321')
|
167
|
-
end
|
168
|
-
|
169
|
-
test 'not authenticated user with valid data should be able to change their password' do
|
170
|
-
user = create_user
|
171
|
-
request_forgot_password
|
172
|
-
reset_password
|
173
|
-
|
174
|
-
assert_current_url '/'
|
175
|
-
assert_contain 'Your password has been changed successfully. You are now signed in.'
|
176
|
-
assert user.reload.valid_password?('987654321')
|
177
|
-
end
|
178
|
-
|
179
|
-
test 'after entering invalid data user should still be able to change their password' do
|
180
|
-
user = create_user
|
181
|
-
request_forgot_password
|
182
|
-
|
183
|
-
reset_password { fill_in 'Confirm new password', with: 'other_password' }
|
184
|
-
assert_response :success
|
185
|
-
assert_have_selector '#error_explanation'
|
186
|
-
refute user.reload.valid_password?('987654321')
|
187
|
-
|
188
|
-
reset_password visit: false
|
189
|
-
assert_contain 'Your password has been changed successfully.'
|
190
|
-
assert user.reload.valid_password?('987654321')
|
191
|
-
end
|
192
|
-
|
193
|
-
test 'sign in user automatically after changing its password' do
|
194
|
-
create_user
|
195
|
-
request_forgot_password
|
196
|
-
reset_password
|
197
|
-
|
198
|
-
assert warden.authenticated?(:user)
|
199
|
-
end
|
200
|
-
|
201
|
-
test 'does not sign in user automatically after changing its password if config.sign_in_after_reset_password is false' do
|
202
|
-
swap Devise, sign_in_after_reset_password: false do
|
203
|
-
create_user
|
204
|
-
request_forgot_password
|
205
|
-
reset_password
|
206
|
-
|
207
|
-
assert_contain 'Your password has been 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
|
-
|
214
|
-
test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
|
215
|
-
[:none, :time].each do |strategy|
|
216
|
-
swap Devise, unlock_strategy: strategy do
|
217
|
-
create_user(locked: true)
|
218
|
-
request_forgot_password
|
219
|
-
reset_password
|
220
|
-
|
221
|
-
assert_contain 'Your password has been changed successfully.'
|
222
|
-
assert_not_contain 'You are now signed in.'
|
223
|
-
assert_equal new_user_session_path, @request.path
|
224
|
-
assert !warden.authenticated?(:user)
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
|
230
|
-
swap Devise, unlock_strategy: :email do
|
231
|
-
user = create_user(locked: true)
|
232
|
-
request_forgot_password
|
233
|
-
reset_password
|
234
|
-
|
235
|
-
assert_contain 'Your password has been changed successfully.'
|
236
|
-
assert !user.reload.access_locked?
|
237
|
-
assert warden.authenticated?(:user)
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
|
242
|
-
swap Devise, unlock_strategy: :both do
|
243
|
-
user = create_user(locked: true)
|
244
|
-
request_forgot_password
|
245
|
-
reset_password
|
246
|
-
|
247
|
-
assert_contain 'Your password has been changed successfully.'
|
248
|
-
assert !user.reload.access_locked?
|
249
|
-
assert warden.authenticated?(:user)
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
test 'reset password request with valid E-Mail in XML format should return valid response' do
|
254
|
-
create_user
|
255
|
-
post user_password_path(format: 'xml'), params: { user: {email: "user@test.com"} }
|
256
|
-
assert_response :success
|
257
|
-
assert_equal response.body, { }.to_xml
|
258
|
-
end
|
259
|
-
|
260
|
-
test 'reset password request with invalid E-Mail in XML format should return valid response' do
|
261
|
-
create_user
|
262
|
-
post user_password_path(format: 'xml'), params: { user: {email: "invalid.test@test.com"} }
|
263
|
-
assert_response :unprocessable_entity
|
264
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
265
|
-
end
|
266
|
-
|
267
|
-
test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
|
268
|
-
swap Devise, paranoid: true do
|
269
|
-
create_user
|
270
|
-
post user_password_path(format: 'xml'), params: { user: {email: "invalid@test.com"} }
|
271
|
-
assert_response :success
|
272
|
-
assert_equal response.body, { }.to_xml
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
test 'change password with valid parameters in XML format should return valid response' do
|
277
|
-
create_user
|
278
|
-
request_forgot_password
|
279
|
-
put user_password_path(format: 'xml'), params: { user: {
|
280
|
-
reset_password_token: 'abcdef', password: '987654321', password_confirmation: '987654321'
|
281
|
-
}
|
282
|
-
}
|
283
|
-
assert_response :success
|
284
|
-
assert warden.authenticated?(:user)
|
285
|
-
end
|
286
|
-
|
287
|
-
test 'change password with invalid token in XML format should return invalid response' do
|
288
|
-
create_user
|
289
|
-
request_forgot_password
|
290
|
-
put user_password_path(format: 'xml'), params: { user: {reset_password_token: 'invalid.token', password: '987654321', password_confirmation: '987654321'} }
|
291
|
-
assert_response :unprocessable_entity
|
292
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
293
|
-
end
|
294
|
-
|
295
|
-
test 'change password with invalid new password in XML format should return invalid response' do
|
296
|
-
user = create_user
|
297
|
-
request_forgot_password
|
298
|
-
put user_password_path(format: 'xml'), params: { user: {reset_password_token: user.reload.reset_password_token, password: '', password_confirmation: '987654321'} }
|
299
|
-
assert_response :unprocessable_entity
|
300
|
-
assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
|
301
|
-
end
|
302
|
-
|
303
|
-
test "when using json requests to ask a confirmable request, should not return the object" do
|
304
|
-
user = create_user(confirm: false)
|
305
|
-
|
306
|
-
post user_password_path(format: :json), params: { user: { email: user.email } }
|
307
|
-
|
308
|
-
assert_response :success
|
309
|
-
assert_equal response.body, "{}"
|
310
|
-
end
|
311
|
-
|
312
|
-
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
|
313
|
-
swap Devise, paranoid: true do
|
314
|
-
visit_new_password_path
|
315
|
-
fill_in "email", with: "arandomemail@test.com"
|
316
|
-
click_button 'Send me reset password instructions'
|
317
|
-
|
318
|
-
assert_not_contain "1 error prohibited this user from being saved:"
|
319
|
-
assert_not_contain "Email not found"
|
320
|
-
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."
|
321
|
-
assert_current_url "/users/sign_in"
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
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
|
326
|
-
swap Devise, paranoid: true do
|
327
|
-
user = create_user
|
328
|
-
visit_new_password_path
|
329
|
-
fill_in 'email', with: user.email
|
330
|
-
click_button 'Send me reset password instructions'
|
331
|
-
|
332
|
-
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."
|
333
|
-
assert_current_url "/users/sign_in"
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
test "after recovering a password, should set failed attempts to 0" do
|
338
|
-
user = create_user
|
339
|
-
user.update_attribute(:failed_attempts, 10)
|
340
|
-
|
341
|
-
assert_equal 10, user.failed_attempts
|
342
|
-
request_forgot_password
|
343
|
-
reset_password
|
344
|
-
|
345
|
-
assert warden.authenticated?(:user)
|
346
|
-
user.reload
|
347
|
-
assert_equal 0, user.failed_attempts
|
348
|
-
end
|
349
|
-
end
|