devise 4.3.0 → 4.9.2
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +205 -2
- data/MIT-LICENSE +2 -1
- data/README.md +214 -57
- data/app/controllers/devise/confirmations_controller.rb +3 -0
- data/app/controllers/devise/omniauth_callbacks_controller.rb +3 -1
- data/app/controllers/devise/passwords_controller.rb +5 -2
- data/app/controllers/devise/registrations_controller.rb +32 -12
- data/app/controllers/devise/sessions_controller.rb +4 -2
- data/app/controllers/devise/unlocks_controller.rb +3 -0
- data/app/controllers/devise_controller.rb +6 -3
- data/app/helpers/devise_helper.rb +23 -18
- data/app/mailers/devise/mailer.rb +7 -5
- data/app/views/devise/confirmations/new.html.erb +2 -2
- data/app/views/devise/passwords/edit.html.erb +3 -3
- data/app/views/devise/passwords/new.html.erb +2 -2
- data/app/views/devise/registrations/edit.html.erb +6 -6
- data/app/views/devise/registrations/new.html.erb +4 -4
- data/app/views/devise/sessions/new.html.erb +4 -4
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/_links.html.erb +8 -8
- data/app/views/devise/unlocks/new.html.erb +2 -2
- data/config/locales/en.yml +3 -2
- data/lib/devise/controllers/helpers.rb +10 -8
- data/lib/devise/controllers/rememberable.rb +2 -0
- data/lib/devise/controllers/responder.rb +35 -0
- data/lib/devise/controllers/scoped_views.rb +2 -0
- data/lib/devise/controllers/sign_in_out.rb +14 -4
- data/lib/devise/controllers/store_location.rb +24 -6
- data/lib/devise/controllers/url_helpers.rb +3 -1
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +2 -0
- data/lib/devise/failure_app.rb +33 -7
- data/lib/devise/hooks/activatable.rb +2 -0
- data/lib/devise/hooks/csrf_cleaner.rb +8 -1
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +4 -5
- data/lib/devise/hooks/proxy.rb +2 -0
- data/lib/devise/hooks/rememberable.rb +2 -0
- data/lib/devise/hooks/timeoutable.rb +4 -2
- data/lib/devise/hooks/trackable.rb +2 -0
- data/lib/devise/mailers/helpers.rb +2 -0
- data/lib/devise/mapping.rb +3 -1
- data/lib/devise/models/authenticatable.rb +55 -50
- data/lib/devise/models/confirmable.rb +36 -40
- data/lib/devise/models/database_authenticatable.rb +57 -36
- data/lib/devise/models/lockable.rb +18 -4
- data/lib/devise/models/omniauthable.rb +4 -2
- data/lib/devise/models/recoverable.rb +10 -19
- data/lib/devise/models/registerable.rb +4 -0
- data/lib/devise/models/rememberable.rb +5 -3
- data/lib/devise/models/timeoutable.rb +3 -1
- data/lib/devise/models/trackable.rb +15 -1
- data/lib/devise/models/validatable.rb +7 -10
- data/lib/devise/models.rb +3 -0
- data/lib/devise/modules.rb +2 -0
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +2 -0
- data/lib/devise/omniauth.rb +4 -5
- data/lib/devise/orm/active_record.rb +2 -0
- data/lib/devise/orm/mongoid.rb +2 -0
- data/lib/devise/orm.rb +71 -0
- data/lib/devise/parameter_filter.rb +4 -0
- data/lib/devise/parameter_sanitizer.rb +15 -1
- data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
- data/lib/devise/rails/routes.rb +8 -6
- data/lib/devise/rails/warden_compat.rb +2 -0
- data/lib/devise/rails.rb +3 -5
- data/lib/devise/secret_key_finder.rb +27 -0
- data/lib/devise/strategies/authenticatable.rb +3 -1
- data/lib/devise/strategies/base.rb +2 -0
- data/lib/devise/strategies/database_authenticatable.rb +8 -1
- data/lib/devise/strategies/rememberable.rb +2 -0
- data/lib/devise/test/controller_helpers.rb +6 -1
- data/lib/devise/test/integration_helpers.rb +3 -1
- data/lib/devise/test_helpers.rb +2 -0
- data/lib/devise/time_inflector.rb +2 -0
- data/lib/devise/token_generator.rb +2 -0
- data/lib/devise/version.rb +3 -1
- data/lib/devise.rb +38 -12
- data/lib/generators/active_record/devise_generator.rb +40 -12
- data/lib/generators/active_record/templates/migration.rb +3 -1
- data/lib/generators/active_record/templates/migration_existing.rb +2 -0
- data/lib/generators/devise/controllers_generator.rb +3 -1
- data/lib/generators/devise/devise_generator.rb +5 -3
- data/lib/generators/devise/install_generator.rb +3 -5
- data/lib/generators/devise/orm_helpers.rb +9 -3
- data/lib/generators/devise/views_generator.rb +8 -9
- data/lib/generators/mongoid/devise_generator.rb +7 -5
- data/lib/generators/templates/README +9 -1
- data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
- data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +2 -0
- data/lib/generators/templates/controllers/sessions_controller.rb +2 -0
- data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
- data/lib/generators/templates/devise.rb +43 -7
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +12 -4
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
- metadata +24 -307
- data/.gitignore +0 -10
- data/.travis.yml +0 -58
- data/.yardopts +0 -9
- data/CODE_OF_CONDUCT.md +0 -22
- data/CONTRIBUTING.md +0 -79
- data/Gemfile +0 -40
- data/Gemfile.lock +0 -194
- data/Rakefile +0 -36
- data/bin/test +0 -13
- data/devise.gemspec +0 -26
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-4.1-stable +0 -30
- data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
- data/gemfiles/Gemfile.rails-4.2-stable +0 -30
- data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
- data/gemfiles/Gemfile.rails-5.0-stable +0 -34
- data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -193
- data/guides/bug_report_templates/integration_test.rb +0 -104
- data/test/controllers/custom_registrations_controller_test.rb +0 -40
- data/test/controllers/custom_strategy_test.rb +0 -64
- data/test/controllers/helper_methods_test.rb +0 -22
- data/test/controllers/helpers_test.rb +0 -316
- data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
- data/test/controllers/internal_helpers_test.rb +0 -127
- data/test/controllers/load_hooks_controller_test.rb +0 -19
- data/test/controllers/passwords_controller_test.rb +0 -32
- data/test/controllers/sessions_controller_test.rb +0 -106
- data/test/controllers/url_helpers_test.rb +0 -65
- data/test/delegator_test.rb +0 -19
- data/test/devise_test.rb +0 -107
- data/test/failure_app_test.rb +0 -338
- data/test/generators/active_record_generator_test.rb +0 -83
- data/test/generators/controllers_generator_test.rb +0 -48
- data/test/generators/devise_generator_test.rb +0 -39
- data/test/generators/install_generator_test.rb +0 -24
- data/test/generators/mongoid_generator_test.rb +0 -23
- data/test/generators/views_generator_test.rb +0 -103
- data/test/helpers/devise_helper_test.rb +0 -49
- data/test/integration/authenticatable_test.rb +0 -698
- data/test/integration/confirmable_test.rb +0 -324
- data/test/integration/database_authenticatable_test.rb +0 -95
- data/test/integration/http_authenticatable_test.rb +0 -106
- data/test/integration/lockable_test.rb +0 -240
- data/test/integration/mounted_engine_test.rb +0 -36
- data/test/integration/omniauthable_test.rb +0 -135
- data/test/integration/recoverable_test.rb +0 -347
- data/test/integration/registerable_test.rb +0 -363
- data/test/integration/rememberable_test.rb +0 -217
- data/test/integration/timeoutable_test.rb +0 -184
- data/test/integration/trackable_test.rb +0 -92
- data/test/mailers/confirmation_instructions_test.rb +0 -115
- data/test/mailers/email_changed_test.rb +0 -130
- data/test/mailers/mailer_test.rb +0 -18
- 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 -134
- data/test/models/authenticatable_test.rb +0 -23
- data/test/models/confirmable_test.rb +0 -536
- data/test/models/database_authenticatable_test.rb +0 -281
- data/test/models/lockable_test.rb +0 -350
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -261
- data/test/models/registerable_test.rb +0 -7
- data/test/models/rememberable_test.rb +0 -182
- data/test/models/serializable_test.rb +0 -54
- data/test/models/timeoutable_test.rb +0 -51
- data/test/models/trackable_test.rb +0 -41
- data/test/models/validatable_test.rb +0 -119
- data/test/models_test.rb +0 -153
- data/test/omniauth/config_test.rb +0 -59
- data/test/omniauth/url_helpers_test.rb +0 -51
- data/test/orm/active_record.rb +0 -17
- data/test/orm/mongoid.rb +0 -13
- data/test/parameter_sanitizer_test.rb +0 -75
- 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 -7
- data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
- data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
- data/test/rails_app/app/active_record/user_without_email.rb +0 -8
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
- data/test/rails_app/app/controllers/admins_controller.rb +0 -6
- data/test/rails_app/app/controllers/application_controller.rb +0 -11
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
- data/test/rails_app/app/controllers/home_controller.rb +0 -29
- 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/from_proc_mailer.rb +0 -3
- data/test/rails_app/app/mailers/users/mailer.rb +0 -3
- data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
- 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/mongoid/user_on_engine.rb +0 -39
- data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
- data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
- 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 -44
- data/test/rails_app/config/boot.rb +0 -20
- 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 -86
- data/test/rails_app/config/environments/test.rb +0 -45
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/rails_app/config/initializers/devise.rb +0 -180
- data/test/rails_app/config/initializers/inflections.rb +0 -2
- data/test/rails_app/config/initializers/secret_token.rb +0 -3
- data/test/rails_app/config/initializers/session_store.rb +0 -1
- data/test/rails_app/config/routes.rb +0 -126
- data/test/rails_app/config.ru +0 -4
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -75
- data/test/rails_app/db/schema.rb +0 -55
- data/test/rails_app/lib/shared_admin.rb +0 -21
- data/test/rails_app/lib/shared_user.rb +0 -30
- data/test/rails_app/lib/shared_user_without_email.rb +0 -26
- data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
- 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 -9
- data/test/routes_test.rb +0 -279
- data/test/support/action_controller/record_identifier.rb +0 -10
- data/test/support/assertions.rb +0 -28
- data/test/support/helpers.rb +0 -77
- data/test/support/http_method_compatibility.rb +0 -51
- data/test/support/integration.rb +0 -92
- data/test/support/locale/en.yml +0 -8
- data/test/support/mongoid.yml +0 -6
- data/test/support/webrat/integrations/rails.rb +0 -33
- data/test/test/controller_helpers_test.rb +0 -186
- data/test/test/integration_helpers_test.rb +0 -32
- data/test/test_helper.rb +0 -34
- data/test/test_models.rb +0 -33
@@ -1,261 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class RecoverableTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
setup_mailer
|
7
|
-
end
|
8
|
-
|
9
|
-
test 'should not generate reset password token after creating a record' do
|
10
|
-
assert_nil new_user.reset_password_token
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'should never generate the same reset password token for different users' do
|
14
|
-
reset_password_tokens = []
|
15
|
-
3.times do
|
16
|
-
user = create_user
|
17
|
-
user.send_reset_password_instructions
|
18
|
-
token = user.reset_password_token
|
19
|
-
assert !reset_password_tokens.include?(token)
|
20
|
-
reset_password_tokens << token
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'should reset password and password confirmation from params' do
|
25
|
-
user = create_user
|
26
|
-
user.reset_password('123456789', '987654321')
|
27
|
-
assert_equal '123456789', user.password
|
28
|
-
assert_equal '987654321', user.password_confirmation
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'should reset password and save the record' do
|
32
|
-
assert create_user.reset_password('123456789', '123456789')
|
33
|
-
end
|
34
|
-
|
35
|
-
test 'should clear reset password token while reseting the password' do
|
36
|
-
user = create_user
|
37
|
-
assert_nil user.reset_password_token
|
38
|
-
|
39
|
-
user.send_reset_password_instructions
|
40
|
-
assert_present user.reset_password_token
|
41
|
-
assert user.reset_password('123456789', '123456789')
|
42
|
-
assert_nil user.reset_password_token
|
43
|
-
end
|
44
|
-
|
45
|
-
test 'should not clear reset password token for new user' do
|
46
|
-
user = new_user
|
47
|
-
assert_nil user.reset_password_token
|
48
|
-
|
49
|
-
user.send_reset_password_instructions
|
50
|
-
assert_present user.reset_password_token
|
51
|
-
|
52
|
-
user.save
|
53
|
-
assert_present user.reset_password_token
|
54
|
-
end
|
55
|
-
|
56
|
-
test 'should clear reset password token if changing password' do
|
57
|
-
user = create_user
|
58
|
-
assert_nil user.reset_password_token
|
59
|
-
|
60
|
-
user.send_reset_password_instructions
|
61
|
-
assert_present user.reset_password_token
|
62
|
-
user.password = "123456678"
|
63
|
-
user.password_confirmation = "123456678"
|
64
|
-
user.save!
|
65
|
-
assert_nil user.reset_password_token
|
66
|
-
end
|
67
|
-
|
68
|
-
test 'should clear reset password token if changing email' do
|
69
|
-
user = create_user
|
70
|
-
assert_nil user.reset_password_token
|
71
|
-
|
72
|
-
user.send_reset_password_instructions
|
73
|
-
assert_present user.reset_password_token
|
74
|
-
user.email = "another@example.com"
|
75
|
-
user.save!
|
76
|
-
assert_nil user.reset_password_token
|
77
|
-
end
|
78
|
-
|
79
|
-
test 'should clear reset password successfully even if there is no email' do
|
80
|
-
user = create_user_without_email
|
81
|
-
assert_nil user.reset_password_token
|
82
|
-
|
83
|
-
user.send_reset_password_instructions
|
84
|
-
assert_present user.reset_password_token
|
85
|
-
user.password = "123456678"
|
86
|
-
user.password_confirmation = "123456678"
|
87
|
-
user.save!
|
88
|
-
assert_nil user.reset_password_token
|
89
|
-
end
|
90
|
-
|
91
|
-
test 'should not clear reset password token if record is invalid' do
|
92
|
-
user = create_user
|
93
|
-
user.send_reset_password_instructions
|
94
|
-
assert_present user.reset_password_token
|
95
|
-
refute user.reset_password('123456789', '987654321')
|
96
|
-
assert_present user.reset_password_token
|
97
|
-
end
|
98
|
-
|
99
|
-
test 'should not reset password with invalid data' do
|
100
|
-
user = create_user
|
101
|
-
user.stubs(:valid?).returns(false)
|
102
|
-
refute user.reset_password('123456789', '987654321')
|
103
|
-
end
|
104
|
-
|
105
|
-
test 'should reset reset password token and send instructions by email' do
|
106
|
-
user = create_user
|
107
|
-
assert_email_sent do
|
108
|
-
token = user.reset_password_token
|
109
|
-
user.send_reset_password_instructions
|
110
|
-
assert_not_equal token, user.reset_password_token
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
test 'should find a user to send instructions by email' do
|
115
|
-
user = create_user
|
116
|
-
reset_password_user = User.send_reset_password_instructions(email: user.email)
|
117
|
-
assert_equal reset_password_user, user
|
118
|
-
end
|
119
|
-
|
120
|
-
test 'should return a new record with errors if user was not found by e-mail' do
|
121
|
-
reset_password_user = User.send_reset_password_instructions(email: "invalid@example.com")
|
122
|
-
refute reset_password_user.persisted?
|
123
|
-
assert_equal "not found", reset_password_user.errors[:email].join
|
124
|
-
end
|
125
|
-
|
126
|
-
test 'should find a user to send instructions by authentication_keys' do
|
127
|
-
swap Devise, authentication_keys: [:username, :email] do
|
128
|
-
user = create_user
|
129
|
-
reset_password_user = User.send_reset_password_instructions(email: user.email, username: user.username)
|
130
|
-
assert_equal reset_password_user, user
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
test 'should require all reset_password_keys' do
|
135
|
-
swap Devise, reset_password_keys: [:username, :email] do
|
136
|
-
user = create_user
|
137
|
-
reset_password_user = User.send_reset_password_instructions(email: user.email)
|
138
|
-
refute reset_password_user.persisted?
|
139
|
-
assert_equal "can't be blank", reset_password_user.errors[:username].join
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
test 'should reset reset_password_token before send the reset instructions email' do
|
144
|
-
user = create_user
|
145
|
-
token = user.reset_password_token
|
146
|
-
User.send_reset_password_instructions(email: user.email)
|
147
|
-
assert_not_equal token, user.reload.reset_password_token
|
148
|
-
end
|
149
|
-
|
150
|
-
test 'should send email instructions to the user reset their password' do
|
151
|
-
user = create_user
|
152
|
-
assert_email_sent do
|
153
|
-
User.send_reset_password_instructions(email: user.email)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
test 'should find a user to reset their password based on the raw token' do
|
158
|
-
user = create_user
|
159
|
-
raw = user.send_reset_password_instructions
|
160
|
-
|
161
|
-
reset_password_user = User.reset_password_by_token(reset_password_token: raw)
|
162
|
-
assert_equal reset_password_user, user
|
163
|
-
end
|
164
|
-
|
165
|
-
test 'should return a new record with errors if no reset_password_token is found' do
|
166
|
-
reset_password_user = User.reset_password_by_token(reset_password_token: 'invalid_token')
|
167
|
-
refute reset_password_user.persisted?
|
168
|
-
assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
|
169
|
-
end
|
170
|
-
|
171
|
-
test 'should return a new record with errors if reset_password_token is blank' do
|
172
|
-
reset_password_user = User.reset_password_by_token(reset_password_token: '')
|
173
|
-
refute reset_password_user.persisted?
|
174
|
-
assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
|
175
|
-
end
|
176
|
-
|
177
|
-
test 'should return a new record with errors if password is blank' do
|
178
|
-
user = create_user
|
179
|
-
raw = user.send_reset_password_instructions
|
180
|
-
|
181
|
-
reset_password_user = User.reset_password_by_token(reset_password_token: raw, password: '')
|
182
|
-
refute reset_password_user.errors.empty?
|
183
|
-
assert_match "can't be blank", reset_password_user.errors[:password].join
|
184
|
-
assert_equal raw, reset_password_user.reset_password_token
|
185
|
-
end
|
186
|
-
|
187
|
-
test 'should return a new record with errors if password is not provided' do
|
188
|
-
user = create_user
|
189
|
-
raw = user.send_reset_password_instructions
|
190
|
-
|
191
|
-
reset_password_user = User.reset_password_by_token(reset_password_token: raw)
|
192
|
-
refute reset_password_user.errors.empty?
|
193
|
-
assert_match "can't be blank", reset_password_user.errors[:password].join
|
194
|
-
assert_equal raw, reset_password_user.reset_password_token
|
195
|
-
end
|
196
|
-
|
197
|
-
test 'should reset successfully user password given the new password and confirmation' do
|
198
|
-
user = create_user
|
199
|
-
old_password = user.password
|
200
|
-
raw = user.send_reset_password_instructions
|
201
|
-
|
202
|
-
reset_password_user = User.reset_password_by_token(
|
203
|
-
reset_password_token: raw,
|
204
|
-
password: 'new_password',
|
205
|
-
password_confirmation: 'new_password'
|
206
|
-
)
|
207
|
-
assert_nil reset_password_user.reset_password_token
|
208
|
-
|
209
|
-
user.reload
|
210
|
-
refute user.valid_password?(old_password)
|
211
|
-
assert user.valid_password?('new_password')
|
212
|
-
assert_nil user.reset_password_token
|
213
|
-
end
|
214
|
-
|
215
|
-
test 'should not reset password after reset_password_within time' do
|
216
|
-
swap Devise, reset_password_within: 1.hour do
|
217
|
-
user = create_user
|
218
|
-
raw = user.send_reset_password_instructions
|
219
|
-
|
220
|
-
old_password = user.password
|
221
|
-
user.reset_password_sent_at = 2.days.ago
|
222
|
-
user.save!
|
223
|
-
|
224
|
-
reset_password_user = User.reset_password_by_token(
|
225
|
-
reset_password_token: raw,
|
226
|
-
password: 'new_password',
|
227
|
-
password_confirmation: 'new_password'
|
228
|
-
)
|
229
|
-
user.reload
|
230
|
-
|
231
|
-
assert user.valid_password?(old_password)
|
232
|
-
refute user.valid_password?('new_password')
|
233
|
-
assert_equal "has expired, please request a new one", reset_password_user.errors[:reset_password_token].join
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
test 'required_fields should contain the fields that Devise uses' do
|
238
|
-
assert_equal Devise::Models::Recoverable.required_fields(User), [
|
239
|
-
:reset_password_sent_at,
|
240
|
-
:reset_password_token
|
241
|
-
]
|
242
|
-
end
|
243
|
-
|
244
|
-
test 'should return a user based on the raw token' do
|
245
|
-
user = create_user
|
246
|
-
raw = user.send_reset_password_instructions
|
247
|
-
|
248
|
-
assert_equal User.with_reset_password_token(raw), user
|
249
|
-
end
|
250
|
-
|
251
|
-
test 'should return the same reset password token as generated' do
|
252
|
-
user = create_user
|
253
|
-
raw = user.send_reset_password_instructions
|
254
|
-
assert_equal Devise.token_generator.digest(self.class, :reset_password_token, raw), user.reset_password_token
|
255
|
-
end
|
256
|
-
|
257
|
-
test 'should return nil if a user based on the raw token is not found' do
|
258
|
-
assert_nil User.with_reset_password_token('random-token')
|
259
|
-
end
|
260
|
-
|
261
|
-
end
|
@@ -1,182 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class RememberableTest < ActiveSupport::TestCase
|
4
|
-
def resource_class
|
5
|
-
User
|
6
|
-
end
|
7
|
-
|
8
|
-
def create_resource
|
9
|
-
create_user
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'remember_me should not generate a new token if using salt' do
|
13
|
-
user = create_user
|
14
|
-
user.expects(:valid?).never
|
15
|
-
user.remember_me!
|
16
|
-
assert user.remember_created_at
|
17
|
-
end
|
18
|
-
|
19
|
-
test 'remember_me should not generate a new token if valid token exists' do
|
20
|
-
user = create_user
|
21
|
-
user.singleton_class.send(:attr_accessor, :remember_token)
|
22
|
-
User.to_adapter.expects(:find_first).returns(nil)
|
23
|
-
|
24
|
-
user.remember_me!
|
25
|
-
existing_token = user.remember_token
|
26
|
-
|
27
|
-
user.remember_me!
|
28
|
-
assert_equal existing_token, user.remember_token
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'forget_me should not clear remember token if using salt' do
|
32
|
-
user = create_user
|
33
|
-
user.remember_me!
|
34
|
-
user.expects(:valid?).never
|
35
|
-
user.forget_me!
|
36
|
-
end
|
37
|
-
|
38
|
-
test 'can generate remember token' do
|
39
|
-
user = create_user
|
40
|
-
user.singleton_class.send(:attr_accessor, :remember_token)
|
41
|
-
User.to_adapter.expects(:find_first).returns(nil)
|
42
|
-
user.remember_me!
|
43
|
-
assert user.remember_token
|
44
|
-
end
|
45
|
-
|
46
|
-
test 'serialize into cookie' do
|
47
|
-
user = create_user
|
48
|
-
user.remember_me!
|
49
|
-
id, token, date = User.serialize_into_cookie(user)
|
50
|
-
assert_equal id, user.to_key
|
51
|
-
assert_equal token, user.authenticatable_salt
|
52
|
-
assert date.is_a?(String)
|
53
|
-
end
|
54
|
-
|
55
|
-
test 'serialize from cookie' do
|
56
|
-
user = create_user
|
57
|
-
user.remember_me!
|
58
|
-
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc)
|
59
|
-
end
|
60
|
-
|
61
|
-
test 'serialize from cookie should accept a String with the datetime seconds and microseconds' do
|
62
|
-
user = create_user
|
63
|
-
user.remember_me!
|
64
|
-
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc.to_f.to_json)
|
65
|
-
end
|
66
|
-
|
67
|
-
test 'serialize from cookie should return nil with invalid datetime' do
|
68
|
-
user = create_user
|
69
|
-
user.remember_me!
|
70
|
-
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, "2013")
|
71
|
-
end
|
72
|
-
|
73
|
-
test 'serialize from cookie should return nil if no resource is found' do
|
74
|
-
assert_nil resource_class.serialize_from_cookie([0], "123", Time.now.utc)
|
75
|
-
end
|
76
|
-
|
77
|
-
test 'serialize from cookie should return nil if no timestamp' do
|
78
|
-
user = create_user
|
79
|
-
user.remember_me!
|
80
|
-
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
|
81
|
-
end
|
82
|
-
|
83
|
-
test 'serialize from cookie should return nil if timestamp is earlier than token creation' do
|
84
|
-
user = create_user
|
85
|
-
user.remember_me!
|
86
|
-
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 1.day.ago)
|
87
|
-
end
|
88
|
-
|
89
|
-
test 'serialize from cookie should return nil if timestamp is older than remember_for' do
|
90
|
-
user = create_user
|
91
|
-
user.remember_created_at = 1.month.ago
|
92
|
-
user.remember_me!
|
93
|
-
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 3.weeks.ago)
|
94
|
-
end
|
95
|
-
|
96
|
-
test 'serialize from cookie me return nil if is a valid resource with invalid token' do
|
97
|
-
user = create_user
|
98
|
-
user.remember_me!
|
99
|
-
assert_nil User.serialize_from_cookie(user.to_key, "123", Time.now.utc)
|
100
|
-
end
|
101
|
-
|
102
|
-
test 'raises a RuntimeError if the user does not implements a rememberable value' do
|
103
|
-
user = User.new
|
104
|
-
assert_raise(RuntimeError) { user.rememberable_value }
|
105
|
-
|
106
|
-
user_with_remember_token = User.new
|
107
|
-
def user_with_remember_token.remember_token; '123-token'; end
|
108
|
-
assert_equal '123-token', user_with_remember_token.rememberable_value
|
109
|
-
|
110
|
-
user_with_salt = User.new
|
111
|
-
def user_with_salt.authenticatable_salt; '123-salt'; end
|
112
|
-
assert_equal '123-salt', user_with_salt.rememberable_value
|
113
|
-
end
|
114
|
-
|
115
|
-
test 'raises a RuntimeError if authenticatable_salt is nil or empty' do
|
116
|
-
user = User.new
|
117
|
-
def user.authenticatable_salt; nil; end
|
118
|
-
assert_raise RuntimeError do
|
119
|
-
user.rememberable_value
|
120
|
-
end
|
121
|
-
|
122
|
-
user = User.new
|
123
|
-
def user.authenticatable_salt; ""; end
|
124
|
-
assert_raise RuntimeError do
|
125
|
-
user.rememberable_value
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
test 'should respond to remember_me attribute' do
|
130
|
-
assert resource_class.new.respond_to?(:remember_me)
|
131
|
-
assert resource_class.new.respond_to?(:remember_me=)
|
132
|
-
end
|
133
|
-
|
134
|
-
test 'forget_me should clear remember_created_at if expire_all_remember_me_on_sign_out is true' do
|
135
|
-
swap Devise, expire_all_remember_me_on_sign_out: true do
|
136
|
-
resource = create_resource
|
137
|
-
resource.remember_me!
|
138
|
-
assert_not_nil resource.remember_created_at
|
139
|
-
|
140
|
-
resource.forget_me!
|
141
|
-
assert_nil resource.remember_created_at
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
test 'forget_me should not clear remember_created_at if expire_all_remember_me_on_sign_out is false' do
|
146
|
-
swap Devise, expire_all_remember_me_on_sign_out: false do
|
147
|
-
resource = create_resource
|
148
|
-
resource.remember_me!
|
149
|
-
|
150
|
-
assert_not_nil resource.remember_created_at
|
151
|
-
|
152
|
-
resource.forget_me!
|
153
|
-
assert_not_nil resource.remember_created_at
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
test 'forget_me should not try to update resource if it has been destroyed' do
|
158
|
-
resource = create_resource
|
159
|
-
resource.expects(:remember_created_at).never
|
160
|
-
resource.expects(:save).never
|
161
|
-
|
162
|
-
resource.destroy
|
163
|
-
resource.forget_me!
|
164
|
-
end
|
165
|
-
|
166
|
-
test 'remember expires at uses remember for configuration' do
|
167
|
-
swap Devise, remember_for: 3.days do
|
168
|
-
resource = create_resource
|
169
|
-
resource.remember_me!
|
170
|
-
assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
|
171
|
-
|
172
|
-
Devise.remember_for = 5.days
|
173
|
-
assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
test 'should have the required_fields array' do
|
178
|
-
assert_equal Devise::Models::Rememberable.required_fields(User), [
|
179
|
-
:remember_created_at
|
180
|
-
]
|
181
|
-
end
|
182
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class SerializableTest < ActiveSupport::TestCase
|
4
|
-
setup do
|
5
|
-
@user = create_user
|
6
|
-
end
|
7
|
-
|
8
|
-
test 'should not include unsafe keys on XML' do
|
9
|
-
assert_match(/email/, @user.to_xml)
|
10
|
-
assert_no_match(/confirmation-token/, @user.to_xml)
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'should not include unsafe keys on XML even if a new except is provided' do
|
14
|
-
assert_no_match(/email/, @user.to_xml(except: :email))
|
15
|
-
assert_no_match(/confirmation-token/, @user.to_xml(except: :email))
|
16
|
-
end
|
17
|
-
|
18
|
-
test 'should include unsafe keys on XML if a force_except is provided' do
|
19
|
-
assert_no_match(/<email/, @user.to_xml(force_except: :email))
|
20
|
-
assert_match(/confirmation-token/, @user.to_xml(force_except: :email))
|
21
|
-
end
|
22
|
-
|
23
|
-
test 'should not include unsafe keys on JSON' do
|
24
|
-
keys = from_json().keys.select{ |key| !key.include?("id") }
|
25
|
-
assert_equal %w(created_at email facebook_token updated_at username), keys.sort
|
26
|
-
end
|
27
|
-
|
28
|
-
test 'should not include unsafe keys on JSON even if a new except is provided' do
|
29
|
-
assert_no_key "email", from_json(except: :email)
|
30
|
-
assert_no_key "confirmation_token", from_json(except: :email)
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'should include unsafe keys on JSON if a force_except is provided' do
|
34
|
-
assert_no_key "email", from_json(force_except: :email)
|
35
|
-
assert_key "confirmation_token", from_json(force_except: :email)
|
36
|
-
end
|
37
|
-
|
38
|
-
test 'should not include unsafe keys in inspect' do
|
39
|
-
assert_match(/email/, @user.inspect)
|
40
|
-
assert_no_match(/confirmation_token/, @user.inspect)
|
41
|
-
end
|
42
|
-
|
43
|
-
def assert_key(key, subject)
|
44
|
-
assert subject.key?(key), "Expected #{subject.inspect} to have key #{key.inspect}"
|
45
|
-
end
|
46
|
-
|
47
|
-
def assert_no_key(key, subject)
|
48
|
-
assert !subject.key?(key), "Expected #{subject.inspect} to not have key #{key.inspect}"
|
49
|
-
end
|
50
|
-
|
51
|
-
def from_json(options=nil)
|
52
|
-
ActiveSupport::JSON.decode(@user.to_json(options))["user"]
|
53
|
-
end
|
54
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TimeoutableTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
test 'should be expired' do
|
6
|
-
assert new_user.timedout?(31.minutes.ago)
|
7
|
-
end
|
8
|
-
|
9
|
-
test 'should not be expired' do
|
10
|
-
refute new_user.timedout?(29.minutes.ago)
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'should not be expired when params is nil' do
|
14
|
-
refute new_user.timedout?(nil)
|
15
|
-
end
|
16
|
-
|
17
|
-
test 'should use timeout_in method' do
|
18
|
-
user = new_user
|
19
|
-
user.instance_eval { def timeout_in; 10.minutes end }
|
20
|
-
|
21
|
-
assert user.timedout?(12.minutes.ago)
|
22
|
-
refute user.timedout?(8.minutes.ago)
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'should not be expired when timeout_in method returns nil' do
|
26
|
-
user = new_user
|
27
|
-
user.instance_eval { def timeout_in; nil end }
|
28
|
-
refute user.timedout?(10.hours.ago)
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'fallback to Devise config option' do
|
32
|
-
swap Devise, timeout_in: 1.minute do
|
33
|
-
user = new_user
|
34
|
-
assert user.timedout?(2.minutes.ago)
|
35
|
-
refute user.timedout?(30.seconds.ago)
|
36
|
-
|
37
|
-
Devise.timeout_in = 5.minutes
|
38
|
-
refute user.timedout?(2.minutes.ago)
|
39
|
-
assert user.timedout?(6.minutes.ago)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'required_fields should contain the fields that Devise uses' do
|
44
|
-
assert_equal Devise::Models::Timeoutable.required_fields(User), []
|
45
|
-
end
|
46
|
-
|
47
|
-
test 'should not raise error if remember_created_at is not empty and rememberable is disabled' do
|
48
|
-
user = create_admin(remember_created_at: Time.current)
|
49
|
-
assert user.timedout?(31.minutes.ago)
|
50
|
-
end
|
51
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TrackableTest < ActiveSupport::TestCase
|
4
|
-
test 'required_fields should contain the fields that Devise uses' do
|
5
|
-
assert_equal Devise::Models::Trackable.required_fields(User), [
|
6
|
-
:current_sign_in_at,
|
7
|
-
:current_sign_in_ip,
|
8
|
-
:last_sign_in_at,
|
9
|
-
:last_sign_in_ip,
|
10
|
-
:sign_in_count
|
11
|
-
]
|
12
|
-
end
|
13
|
-
|
14
|
-
test 'update_tracked_fields should only set attributes but not save the record' do
|
15
|
-
user = create_user
|
16
|
-
request = mock
|
17
|
-
request.stubs(:remote_ip).returns("127.0.0.1")
|
18
|
-
|
19
|
-
assert_nil user.current_sign_in_ip
|
20
|
-
assert_nil user.last_sign_in_ip
|
21
|
-
assert_nil user.current_sign_in_at
|
22
|
-
assert_nil user.last_sign_in_at
|
23
|
-
assert_equal 0, user.sign_in_count
|
24
|
-
|
25
|
-
user.update_tracked_fields(request)
|
26
|
-
|
27
|
-
assert_equal "127.0.0.1", user.current_sign_in_ip
|
28
|
-
assert_equal "127.0.0.1", user.last_sign_in_ip
|
29
|
-
assert_not_nil user.current_sign_in_at
|
30
|
-
assert_not_nil user.last_sign_in_at
|
31
|
-
assert_equal 1, user.sign_in_count
|
32
|
-
|
33
|
-
user.reload
|
34
|
-
|
35
|
-
assert_nil user.current_sign_in_ip
|
36
|
-
assert_nil user.last_sign_in_ip
|
37
|
-
assert_nil user.current_sign_in_at
|
38
|
-
assert_nil user.last_sign_in_at
|
39
|
-
assert_equal 0, user.sign_in_count
|
40
|
-
end
|
41
|
-
end
|