devise 3.0.0 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +351 -0
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +422 -130
  5. data/app/controllers/devise/confirmations_controller.rb +17 -6
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
  7. data/app/controllers/devise/passwords_controller.rb +23 -8
  8. data/app/controllers/devise/registrations_controller.rb +70 -28
  9. data/app/controllers/devise/sessions_controller.rb +49 -17
  10. data/app/controllers/devise/unlocks_controller.rb +11 -4
  11. data/app/controllers/devise_controller.rb +74 -34
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +25 -10
  14. data/app/views/devise/confirmations/new.html.erb +9 -5
  15. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  16. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  17. data/app/views/devise/mailer/password_change.html.erb +3 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
  20. data/app/views/devise/passwords/edit.html.erb +16 -7
  21. data/app/views/devise/passwords/new.html.erb +9 -5
  22. data/app/views/devise/registrations/edit.html.erb +29 -15
  23. data/app/views/devise/registrations/new.html.erb +20 -9
  24. data/app/views/devise/sessions/new.html.erb +19 -10
  25. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  26. data/app/views/devise/shared/{_links.erb → _links.html.erb} +10 -10
  27. data/app/views/devise/unlocks/new.html.erb +9 -5
  28. data/config/locales/en.yml +26 -20
  29. data/lib/devise/controllers/helpers.rb +122 -125
  30. data/lib/devise/controllers/rememberable.rb +14 -14
  31. data/lib/devise/controllers/scoped_views.rb +3 -1
  32. data/lib/devise/controllers/sign_in_out.rb +121 -0
  33. data/lib/devise/controllers/store_location.rb +76 -0
  34. data/lib/devise/controllers/url_helpers.rb +10 -8
  35. data/lib/devise/delegator.rb +2 -0
  36. data/lib/devise/encryptor.rb +24 -0
  37. data/lib/devise/failure_app.rb +132 -42
  38. data/lib/devise/hooks/activatable.rb +7 -6
  39. data/lib/devise/hooks/csrf_cleaner.rb +9 -0
  40. data/lib/devise/hooks/forgetable.rb +3 -1
  41. data/lib/devise/hooks/lockable.rb +5 -3
  42. data/lib/devise/hooks/proxy.rb +23 -0
  43. data/lib/devise/hooks/rememberable.rb +7 -4
  44. data/lib/devise/hooks/timeoutable.rb +18 -8
  45. data/lib/devise/hooks/trackable.rb +3 -1
  46. data/lib/devise/mailers/helpers.rb +15 -18
  47. data/lib/devise/mapping.rb +9 -3
  48. data/lib/devise/models/authenticatable.rb +102 -80
  49. data/lib/devise/models/confirmable.rb +154 -72
  50. data/lib/devise/models/database_authenticatable.rb +125 -25
  51. data/lib/devise/models/lockable.rb +50 -29
  52. data/lib/devise/models/omniauthable.rb +3 -1
  53. data/lib/devise/models/recoverable.rb +72 -50
  54. data/lib/devise/models/registerable.rb +4 -0
  55. data/lib/devise/models/rememberable.rb +65 -32
  56. data/lib/devise/models/timeoutable.rb +4 -8
  57. data/lib/devise/models/trackable.rb +20 -4
  58. data/lib/devise/models/validatable.rb +16 -9
  59. data/lib/devise/models.rb +6 -13
  60. data/lib/devise/modules.rb +12 -11
  61. data/lib/devise/omniauth/config.rb +2 -0
  62. data/lib/devise/omniauth/url_helpers.rb +14 -5
  63. data/lib/devise/omniauth.rb +4 -5
  64. data/lib/devise/orm/active_record.rb +5 -1
  65. data/lib/devise/orm/mongoid.rb +6 -2
  66. data/lib/devise/parameter_filter.rb +4 -0
  67. data/lib/devise/parameter_sanitizer.rb +144 -34
  68. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  69. data/lib/devise/rails/routes.rb +191 -127
  70. data/lib/devise/rails/warden_compat.rb +2 -1
  71. data/lib/devise/rails.rb +13 -20
  72. data/lib/devise/secret_key_finder.rb +27 -0
  73. data/lib/devise/strategies/authenticatable.rb +21 -22
  74. data/lib/devise/strategies/base.rb +3 -1
  75. data/lib/devise/strategies/database_authenticatable.rb +15 -4
  76. data/lib/devise/strategies/rememberable.rb +15 -3
  77. data/lib/devise/test/controller_helpers.rb +167 -0
  78. data/lib/devise/test/integration_helpers.rb +63 -0
  79. data/lib/devise/test_helpers.rb +7 -123
  80. data/lib/devise/time_inflector.rb +4 -2
  81. data/lib/devise/token_generator.rb +32 -0
  82. data/lib/devise/version.rb +3 -1
  83. data/lib/devise.rb +124 -78
  84. data/lib/generators/active_record/devise_generator.rb +64 -15
  85. data/lib/generators/active_record/templates/migration.rb +9 -8
  86. data/lib/generators/active_record/templates/migration_existing.rb +9 -8
  87. data/lib/generators/devise/controllers_generator.rb +46 -0
  88. data/lib/generators/devise/devise_generator.rb +10 -6
  89. data/lib/generators/devise/install_generator.rb +19 -1
  90. data/lib/generators/devise/orm_helpers.rb +17 -9
  91. data/lib/generators/devise/views_generator.rb +51 -28
  92. data/lib/generators/mongoid/devise_generator.rb +24 -24
  93. data/lib/generators/templates/README +13 -12
  94. data/lib/generators/templates/controllers/README +14 -0
  95. data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
  96. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
  97. data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
  98. data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
  99. data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
  100. data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
  101. data/lib/generators/templates/devise.rb +118 -53
  102. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  103. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  104. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  105. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  106. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  107. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +6 -2
  108. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +12 -4
  109. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +5 -2
  110. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +14 -6
  111. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +12 -4
  112. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +11 -6
  113. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +5 -2
  114. metadata +73 -294
  115. data/.gitignore +0 -10
  116. data/.travis.yml +0 -20
  117. data/.yardopts +0 -9
  118. data/CHANGELOG.rdoc +0 -941
  119. data/CONTRIBUTING.md +0 -14
  120. data/Gemfile +0 -31
  121. data/Gemfile.lock +0 -159
  122. data/Rakefile +0 -35
  123. data/app/views/devise/_links.erb +0 -3
  124. data/devise.gemspec +0 -26
  125. data/devise.png +0 -0
  126. data/gemfiles/Gemfile.rails-3.2.x +0 -31
  127. data/gemfiles/Gemfile.rails-3.2.x.lock +0 -156
  128. data/lib/devise/models/token_authenticatable.rb +0 -89
  129. data/lib/devise/strategies/token_authenticatable.rb +0 -91
  130. data/test/controllers/custom_strategy_test.rb +0 -62
  131. data/test/controllers/helpers_test.rb +0 -253
  132. data/test/controllers/internal_helpers_test.rb +0 -120
  133. data/test/controllers/passwords_controller_test.rb +0 -32
  134. data/test/controllers/sessions_controller_test.rb +0 -99
  135. data/test/controllers/url_helpers_test.rb +0 -59
  136. data/test/delegator_test.rb +0 -19
  137. data/test/devise_test.rb +0 -83
  138. data/test/failure_app_test.rb +0 -221
  139. data/test/generators/active_record_generator_test.rb +0 -73
  140. data/test/generators/devise_generator_test.rb +0 -39
  141. data/test/generators/install_generator_test.rb +0 -13
  142. data/test/generators/mongoid_generator_test.rb +0 -23
  143. data/test/generators/views_generator_test.rb +0 -67
  144. data/test/helpers/devise_helper_test.rb +0 -51
  145. data/test/integration/authenticatable_test.rb +0 -699
  146. data/test/integration/confirmable_test.rb +0 -299
  147. data/test/integration/database_authenticatable_test.rb +0 -84
  148. data/test/integration/http_authenticatable_test.rb +0 -115
  149. data/test/integration/lockable_test.rb +0 -242
  150. data/test/integration/omniauthable_test.rb +0 -133
  151. data/test/integration/recoverable_test.rb +0 -335
  152. data/test/integration/registerable_test.rb +0 -349
  153. data/test/integration/rememberable_test.rb +0 -165
  154. data/test/integration/timeoutable_test.rb +0 -150
  155. data/test/integration/token_authenticatable_test.rb +0 -205
  156. data/test/integration/trackable_test.rb +0 -92
  157. data/test/mailers/confirmation_instructions_test.rb +0 -111
  158. data/test/mailers/reset_password_instructions_test.rb +0 -92
  159. data/test/mailers/unlock_instructions_test.rb +0 -87
  160. data/test/mapping_test.rb +0 -127
  161. data/test/models/authenticatable_test.rb +0 -13
  162. data/test/models/confirmable_test.rb +0 -452
  163. data/test/models/database_authenticatable_test.rb +0 -226
  164. data/test/models/lockable_test.rb +0 -282
  165. data/test/models/omniauthable_test.rb +0 -7
  166. data/test/models/recoverable_test.rb +0 -222
  167. data/test/models/registerable_test.rb +0 -7
  168. data/test/models/rememberable_test.rb +0 -175
  169. data/test/models/serializable_test.rb +0 -49
  170. data/test/models/timeoutable_test.rb +0 -46
  171. data/test/models/token_authenticatable_test.rb +0 -55
  172. data/test/models/trackable_test.rb +0 -13
  173. data/test/models/validatable_test.rb +0 -127
  174. data/test/models_test.rb +0 -163
  175. data/test/omniauth/config_test.rb +0 -57
  176. data/test/omniauth/url_helpers_test.rb +0 -54
  177. data/test/orm/active_record.rb +0 -10
  178. data/test/orm/mongoid.rb +0 -13
  179. data/test/parameter_sanitizer_test.rb +0 -58
  180. data/test/rails_app/Rakefile +0 -6
  181. data/test/rails_app/app/active_record/admin.rb +0 -6
  182. data/test/rails_app/app/active_record/shim.rb +0 -2
  183. data/test/rails_app/app/active_record/user.rb +0 -6
  184. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  185. data/test/rails_app/app/controllers/admins_controller.rb +0 -11
  186. data/test/rails_app/app/controllers/application_controller.rb +0 -9
  187. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  188. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  189. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  190. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  191. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  192. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  193. data/test/rails_app/app/mailers/users/mailer.rb +0 -12
  194. data/test/rails_app/app/mongoid/admin.rb +0 -29
  195. data/test/rails_app/app/mongoid/shim.rb +0 -23
  196. data/test/rails_app/app/mongoid/user.rb +0 -42
  197. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  198. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  199. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  200. data/test/rails_app/app/views/home/index.html.erb +0 -1
  201. data/test/rails_app/app/views/home/join.html.erb +0 -1
  202. data/test/rails_app/app/views/home/private.html.erb +0 -1
  203. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  204. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  205. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  206. data/test/rails_app/app/views/users/index.html.erb +0 -1
  207. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  208. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  209. data/test/rails_app/bin/bundle +0 -3
  210. data/test/rails_app/bin/rails +0 -4
  211. data/test/rails_app/bin/rake +0 -4
  212. data/test/rails_app/config/application.rb +0 -40
  213. data/test/rails_app/config/boot.rb +0 -8
  214. data/test/rails_app/config/database.yml +0 -18
  215. data/test/rails_app/config/environment.rb +0 -5
  216. data/test/rails_app/config/environments/development.rb +0 -34
  217. data/test/rails_app/config/environments/production.rb +0 -84
  218. data/test/rails_app/config/environments/test.rb +0 -36
  219. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  220. data/test/rails_app/config/initializers/devise.rb +0 -178
  221. data/test/rails_app/config/initializers/inflections.rb +0 -2
  222. data/test/rails_app/config/initializers/secret_token.rb +0 -8
  223. data/test/rails_app/config/initializers/session_store.rb +0 -1
  224. data/test/rails_app/config/routes.rb +0 -104
  225. data/test/rails_app/config.ru +0 -4
  226. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -74
  227. data/test/rails_app/db/schema.rb +0 -52
  228. data/test/rails_app/lib/shared_admin.rb +0 -14
  229. data/test/rails_app/lib/shared_user.rb +0 -25
  230. data/test/rails_app/public/404.html +0 -26
  231. data/test/rails_app/public/422.html +0 -26
  232. data/test/rails_app/public/500.html +0 -26
  233. data/test/rails_app/public/favicon.ico +0 -0
  234. data/test/routes_test.rb +0 -250
  235. data/test/support/assertions.rb +0 -40
  236. data/test/support/helpers.rb +0 -91
  237. data/test/support/integration.rb +0 -92
  238. data/test/support/locale/en.yml +0 -4
  239. data/test/support/webrat/integrations/rails.rb +0 -24
  240. data/test/test_helper.rb +0 -34
  241. data/test/test_helpers_test.rb +0 -151
  242. data/test/test_models.rb +0 -26
@@ -1,282 +0,0 @@
1
- require 'test_helper'
2
-
3
- class LockableTest < ActiveSupport::TestCase
4
- def setup
5
- setup_mailer
6
- end
7
-
8
- test "should respect maximum attempts configuration" do
9
- user = create_user
10
- user.confirm!
11
- swap Devise, :maximum_attempts => 2 do
12
- 3.times { user.valid_for_authentication?{ false } }
13
- assert user.reload.access_locked?
14
- end
15
- end
16
-
17
- test "should increment failed_attempts on successfull validation if the user is already locked" do
18
- user = create_user
19
- user.confirm!
20
-
21
- swap Devise, :maximum_attempts => 2 do
22
- 3.times { user.valid_for_authentication?{ false } }
23
- assert user.reload.access_locked?
24
- end
25
-
26
- user.valid_for_authentication?{ true }
27
- assert_equal 4, user.reload.failed_attempts
28
- end
29
-
30
- test "should not touch failed_attempts if lock_strategy is none" do
31
- user = create_user
32
- user.confirm!
33
- swap Devise, :lock_strategy => :none, :maximum_attempts => 2 do
34
- 3.times { user.valid_for_authentication?{ false } }
35
- assert !user.access_locked?
36
- assert_equal 0, user.failed_attempts
37
- end
38
- end
39
-
40
- test 'should be valid for authentication with a unlocked user' do
41
- user = create_user
42
- user.lock_access!
43
- user.unlock_access!
44
- assert user.valid_for_authentication?{ true }
45
- end
46
-
47
- test "should verify whether a user is locked or not" do
48
- user = create_user
49
- assert_not user.access_locked?
50
- user.lock_access!
51
- assert user.access_locked?
52
- end
53
-
54
- test "active_for_authentication? should be the opposite of locked?" do
55
- user = create_user
56
- user.confirm!
57
- assert user.active_for_authentication?
58
- user.lock_access!
59
- assert_not user.active_for_authentication?
60
- end
61
-
62
- test "should unlock a user by cleaning locked_at, failed_attempts and unlock_token" do
63
- user = create_user
64
- user.lock_access!
65
- assert_not_nil user.reload.locked_at
66
- assert_not_nil user.reload.unlock_token
67
-
68
- user.unlock_access!
69
- assert_nil user.reload.locked_at
70
- assert_nil user.reload.unlock_token
71
- assert_equal 0, user.reload.failed_attempts
72
- end
73
-
74
- test "new user should not be locked and should have zero failed_attempts" do
75
- assert_not new_user.access_locked?
76
- assert_equal 0, create_user.failed_attempts
77
- end
78
-
79
- test "should unlock user after unlock_in period" do
80
- swap Devise, :unlock_in => 3.hours do
81
- user = new_user
82
- user.locked_at = 2.hours.ago
83
- assert user.access_locked?
84
-
85
- Devise.unlock_in = 1.hour
86
- assert_not user.access_locked?
87
- end
88
- end
89
-
90
- test "should not unlock in 'unlock_in' if :time unlock strategy is not set" do
91
- swap Devise, :unlock_strategy => :email do
92
- user = new_user
93
- user.locked_at = 2.hours.ago
94
- assert user.access_locked?
95
- end
96
- end
97
-
98
- test "should set unlock_token when locking" do
99
- user = create_user
100
- assert_nil user.unlock_token
101
- user.lock_access!
102
- assert_not_nil user.unlock_token
103
- end
104
-
105
- test "should never generate the same unlock token for different users" do
106
- unlock_tokens = []
107
- 3.times do
108
- user = create_user
109
- user.lock_access!
110
- token = user.unlock_token
111
- assert !unlock_tokens.include?(token)
112
- unlock_tokens << token
113
- end
114
- end
115
-
116
- test "should not generate unlock_token when :email is not an unlock strategy" do
117
- swap Devise, :unlock_strategy => :time do
118
- user = create_user
119
- user.lock_access!
120
- assert_nil user.unlock_token
121
- end
122
- end
123
-
124
- test "should send email with unlock instructions when :email is an unlock strategy" do
125
- swap Devise, :unlock_strategy => :email do
126
- user = create_user
127
- assert_email_sent do
128
- user.lock_access!
129
- end
130
- end
131
- end
132
-
133
- test "should not send email with unlock instructions when :email is not an unlock strategy" do
134
- swap Devise, :unlock_strategy => :time do
135
- user = create_user
136
- assert_email_not_sent do
137
- user.lock_access!
138
- end
139
- end
140
- end
141
-
142
- test 'should find and unlock a user automatically' do
143
- user = create_user
144
- user.lock_access!
145
- locked_user = User.unlock_access_by_token(user.unlock_token)
146
- assert_equal locked_user, user
147
- assert_not user.reload.access_locked?
148
- end
149
-
150
- test 'should return a new record with errors when a invalid token is given' do
151
- locked_user = User.unlock_access_by_token('invalid_token')
152
- assert_not locked_user.persisted?
153
- assert_equal "is invalid", locked_user.errors[:unlock_token].join
154
- end
155
-
156
- test 'should return a new record with errors when a blank token is given' do
157
- locked_user = User.unlock_access_by_token('')
158
- assert_not locked_user.persisted?
159
- assert_equal "can't be blank", locked_user.errors[:unlock_token].join
160
- end
161
-
162
- test 'should find a user to send unlock instructions' do
163
- user = create_user
164
- user.lock_access!
165
- unlock_user = User.send_unlock_instructions(:email => user.email)
166
- assert_equal unlock_user, user
167
- end
168
-
169
- test 'should return a new user if no email was found' do
170
- unlock_user = User.send_unlock_instructions(:email => "invalid@example.com")
171
- assert_not unlock_user.persisted?
172
- end
173
-
174
- test 'should add error to new user email if no email was found' do
175
- unlock_user = User.send_unlock_instructions(:email => "invalid@example.com")
176
- assert_equal 'not found', unlock_user.errors[:email].join
177
- end
178
-
179
- test 'should find a user to send unlock instructions by authentication_keys' do
180
- swap Devise, :authentication_keys => [:username, :email] do
181
- user = create_user
182
- unlock_user = User.send_unlock_instructions(:email => user.email, :username => user.username)
183
- assert_equal unlock_user, user
184
- end
185
- end
186
-
187
- test 'should require all unlock_keys' do
188
- swap Devise, :unlock_keys => [:username, :email] do
189
- user = create_user
190
- unlock_user = User.send_unlock_instructions(:email => user.email)
191
- assert_not unlock_user.persisted?
192
- assert_equal "can't be blank", unlock_user.errors[:username].join
193
- end
194
- end
195
-
196
- test 'should not be able to send instructions if the user is not locked' do
197
- user = create_user
198
- assert_not user.resend_unlock_token
199
- assert_not user.access_locked?
200
- assert_equal 'was not locked', user.errors[:email].join
201
- end
202
-
203
- test 'should not be able to send instructions if the user if not locked and have username as unlock key' do
204
- swap Devise, :unlock_keys => [:username] do
205
- user = create_user
206
- assert_not user.resend_unlock_token
207
- assert_not user.access_locked?
208
- assert_equal 'was not locked', user.errors[:username].join
209
- end
210
- end
211
-
212
- test 'should unlock account if lock has expired and increase attempts on failure' do
213
- swap Devise, :unlock_in => 1.minute do
214
- user = create_user
215
- user.confirm!
216
-
217
- user.failed_attempts = 2
218
- user.locked_at = 2.minutes.ago
219
-
220
- user.valid_for_authentication? { false }
221
- assert_equal 1, user.failed_attempts
222
- end
223
- end
224
-
225
- test 'should unlock account if lock has expired on success' do
226
- swap Devise, :unlock_in => 1.minute do
227
- user = create_user
228
- user.confirm!
229
-
230
- user.failed_attempts = 2
231
- user.locked_at = 2.minutes.ago
232
-
233
- user.valid_for_authentication? { true }
234
- assert_equal 0, user.failed_attempts
235
- assert_nil user.locked_at
236
- end
237
- end
238
-
239
- test 'required_fields should contain the all the fields when all the strategies are enabled' do
240
- swap Devise, :unlock_strategy => :both do
241
- swap Devise, :lock_strategy => :failed_attempts do
242
- assert_same_content Devise::Models::Lockable.required_fields(User), [
243
- :failed_attempts,
244
- :locked_at,
245
- :unlock_token
246
- ]
247
- end
248
- end
249
- end
250
-
251
- test 'required_fields should contain only failed_attempts and locked_at when the strategies are time and failed_attempts are enabled' do
252
- swap Devise, :unlock_strategy => :time do
253
- swap Devise, :lock_strategy => :failed_attempts do
254
- assert_same_content Devise::Models::Lockable.required_fields(User), [
255
- :failed_attempts,
256
- :locked_at
257
- ]
258
- end
259
- end
260
- end
261
-
262
- test 'required_fields should contain only failed_attempts and unlock_token when the strategies are token and failed_attempts are enabled' do
263
- swap Devise, :unlock_strategy => :email do
264
- swap Devise, :lock_strategy => :failed_attempts do
265
- assert_same_content Devise::Models::Lockable.required_fields(User), [
266
- :failed_attempts,
267
- :unlock_token
268
- ]
269
- end
270
- end
271
- end
272
-
273
- test 'should not return a locked unauthenticated message if in paranoid mode' do
274
- swap Devise, :paranoid => :true do
275
- user = create_user
276
- user.failed_attempts = Devise.maximum_attempts + 1
277
- user.lock_access!
278
-
279
- assert_equal :invalid, user.unauthenticated_message
280
- end
281
- end
282
- end
@@ -1,7 +0,0 @@
1
- require 'test_helper'
2
-
3
- class OmniauthableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_same_content Devise::Models::Omniauthable.required_fields(User), []
6
- end
7
- end
@@ -1,222 +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 if record is invalid' do
46
- user = create_user
47
- user.send_reset_password_instructions
48
- assert_present user.reset_password_token
49
- assert_not user.reset_password!('123456789', '987654321')
50
- assert_present user.reset_password_token
51
- end
52
-
53
- test 'should not reset password with invalid data' do
54
- user = create_user
55
- user.stubs(:valid?).returns(false)
56
- assert_not user.reset_password!('123456789', '987654321')
57
- end
58
-
59
- test 'should reset reset password token and send instructions by email' do
60
- user = create_user
61
- assert_email_sent do
62
- token = user.reset_password_token
63
- user.send_reset_password_instructions
64
- assert_not_equal token, user.reset_password_token
65
- end
66
- end
67
-
68
- test 'should find a user to send instructions by email' do
69
- user = create_user
70
- reset_password_user = User.send_reset_password_instructions(:email => user.email)
71
- assert_equal reset_password_user, user
72
- end
73
-
74
- test 'should return a new record with errors if user was not found by e-mail' do
75
- reset_password_user = User.send_reset_password_instructions(:email => "invalid@example.com")
76
- assert_not reset_password_user.persisted?
77
- assert_equal "not found", reset_password_user.errors[:email].join
78
- end
79
-
80
- test 'should find a user to send instructions by authentication_keys' do
81
- swap Devise, :authentication_keys => [:username, :email] do
82
- user = create_user
83
- reset_password_user = User.send_reset_password_instructions(:email => user.email, :username => user.username)
84
- assert_equal reset_password_user, user
85
- end
86
- end
87
-
88
- test 'should require all reset_password_keys' do
89
- swap Devise, :reset_password_keys => [:username, :email] do
90
- user = create_user
91
- reset_password_user = User.send_reset_password_instructions(:email => user.email)
92
- assert_not reset_password_user.persisted?
93
- assert_equal "can't be blank", reset_password_user.errors[:username].join
94
- end
95
- end
96
-
97
- test 'should reset reset_password_token before send the reset instructions email' do
98
- user = create_user
99
- token = user.reset_password_token
100
- User.send_reset_password_instructions(:email => user.email)
101
- assert_not_equal token, user.reload.reset_password_token
102
- end
103
-
104
- test 'should send email instructions to the user reset his password' do
105
- user = create_user
106
- assert_email_sent do
107
- User.send_reset_password_instructions(:email => user.email)
108
- end
109
- end
110
-
111
- test 'should find a user to reset his password based on reset_password_token' do
112
- user = create_user
113
- user.ensure_reset_password_token!
114
-
115
- reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token)
116
- assert_equal reset_password_user, user
117
- end
118
-
119
- test 'should return a new record with errors if no reset_password_token is found' do
120
- reset_password_user = User.reset_password_by_token(:reset_password_token => 'invalid_token')
121
- assert_not reset_password_user.persisted?
122
- assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
123
- end
124
-
125
- test 'should return a new record with errors if reset_password_token is blank' do
126
- reset_password_user = User.reset_password_by_token(:reset_password_token => '')
127
- assert_not reset_password_user.persisted?
128
- assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
129
- end
130
-
131
- test 'should return a new record with errors if password is blank' do
132
- user = create_user
133
- user.ensure_reset_password_token!
134
-
135
- reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token, :password => '')
136
- assert_not reset_password_user.errors.empty?
137
- assert_match "can't be blank", reset_password_user.errors[:password].join
138
- end
139
-
140
- test 'should reset successfully user password given the new password and confirmation' do
141
- user = create_user
142
- old_password = user.password
143
- user.ensure_reset_password_token!
144
-
145
- User.reset_password_by_token(
146
- :reset_password_token => user.reset_password_token,
147
- :password => 'new_password',
148
- :password_confirmation => 'new_password'
149
- )
150
- user.reload
151
-
152
- assert_not user.valid_password?(old_password)
153
- assert user.valid_password?('new_password')
154
- end
155
-
156
- test 'should not reset reset password token during reset_password_within time' do
157
- swap Devise, :reset_password_within => 1.hour do
158
- user = create_user
159
- user.send_reset_password_instructions
160
- 3.times do
161
- token = user.reset_password_token
162
- user.send_reset_password_instructions
163
- assert_equal token, user.reset_password_token
164
- end
165
- end
166
- end
167
-
168
- test 'should reset reset password token after reset_password_within time' do
169
- swap Devise, :reset_password_within => 1.hour do
170
- user = create_user
171
- user.reset_password_sent_at = 2.days.ago
172
- token = user.reset_password_token
173
- user.send_reset_password_instructions
174
- assert_not_equal token, user.reset_password_token
175
- end
176
- end
177
-
178
- test 'should not reset password after reset_password_within time' do
179
- swap Devise, :reset_password_within => 1.hour do
180
- user = create_user
181
- old_password = user.password
182
- user.ensure_reset_password_token!
183
- user.reset_password_sent_at = 2.days.ago
184
- user.save!
185
-
186
- reset_password_user = User.reset_password_by_token(
187
- :reset_password_token => user.reset_password_token,
188
- :password => 'new_password',
189
- :password_confirmation => 'new_password'
190
- )
191
- user.reload
192
-
193
- assert user.valid_password?(old_password)
194
- assert_not user.valid_password?('new_password')
195
- assert_equal "has expired, please request a new one", reset_password_user.errors[:reset_password_token].join
196
- end
197
- end
198
-
199
- test 'required_fields should contain the fields that Devise uses' do
200
- assert_same_content Devise::Models::Recoverable.required_fields(User), [
201
- :reset_password_sent_at,
202
- :reset_password_token
203
- ]
204
- end
205
-
206
- test 'should generate a new token when a valid one does not exist' do
207
- user = create_user
208
- assert_nil user.reset_password_token
209
-
210
- user.ensure_reset_password_token!
211
- assert_not_nil user.reset_password_token
212
- end
213
-
214
- test 'should not generate a new token when a valid one exists' do
215
- user = create_user
216
- user.send :generate_reset_password_token!
217
- assert_not_nil user.reset_password_token
218
- old = user.reset_password_token
219
- user.ensure_reset_password_token!
220
- assert_equal user.reset_password_token, old
221
- end
222
- end
@@ -1,7 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RegisterableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_same_content Devise::Models::Registerable.required_fields(User), []
6
- end
7
- end
@@ -1,175 +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
- end
17
-
18
- test 'forget_me should not clear remember token if using salt' do
19
- user = create_user
20
- user.remember_me!
21
- user.expects(:valid?).never
22
- user.forget_me!
23
- end
24
-
25
- test 'serialize into cookie' do
26
- user = create_user
27
- user.remember_me!
28
- assert_equal [user.to_key, user.authenticatable_salt], User.serialize_into_cookie(user)
29
- end
30
-
31
- test 'serialize from cookie' do
32
- user = create_user
33
- user.remember_me!
34
- assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
35
- end
36
-
37
- test 'raises a RuntimeError if authenticatable_salt is nil' do
38
- user = User.new
39
- user.encrypted_password = nil
40
- assert_raise RuntimeError do
41
- user.rememberable_value
42
- end
43
- end
44
-
45
- test 'should respond to remember_me attribute' do
46
- assert resource_class.new.respond_to?(:remember_me)
47
- assert resource_class.new.respond_to?(:remember_me=)
48
- end
49
-
50
- test 'forget_me should clear remember_created_at' do
51
- resource = create_resource
52
- resource.remember_me!
53
- assert_not resource.remember_created_at.nil?
54
- resource.forget_me!
55
- assert resource.remember_created_at.nil?
56
- end
57
-
58
- test 'forget_me should not try to update resource if it has been destroyed' do
59
- resource = create_resource
60
- resource.expects(:remember_created_at).never
61
- resource.expects(:save).never
62
-
63
- resource.destroy
64
- resource.forget_me!
65
- end
66
-
67
- test 'remember is expired if not created at timestamp is set' do
68
- assert create_resource.remember_expired?
69
- end
70
-
71
- test 'serialize should return nil if no resource is found' do
72
- assert_nil resource_class.serialize_from_cookie([0], "123")
73
- end
74
-
75
- test 'remember me return nil if is a valid resource with invalid token' do
76
- resource = create_resource
77
- assert_nil resource_class.serialize_from_cookie([resource.id], "123")
78
- end
79
-
80
- test 'remember for should fallback to devise remember for default configuration' do
81
- swap Devise, :remember_for => 1.day do
82
- resource = create_resource
83
- resource.remember_me!
84
- assert_not resource.remember_expired?
85
- end
86
- end
87
-
88
- test 'remember expires at should sum date of creation with remember for configuration' do
89
- swap Devise, :remember_for => 3.days do
90
- resource = create_resource
91
- resource.remember_me!
92
- assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
93
-
94
- Devise.remember_for = 5.days
95
- assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
96
- end
97
- end
98
-
99
- test 'remember should be expired if remember_for is zero' do
100
- swap Devise, :remember_for => 0.days do
101
- Devise.remember_for = 0.days
102
- resource = create_resource
103
- resource.remember_me!
104
- assert resource.remember_expired?
105
- end
106
- end
107
-
108
- test 'remember should be expired if it was created before limit time' do
109
- swap Devise, :remember_for => 1.day do
110
- resource = create_resource
111
- resource.remember_me!
112
- resource.remember_created_at = 2.days.ago
113
- resource.save
114
- assert resource.remember_expired?
115
- end
116
- end
117
-
118
- test 'remember should not be expired if it was created within the limit time' do
119
- swap Devise, :remember_for => 30.days do
120
- resource = create_resource
121
- resource.remember_me!
122
- resource.remember_created_at = (30.days.ago + 2.minutes)
123
- resource.save
124
- assert_not resource.remember_expired?
125
- end
126
- end
127
-
128
- test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
129
- swap Devise, :remember_for => 5.minutes do
130
- resource = create_resource
131
- resource.remember_me!(false)
132
- assert resource.remember_created_at
133
-
134
- resource.remember_created_at = old = 10.minutes.ago
135
- resource.save
136
-
137
- resource.remember_me!(false)
138
- assert_not_equal old.to_i, resource.remember_created_at.to_i
139
- end
140
- end
141
-
142
- test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
143
- swap Devise, :remember_for => 1.year do
144
- resource = create_resource
145
- resource.remember_me!(false)
146
- assert resource.remember_created_at
147
-
148
- resource.remember_created_at = old = 10.minutes.ago.utc
149
- resource.save
150
-
151
- resource.remember_me!(false)
152
- assert_equal old.to_i, resource.remember_created_at.to_i
153
- end
154
- end
155
-
156
- test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
157
- swap Devise, :remember_for => 1.year do
158
- resource = create_resource
159
- resource.remember_me!(true)
160
- assert resource.remember_created_at
161
-
162
- resource.remember_created_at = old = 10.minutes.ago
163
- resource.save
164
-
165
- resource.remember_me!(true)
166
- assert_not_equal old, resource.remember_created_at
167
- end
168
- end
169
-
170
- test 'should have the required_fields array' do
171
- assert_same_content Devise::Models::Rememberable.required_fields(User), [
172
- :remember_created_at
173
- ]
174
- end
175
- end