devise-jdguyot 1.2.rc

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 (185) hide show
  1. data/.gitignore +10 -0
  2. data/CHANGELOG.rdoc +532 -0
  3. data/Gemfile +29 -0
  4. data/Gemfile.lock +152 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +353 -0
  7. data/Rakefile +36 -0
  8. data/TODO +4 -0
  9. data/app/controllers/devise/confirmations_controller.rb +33 -0
  10. data/app/controllers/devise/omniauth_callbacks_controller.rb +26 -0
  11. data/app/controllers/devise/passwords_controller.rb +41 -0
  12. data/app/controllers/devise/registrations_controller.rb +110 -0
  13. data/app/controllers/devise/sessions_controller.rb +25 -0
  14. data/app/controllers/devise/unlocks_controller.rb +34 -0
  15. data/app/helpers/devise_helper.rb +19 -0
  16. data/app/mailers/devise/mailer.rb +88 -0
  17. data/app/views/devise/confirmations/new.html.erb +12 -0
  18. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  19. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  20. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  21. data/app/views/devise/passwords/edit.html.erb +16 -0
  22. data/app/views/devise/passwords/new.html.erb +12 -0
  23. data/app/views/devise/registrations/edit.html.erb +25 -0
  24. data/app/views/devise/registrations/new.html.erb +18 -0
  25. data/app/views/devise/sessions/new.html.erb +17 -0
  26. data/app/views/devise/shared/_links.erb +25 -0
  27. data/app/views/devise/unlocks/new.html.erb +12 -0
  28. data/config/locales/en.yml +46 -0
  29. data/devise.gemspec +25 -0
  30. data/lib/devise/controllers/helpers.rb +227 -0
  31. data/lib/devise/controllers/internal_helpers.rb +119 -0
  32. data/lib/devise/controllers/scoped_views.rb +33 -0
  33. data/lib/devise/controllers/url_helpers.rb +39 -0
  34. data/lib/devise/encryptors/authlogic_sha512.rb +19 -0
  35. data/lib/devise/encryptors/base.rb +20 -0
  36. data/lib/devise/encryptors/clearance_sha1.rb +17 -0
  37. data/lib/devise/encryptors/restful_authentication_sha1.rb +22 -0
  38. data/lib/devise/encryptors/sha1.rb +25 -0
  39. data/lib/devise/encryptors/sha512.rb +25 -0
  40. data/lib/devise/failure_app.rb +132 -0
  41. data/lib/devise/hooks/activatable.rb +11 -0
  42. data/lib/devise/hooks/forgetable.rb +12 -0
  43. data/lib/devise/hooks/rememberable.rb +48 -0
  44. data/lib/devise/hooks/timeoutable.rb +22 -0
  45. data/lib/devise/hooks/trackable.rb +9 -0
  46. data/lib/devise/mapping.rb +110 -0
  47. data/lib/devise/models/authenticatable.rb +146 -0
  48. data/lib/devise/models/confirmable.rb +160 -0
  49. data/lib/devise/models/database_authenticatable.rb +100 -0
  50. data/lib/devise/models/encryptable.rb +72 -0
  51. data/lib/devise/models/lockable.rb +169 -0
  52. data/lib/devise/models/omniauthable.rb +23 -0
  53. data/lib/devise/models/recoverable.rb +123 -0
  54. data/lib/devise/models/registerable.rb +21 -0
  55. data/lib/devise/models/rememberable.rb +130 -0
  56. data/lib/devise/models/timeoutable.rb +43 -0
  57. data/lib/devise/models/token_authenticatable.rb +72 -0
  58. data/lib/devise/models/trackable.rb +30 -0
  59. data/lib/devise/models/validatable.rb +65 -0
  60. data/lib/devise/models.rb +68 -0
  61. data/lib/devise/modules.rb +30 -0
  62. data/lib/devise/omniauth/config.rb +30 -0
  63. data/lib/devise/omniauth/test_helpers.rb +57 -0
  64. data/lib/devise/omniauth/url_helpers.rb +29 -0
  65. data/lib/devise/omniauth.rb +47 -0
  66. data/lib/devise/orm/active_record.rb +38 -0
  67. data/lib/devise/orm/mongoid.rb +31 -0
  68. data/lib/devise/path_checker.rb +18 -0
  69. data/lib/devise/rails/routes.rb +292 -0
  70. data/lib/devise/rails/warden_compat.rb +125 -0
  71. data/lib/devise/rails.rb +50 -0
  72. data/lib/devise/schema.rb +97 -0
  73. data/lib/devise/strategies/authenticatable.rb +150 -0
  74. data/lib/devise/strategies/base.rb +15 -0
  75. data/lib/devise/strategies/database_authenticatable.rb +21 -0
  76. data/lib/devise/strategies/rememberable.rb +51 -0
  77. data/lib/devise/strategies/token_authenticatable.rb +53 -0
  78. data/lib/devise/test_helpers.rb +100 -0
  79. data/lib/devise/version.rb +3 -0
  80. data/lib/devise.rb +381 -0
  81. data/lib/generators/active_record/devise_generator.rb +28 -0
  82. data/lib/generators/active_record/templates/migration.rb +31 -0
  83. data/lib/generators/devise/devise_generator.rb +17 -0
  84. data/lib/generators/devise/install_generator.rb +24 -0
  85. data/lib/generators/devise/orm_helpers.rb +23 -0
  86. data/lib/generators/devise/views_generator.rb +106 -0
  87. data/lib/generators/mongoid/devise_generator.rb +17 -0
  88. data/lib/generators/templates/README +25 -0
  89. data/lib/generators/templates/devise.rb +186 -0
  90. data/test/controllers/helpers_test.rb +237 -0
  91. data/test/controllers/internal_helpers_test.rb +72 -0
  92. data/test/controllers/url_helpers_test.rb +59 -0
  93. data/test/devise_test.rb +65 -0
  94. data/test/encryptors_test.rb +30 -0
  95. data/test/failure_app_test.rb +187 -0
  96. data/test/generators/active_record_generator_test.rb +24 -0
  97. data/test/generators/install_generator_test.rb +13 -0
  98. data/test/generators/mongoid_generator_test.rb +22 -0
  99. data/test/generators/views_generator_test.rb +35 -0
  100. data/test/indifferent_hash.rb +33 -0
  101. data/test/integration/authenticatable_test.rb +447 -0
  102. data/test/integration/confirmable_test.rb +104 -0
  103. data/test/integration/database_authenticatable_test.rb +60 -0
  104. data/test/integration/http_authenticatable_test.rb +74 -0
  105. data/test/integration/lockable_test.rb +109 -0
  106. data/test/integration/omniauthable_test.rb +107 -0
  107. data/test/integration/recoverable_test.rb +160 -0
  108. data/test/integration/registerable_test.rb +179 -0
  109. data/test/integration/rememberable_test.rb +180 -0
  110. data/test/integration/timeoutable_test.rb +89 -0
  111. data/test/integration/token_authenticatable_test.rb +99 -0
  112. data/test/integration/trackable_test.rb +64 -0
  113. data/test/mailers/confirmation_instructions_test.rb +84 -0
  114. data/test/mailers/reset_password_instructions_test.rb +72 -0
  115. data/test/mailers/unlock_instructions_test.rb +66 -0
  116. data/test/mapping_test.rb +119 -0
  117. data/test/models/confirmable_test.rb +221 -0
  118. data/test/models/database_authenticatable_test.rb +98 -0
  119. data/test/models/encryptable_test.rb +65 -0
  120. data/test/models/lockable_test.rb +204 -0
  121. data/test/models/recoverable_test.rb +190 -0
  122. data/test/models/rememberable_test.rb +279 -0
  123. data/test/models/timeoutable_test.rb +28 -0
  124. data/test/models/token_authenticatable_test.rb +37 -0
  125. data/test/models/trackable_test.rb +5 -0
  126. data/test/models/validatable_test.rb +99 -0
  127. data/test/models_test.rb +84 -0
  128. data/test/omniauth/url_helpers_test.rb +47 -0
  129. data/test/orm/active_record.rb +9 -0
  130. data/test/orm/mongoid.rb +11 -0
  131. data/test/rails_app/Rakefile +10 -0
  132. data/test/rails_app/app/active_record/admin.rb +6 -0
  133. data/test/rails_app/app/active_record/shim.rb +2 -0
  134. data/test/rails_app/app/active_record/user.rb +8 -0
  135. data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
  136. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  137. data/test/rails_app/app/controllers/application_controller.rb +8 -0
  138. data/test/rails_app/app/controllers/home_controller.rb +16 -0
  139. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  140. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  141. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +7 -0
  142. data/test/rails_app/app/controllers/users_controller.rb +18 -0
  143. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  144. data/test/rails_app/app/mongoid/admin.rb +9 -0
  145. data/test/rails_app/app/mongoid/shim.rb +29 -0
  146. data/test/rails_app/app/mongoid/user.rb +10 -0
  147. data/test/rails_app/app/views/admins/index.html.erb +1 -0
  148. data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
  149. data/test/rails_app/app/views/home/index.html.erb +1 -0
  150. data/test/rails_app/app/views/home/private.html.erb +1 -0
  151. data/test/rails_app/app/views/layouts/application.html.erb +24 -0
  152. data/test/rails_app/app/views/users/index.html.erb +1 -0
  153. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
  154. data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
  155. data/test/rails_app/config/application.rb +40 -0
  156. data/test/rails_app/config/boot.rb +13 -0
  157. data/test/rails_app/config/database.yml +18 -0
  158. data/test/rails_app/config/environment.rb +5 -0
  159. data/test/rails_app/config/environments/development.rb +19 -0
  160. data/test/rails_app/config/environments/production.rb +33 -0
  161. data/test/rails_app/config/environments/test.rb +33 -0
  162. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  163. data/test/rails_app/config/initializers/devise.rb +176 -0
  164. data/test/rails_app/config/initializers/inflections.rb +2 -0
  165. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  166. data/test/rails_app/config/routes.rb +55 -0
  167. data/test/rails_app/config.ru +4 -0
  168. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +31 -0
  169. data/test/rails_app/db/schema.rb +52 -0
  170. data/test/rails_app/lib/shared_admin.rb +9 -0
  171. data/test/rails_app/lib/shared_user.rb +23 -0
  172. data/test/rails_app/public/404.html +26 -0
  173. data/test/rails_app/public/422.html +26 -0
  174. data/test/rails_app/public/500.html +26 -0
  175. data/test/rails_app/public/favicon.ico +0 -0
  176. data/test/rails_app/script/rails +10 -0
  177. data/test/routes_test.rb +179 -0
  178. data/test/support/assertions.rb +24 -0
  179. data/test/support/helpers.rb +60 -0
  180. data/test/support/integration.rb +88 -0
  181. data/test/support/locale/en.yml +4 -0
  182. data/test/support/webrat/integrations/rails.rb +24 -0
  183. data/test/test_helper.rb +29 -0
  184. data/test/test_helpers_test.rb +118 -0
  185. metadata +388 -0
@@ -0,0 +1,190 @@
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@email.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
+ reset_password_user = 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.send :generate_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 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 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 reset successfully user password given the new password and confirmation' do
132
+ user = create_user
133
+ old_password = user.password
134
+ user.send :generate_reset_password_token!
135
+
136
+ reset_password_user = User.reset_password_by_token(
137
+ :reset_password_token => user.reset_password_token,
138
+ :password => 'new_password',
139
+ :password_confirmation => 'new_password'
140
+ )
141
+ user.reload
142
+
143
+ assert_not user.valid_password?(old_password)
144
+ assert user.valid_password?('new_password')
145
+ end
146
+
147
+ test 'should not reset reset password token during reset_password_within time' do
148
+ swap Devise, :reset_password_within => 1.hour do
149
+ user = create_user
150
+ user.send_reset_password_instructions
151
+ 3.times do
152
+ token = user.reset_password_token
153
+ user.send_reset_password_instructions
154
+ assert_equal token, user.reset_password_token
155
+ end
156
+ end
157
+ end
158
+
159
+ test 'should reset reset password token after reset_password_within time' do
160
+ swap Devise, :reset_password_within => 1.hour do
161
+ user = create_user
162
+ user.reset_password_sent_at = 2.days.ago
163
+ token = user.reset_password_token
164
+ user.send_reset_password_instructions
165
+ assert_not_equal token, user.reset_password_token
166
+ end
167
+ end
168
+
169
+ test 'should not reset password after reset_password_within time' do
170
+ swap Devise, :reset_password_within => 1.hour do
171
+ user = create_user
172
+ old_password = user.password
173
+ user.send :generate_reset_password_token!
174
+ user.reset_password_sent_at = 2.days.ago
175
+ user.save!
176
+
177
+ reset_password_user = User.reset_password_by_token(
178
+ :reset_password_token => user.reset_password_token,
179
+ :password => 'new_password',
180
+ :password_confirmation => 'new_password'
181
+ )
182
+ user.reload
183
+
184
+ assert user.valid_password?(old_password)
185
+ assert_not user.valid_password?('new_password')
186
+ assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
187
+ end
188
+ end
189
+
190
+ end
@@ -0,0 +1,279 @@
1
+ require 'test_helper'
2
+
3
+ module SharedRememberableTest
4
+ extend ActiveSupport::Testing::Declarative
5
+
6
+ test 'should respond to remember_me attribute' do
7
+ assert resource_class.new.respond_to?(:remember_me)
8
+ assert resource_class.new.respond_to?(:remember_me=)
9
+ end
10
+
11
+ test 'forget_me should clear remember_created_at' do
12
+ resource = create_resource
13
+ resource.remember_me!
14
+ assert_not resource.remember_created_at.nil?
15
+ resource.forget_me!
16
+ assert resource.remember_created_at.nil?
17
+ end
18
+
19
+ test 'remember is expired if not created at timestamp is set' do
20
+ assert create_resource.remember_expired?
21
+ end
22
+
23
+ test 'serialize should return nil if no resource is found' do
24
+ assert_nil resource_class.serialize_from_cookie([0], "123")
25
+ end
26
+
27
+ test 'remember me return nil if is a valid resource with invalid token' do
28
+ resource = create_resource
29
+ assert_nil resource_class.serialize_from_cookie([resource.id], "123")
30
+ end
31
+
32
+ test 'remember for should fallback to devise remember for default configuration' do
33
+ swap Devise, :remember_for => 1.day do
34
+ resource = create_resource
35
+ resource.remember_me!
36
+ assert_not resource.remember_expired?
37
+ end
38
+ end
39
+
40
+ test 'remember expires at should sum date of creation with remember for configuration' do
41
+ swap Devise, :remember_for => 3.days do
42
+ resource = create_resource
43
+ resource.remember_me!
44
+ assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
45
+
46
+ Devise.remember_for = 5.days
47
+ assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
48
+ end
49
+ end
50
+
51
+ test 'remember should be expired if remember_for is zero' do
52
+ swap Devise, :remember_for => 0.days do
53
+ Devise.remember_for = 0.days
54
+ resource = create_resource
55
+ resource.remember_me!
56
+ assert resource.remember_expired?
57
+ end
58
+ end
59
+
60
+ test 'remember should be expired if it was created before limit time' do
61
+ swap Devise, :remember_for => 1.day do
62
+ resource = create_resource
63
+ resource.remember_me!
64
+ resource.remember_created_at = 2.days.ago
65
+ resource.save
66
+ assert resource.remember_expired?
67
+ end
68
+ end
69
+
70
+ test 'remember should not be expired if it was created whitin the limit time' do
71
+ swap Devise, :remember_for => 30.days do
72
+ resource = create_resource
73
+ resource.remember_me!
74
+ resource.remember_created_at = (30.days.ago + 2.minutes)
75
+ resource.save
76
+ assert_not resource.remember_expired?
77
+ end
78
+ end
79
+
80
+ test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
81
+ swap Devise, :remember_for => 5.minutes do
82
+ resource = create_resource
83
+ resource.remember_me!(false)
84
+ assert resource.remember_created_at
85
+
86
+ resource.remember_created_at = old = 10.minutes.ago
87
+ resource.save
88
+
89
+ resource.remember_me!(false)
90
+ assert_not_equal old.to_i, resource.remember_created_at.to_i
91
+ end
92
+ end
93
+
94
+ test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
95
+ swap Devise, :remember_for => 1.year do
96
+ resource = create_resource
97
+ resource.remember_me!(false)
98
+ assert resource.remember_created_at
99
+
100
+ resource.remember_created_at = old = 10.minutes.ago.utc
101
+ resource.save
102
+
103
+ resource.remember_me!(false)
104
+ assert_equal old.to_i, resource.remember_created_at.to_i
105
+ end
106
+ end
107
+
108
+ test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
109
+ swap Devise, :remember_for => 1.year do
110
+ resource = create_resource
111
+ resource.remember_me!(true)
112
+ assert resource.remember_created_at
113
+
114
+ resource.remember_created_at = old = 10.minutes.ago
115
+ resource.save
116
+
117
+ resource.remember_me!(true)
118
+ assert_not_equal old, resource.remember_created_at
119
+ end
120
+ end
121
+ end
122
+
123
+ class RememberableTest < ActiveSupport::TestCase
124
+ include SharedRememberableTest
125
+
126
+ def resource_class
127
+ Admin
128
+ end
129
+
130
+ def create_resource
131
+ create_admin
132
+ end
133
+
134
+ test 'remember_me should generate a new token and save the record without validating' do
135
+ admin = create_admin
136
+ admin.expects(:valid?).never
137
+ token = admin.remember_token
138
+ admin.remember_me!
139
+ assert_not_equal token, admin.remember_token
140
+ assert_not admin.changed?
141
+ end
142
+
143
+ test 'forget_me should clear remember token and save the record without validating' do
144
+ admin = create_admin
145
+ admin.remember_me!
146
+ assert_not admin.remember_token.nil?
147
+ admin.expects(:valid?).never
148
+ admin.forget_me!
149
+ assert admin.remember_token.nil?
150
+ assert_not admin.changed?
151
+ end
152
+
153
+ test 'serialize into cookie' do
154
+ admin = create_admin
155
+ admin.remember_me!
156
+ assert_equal [admin.to_key, admin.remember_token], Admin.serialize_into_cookie(admin)
157
+ end
158
+
159
+ test 'serialize from cookie' do
160
+ admin = create_admin
161
+ admin.remember_me!
162
+ assert_equal admin, Admin.serialize_from_cookie(admin.to_key, admin.remember_token)
163
+ end
164
+
165
+ test 'if remember_across_browsers is true, remember_me! should create a new token if no token exists' do
166
+ swap Devise, :remember_across_browsers => true, :remember_for => 1.year do
167
+ admin = create_admin
168
+ assert_equal nil, admin.remember_token
169
+ admin.remember_me!
170
+ assert_not_equal nil, admin.remember_token
171
+ end
172
+ end
173
+
174
+ test 'if remember_across_browsers is true, remember_me! should create a new token if a token exists but has expired' do
175
+ swap Devise, :remember_across_browsers => true, :remember_for => 1.day do
176
+ admin = create_admin
177
+ admin.remember_me!
178
+ admin.remember_created_at = 2.days.ago
179
+ admin.save
180
+ token = admin.remember_token
181
+ admin.remember_me!
182
+ assert_not_equal token, admin.remember_token
183
+ end
184
+ end
185
+
186
+ test 'if remember_across_browsers is true, remember_me! should not create a new token if a token exists and has not expired' do
187
+ swap Devise, :remember_across_browsers => true, :remember_for => 2.days do
188
+ admin = create_admin
189
+ admin.remember_me!
190
+ admin.remember_created_at = 1.day.ago
191
+ admin.save
192
+ token = admin.remember_token
193
+ admin.remember_me!
194
+ assert_equal token, admin.remember_token
195
+ end
196
+ end
197
+
198
+ test 'if remember_across_browsers is false, remember_me! should create a new token if no token exists' do
199
+ swap Devise, :remember_across_browsers => false do
200
+ admin = create_admin
201
+ assert_equal nil, admin.remember_token
202
+ admin.remember_me!
203
+ assert_not_equal nil, admin.remember_token
204
+ end
205
+ end
206
+
207
+ test 'if remember_across_browsers is false, remember_me! should create a new token if a token exists but has expired' do
208
+ swap Devise, :remember_across_browsers => false, :remember_for => 1.day do
209
+ admin = create_admin
210
+ admin.remember_me!
211
+ admin.remember_created_at = 2.days.ago
212
+ admin.save
213
+ token = admin.remember_token
214
+ admin.remember_me!
215
+ assert_not_equal token, admin.remember_token
216
+ end
217
+ end
218
+
219
+ test 'if remember_across_browsers is false, remember_me! should create a new token if a token exists and has not expired' do
220
+ swap Devise, :remember_across_browsers => false, :remember_for => 2.days do
221
+ admin = create_admin
222
+ admin.remember_me!
223
+ admin.remember_created_at = 1.day.ago
224
+ admin.save
225
+ token = admin.remember_token
226
+ admin.remember_me!
227
+ assert_not_equal token, admin.remember_token
228
+ end
229
+ end
230
+ end
231
+
232
+ class WithSaltRememberableTest < ActiveSupport::TestCase
233
+ include SharedRememberableTest
234
+
235
+ setup do
236
+ assert_not User.new.respond_to?(:remember_token)
237
+ end
238
+
239
+ def resource_class
240
+ User
241
+ end
242
+
243
+ def create_resource
244
+ create_user
245
+ end
246
+
247
+ test 'remember_me should not generate a new token if using salt' do
248
+ user = create_user
249
+ user.expects(:valid?).never
250
+ user.remember_me!
251
+ end
252
+
253
+ test 'forget_me should not clear remember token if using salt' do
254
+ user = create_user
255
+ user.remember_me!
256
+ user.expects(:valid?).never
257
+ user.forget_me!
258
+ end
259
+
260
+ test 'serialize into cookie' do
261
+ user = create_user
262
+ user.remember_me!
263
+ assert_equal [user.to_key, user.authenticatable_salt], User.serialize_into_cookie(user)
264
+ end
265
+
266
+ test 'serialize from cookie' do
267
+ user = create_user
268
+ user.remember_me!
269
+ assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
270
+ end
271
+
272
+ test 'raises a RuntimeError if authenticatable_salt is nil' do
273
+ user = User.new
274
+ user.encrypted_password = nil
275
+ assert_raise RuntimeError do
276
+ user.rememberable_value
277
+ end
278
+ end
279
+ end
@@ -0,0 +1,28 @@
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
+ assert_not new_user.timedout?(29.minutes.ago)
11
+ end
12
+
13
+ test 'should not be expired when params is nil' do
14
+ assert_not new_user.timedout?(nil)
15
+ end
16
+
17
+ test 'fallback to Devise config option' do
18
+ swap Devise, :timeout_in => 1.minute do
19
+ user = new_user
20
+ assert user.timedout?(2.minutes.ago)
21
+ assert_not user.timedout?(30.seconds.ago)
22
+
23
+ Devise.timeout_in = 5.minutes
24
+ assert_not user.timedout?(2.minutes.ago)
25
+ assert user.timedout?(6.minutes.ago)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class TokenAuthenticatableTest < ActiveSupport::TestCase
4
+
5
+ test 'should reset authentication token' do
6
+ user = new_user
7
+ user.reset_authentication_token
8
+ previous_token = user.authentication_token
9
+ user.reset_authentication_token
10
+ assert_not_equal previous_token, user.authentication_token
11
+ end
12
+
13
+ test 'should ensure authentication token' do
14
+ user = new_user
15
+ user.ensure_authentication_token
16
+ previous_token = user.authentication_token
17
+ user.ensure_authentication_token
18
+ assert_equal previous_token, user.authentication_token
19
+ end
20
+
21
+ test 'should authenticate a valid user with authentication token and return it' do
22
+ user = create_user
23
+ user.ensure_authentication_token!
24
+ user.confirm!
25
+ authenticated_user = User.find_for_token_authentication(:auth_token => user.authentication_token)
26
+ assert_equal authenticated_user, user
27
+ end
28
+
29
+ test 'should return nil when authenticating an invalid user by authentication token' do
30
+ user = create_user
31
+ user.ensure_authentication_token!
32
+ user.confirm!
33
+ authenticated_user = User.find_for_token_authentication(:auth_token => user.authentication_token.reverse)
34
+ assert_nil authenticated_user
35
+ end
36
+
37
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class TrackableTest < ActiveSupport::TestCase
4
+
5
+ end
@@ -0,0 +1,99 @@
1
+ require 'test_helper'
2
+
3
+ class ValidatableTest < ActiveSupport::TestCase
4
+ test 'should require email to be set' do
5
+ user = new_user(:email => nil)
6
+ assert user.invalid?
7
+ assert user.errors[:email]
8
+ assert_equal 'can\'t be blank', user.errors[:email].join
9
+ end
10
+
11
+ test 'should require uniqueness of email, allowing blank' do
12
+ existing_user = create_user
13
+
14
+ user = new_user(:email => '')
15
+ assert user.invalid?
16
+ assert_no_match(/taken/, user.errors[:email].join)
17
+
18
+ user.email = existing_user.email
19
+ assert user.invalid?
20
+ assert_match(/taken/, user.errors[:email].join)
21
+ end
22
+
23
+ test 'should require correct email format, allowing blank' do
24
+ user = new_user(:email => '')
25
+ assert user.invalid?
26
+ assert_not_equal 'is invalid', user.errors[:email].join
27
+
28
+ %w(invalid_email_format email@invalid invalid$character@mail.com other@not 123).each do |email|
29
+ user.email = email
30
+ assert user.invalid?, 'should be invalid with email ' << email
31
+ assert_equal 'is invalid', user.errors[:email].join
32
+ end
33
+ end
34
+
35
+ test 'should accept valid emails' do
36
+ %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test).each do |email|
37
+ user = new_user(:email => email)
38
+ assert user.valid?, 'should be valid with email ' << email
39
+ assert_blank user.errors[:email]
40
+ end
41
+ end
42
+
43
+ test 'should require password to be set when creating a new record' do
44
+ user = new_user(:password => '', :password_confirmation => '')
45
+ assert user.invalid?
46
+ assert_equal 'can\'t be blank', user.errors[:password].join
47
+ end
48
+
49
+ test 'should require confirmation to be set when creating a new record' do
50
+ user = new_user(:password => 'new_password', :password_confirmation => 'blabla')
51
+ assert user.invalid?
52
+ assert_equal 'doesn\'t match confirmation', user.errors[:password].join
53
+ end
54
+
55
+ test 'should require password when updating/reseting password' do
56
+ user = create_user
57
+
58
+ user.password = ''
59
+ user.password_confirmation = ''
60
+
61
+ assert user.invalid?
62
+ assert_equal 'can\'t be blank', user.errors[:password].join
63
+ end
64
+
65
+ test 'should require confirmation when updating/reseting password' do
66
+ user = create_user
67
+ user.password_confirmation = 'another_password'
68
+ assert user.invalid?
69
+ assert_equal 'doesn\'t match confirmation', user.errors[:password].join
70
+ end
71
+
72
+ test 'should require a password with minimum of 6 characters' do
73
+ user = new_user(:password => '12345', :password_confirmation => '12345')
74
+ assert user.invalid?
75
+ assert_equal 'is too short (minimum is 6 characters)', user.errors[:password].join
76
+ end
77
+
78
+ test 'should require a password with maximum of 20 characters long' do
79
+ user = new_user(:password => 'x'*21, :password_confirmation => 'x'*21)
80
+ assert user.invalid?
81
+ assert_equal 'is too long (maximum is 20 characters)', user.errors[:password].join
82
+ end
83
+
84
+ test 'should not require password length when it\'s not changed' do
85
+ user = create_user.reload
86
+ user.password = user.password_confirmation = nil
87
+ assert user.valid?
88
+
89
+ user.password_confirmation = 'confirmation'
90
+ assert user.invalid?
91
+ assert_not (user.errors[:password].join =~ /is too long/)
92
+ end
93
+
94
+ test 'shuold not be included in objects with invalid API' do
95
+ assert_raise RuntimeError do
96
+ Class.new.send :include, Devise::Models::Validatable
97
+ end
98
+ end
99
+ end