cloudfoundry-devise 1.5.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.
Files changed (210) hide show
  1. data/.gitignore +12 -0
  2. data/.travis.yml +13 -0
  3. data/CHANGELOG.rdoc +755 -0
  4. data/Gemfile +35 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +366 -0
  7. data/Rakefile +34 -0
  8. data/app/controllers/devise/confirmations_controller.rb +46 -0
  9. data/app/controllers/devise/omniauth_callbacks_controller.rb +26 -0
  10. data/app/controllers/devise/passwords_controller.rb +50 -0
  11. data/app/controllers/devise/registrations_controller.rb +114 -0
  12. data/app/controllers/devise/sessions_controller.rb +49 -0
  13. data/app/controllers/devise/unlocks_controller.rb +34 -0
  14. data/app/helpers/devise_helper.rb +25 -0
  15. data/app/mailers/devise/mailer.rb +15 -0
  16. data/app/views/devise/confirmations/new.html.erb +12 -0
  17. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  20. data/app/views/devise/passwords/edit.html.erb +16 -0
  21. data/app/views/devise/passwords/new.html.erb +12 -0
  22. data/app/views/devise/registrations/edit.html.erb +25 -0
  23. data/app/views/devise/registrations/new.html.erb +18 -0
  24. data/app/views/devise/sessions/new.html.erb +17 -0
  25. data/app/views/devise/shared/_links.erb +25 -0
  26. data/app/views/devise/unlocks/new.html.erb +12 -0
  27. data/cloudfoundry-devise.gemspec +25 -0
  28. data/config/locales/en.yml +59 -0
  29. data/lib/devise.rb +453 -0
  30. data/lib/devise/controllers/helpers.rb +260 -0
  31. data/lib/devise/controllers/internal_helpers.rb +161 -0
  32. data/lib/devise/controllers/rememberable.rb +52 -0
  33. data/lib/devise/controllers/scoped_views.rb +33 -0
  34. data/lib/devise/controllers/shared_helpers.rb +26 -0
  35. data/lib/devise/controllers/url_helpers.rb +53 -0
  36. data/lib/devise/delegator.rb +16 -0
  37. data/lib/devise/encryptors/authlogic_sha512.rb +19 -0
  38. data/lib/devise/encryptors/base.rb +20 -0
  39. data/lib/devise/encryptors/clearance_sha1.rb +17 -0
  40. data/lib/devise/encryptors/restful_authentication_sha1.rb +22 -0
  41. data/lib/devise/encryptors/sha1.rb +25 -0
  42. data/lib/devise/encryptors/sha512.rb +25 -0
  43. data/lib/devise/failure_app.rb +149 -0
  44. data/lib/devise/hooks/activatable.rb +11 -0
  45. data/lib/devise/hooks/forgetable.rb +9 -0
  46. data/lib/devise/hooks/rememberable.rb +6 -0
  47. data/lib/devise/hooks/timeoutable.rb +24 -0
  48. data/lib/devise/hooks/trackable.rb +9 -0
  49. data/lib/devise/mailers/helpers.rb +86 -0
  50. data/lib/devise/mapping.rb +175 -0
  51. data/lib/devise/models.rb +91 -0
  52. data/lib/devise/models/authenticatable.rb +181 -0
  53. data/lib/devise/models/confirmable.rb +220 -0
  54. data/lib/devise/models/database_authenticatable.rb +122 -0
  55. data/lib/devise/models/encryptable.rb +72 -0
  56. data/lib/devise/models/lockable.rb +169 -0
  57. data/lib/devise/models/omniauthable.rb +23 -0
  58. data/lib/devise/models/recoverable.rb +136 -0
  59. data/lib/devise/models/registerable.rb +21 -0
  60. data/lib/devise/models/rememberable.rb +114 -0
  61. data/lib/devise/models/serializable.rb +43 -0
  62. data/lib/devise/models/timeoutable.rb +45 -0
  63. data/lib/devise/models/token_authenticatable.rb +72 -0
  64. data/lib/devise/models/trackable.rb +30 -0
  65. data/lib/devise/models/validatable.rb +62 -0
  66. data/lib/devise/modules.rb +30 -0
  67. data/lib/devise/omniauth.rb +28 -0
  68. data/lib/devise/omniauth/config.rb +45 -0
  69. data/lib/devise/omniauth/url_helpers.rb +33 -0
  70. data/lib/devise/orm/active_record.rb +44 -0
  71. data/lib/devise/orm/mongoid.rb +31 -0
  72. data/lib/devise/param_filter.rb +41 -0
  73. data/lib/devise/path_checker.rb +18 -0
  74. data/lib/devise/rails.rb +73 -0
  75. data/lib/devise/rails/routes.rb +385 -0
  76. data/lib/devise/rails/warden_compat.rb +120 -0
  77. data/lib/devise/schema.rb +109 -0
  78. data/lib/devise/strategies/authenticatable.rb +155 -0
  79. data/lib/devise/strategies/base.rb +15 -0
  80. data/lib/devise/strategies/database_authenticatable.rb +21 -0
  81. data/lib/devise/strategies/rememberable.rb +53 -0
  82. data/lib/devise/strategies/token_authenticatable.rb +57 -0
  83. data/lib/devise/test_helpers.rb +90 -0
  84. data/lib/devise/version.rb +3 -0
  85. data/lib/generators/active_record/devise_generator.rb +71 -0
  86. data/lib/generators/active_record/templates/migration.rb +29 -0
  87. data/lib/generators/active_record/templates/migration_existing.rb +26 -0
  88. data/lib/generators/devise/devise_generator.rb +22 -0
  89. data/lib/generators/devise/install_generator.rb +24 -0
  90. data/lib/generators/devise/orm_helpers.rb +31 -0
  91. data/lib/generators/devise/views_generator.rb +98 -0
  92. data/lib/generators/mongoid/devise_generator.rb +60 -0
  93. data/lib/generators/templates/README +32 -0
  94. data/lib/generators/templates/devise.rb +215 -0
  95. data/lib/generators/templates/markerb/confirmation_instructions.markerb +5 -0
  96. data/lib/generators/templates/markerb/reset_password_instructions.markerb +8 -0
  97. data/lib/generators/templates/markerb/unlock_instructions.markerb +7 -0
  98. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +15 -0
  99. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
  100. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
  101. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +22 -0
  102. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
  103. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
  104. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +15 -0
  105. data/test/controllers/helpers_test.rb +254 -0
  106. data/test/controllers/internal_helpers_test.rb +96 -0
  107. data/test/controllers/sessions_controller_test.rb +16 -0
  108. data/test/controllers/url_helpers_test.rb +59 -0
  109. data/test/delegator_test.rb +19 -0
  110. data/test/devise_test.rb +72 -0
  111. data/test/encryptors_test.rb +30 -0
  112. data/test/failure_app_test.rb +207 -0
  113. data/test/generators/active_record_generator_test.rb +47 -0
  114. data/test/generators/devise_generator_test.rb +39 -0
  115. data/test/generators/install_generator_test.rb +13 -0
  116. data/test/generators/mongoid_generator_test.rb +23 -0
  117. data/test/generators/views_generator_test.rb +52 -0
  118. data/test/helpers/devise_helper_test.rb +51 -0
  119. data/test/indifferent_hash.rb +33 -0
  120. data/test/integration/authenticatable_test.rb +590 -0
  121. data/test/integration/confirmable_test.rb +262 -0
  122. data/test/integration/database_authenticatable_test.rb +82 -0
  123. data/test/integration/http_authenticatable_test.rb +82 -0
  124. data/test/integration/lockable_test.rb +212 -0
  125. data/test/integration/omniauthable_test.rb +133 -0
  126. data/test/integration/recoverable_test.rb +287 -0
  127. data/test/integration/registerable_test.rb +335 -0
  128. data/test/integration/rememberable_test.rb +158 -0
  129. data/test/integration/timeoutable_test.rb +98 -0
  130. data/test/integration/token_authenticatable_test.rb +148 -0
  131. data/test/integration/trackable_test.rb +92 -0
  132. data/test/mailers/confirmation_instructions_test.rb +95 -0
  133. data/test/mailers/reset_password_instructions_test.rb +83 -0
  134. data/test/mailers/unlock_instructions_test.rb +77 -0
  135. data/test/mapping_test.rb +128 -0
  136. data/test/models/confirmable_test.rb +334 -0
  137. data/test/models/database_authenticatable_test.rb +167 -0
  138. data/test/models/encryptable_test.rb +67 -0
  139. data/test/models/lockable_test.rb +225 -0
  140. data/test/models/recoverable_test.rb +198 -0
  141. data/test/models/rememberable_test.rb +168 -0
  142. data/test/models/serializable_test.rb +38 -0
  143. data/test/models/timeoutable_test.rb +42 -0
  144. data/test/models/token_authenticatable_test.rb +49 -0
  145. data/test/models/trackable_test.rb +5 -0
  146. data/test/models/validatable_test.rb +113 -0
  147. data/test/models_test.rb +109 -0
  148. data/test/omniauth/config_test.rb +57 -0
  149. data/test/omniauth/url_helpers_test.rb +58 -0
  150. data/test/orm/active_record.rb +9 -0
  151. data/test/orm/mongoid.rb +14 -0
  152. data/test/rails_app/Rakefile +10 -0
  153. data/test/rails_app/app/active_record/admin.rb +6 -0
  154. data/test/rails_app/app/active_record/shim.rb +2 -0
  155. data/test/rails_app/app/active_record/user.rb +6 -0
  156. data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
  157. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  158. data/test/rails_app/app/controllers/application_controller.rb +8 -0
  159. data/test/rails_app/app/controllers/home_controller.rb +25 -0
  160. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  161. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  162. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +14 -0
  163. data/test/rails_app/app/controllers/users_controller.rb +23 -0
  164. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  165. data/test/rails_app/app/mailers/users/mailer.rb +3 -0
  166. data/test/rails_app/app/mongoid/admin.rb +24 -0
  167. data/test/rails_app/app/mongoid/shim.rb +24 -0
  168. data/test/rails_app/app/mongoid/user.rb +45 -0
  169. data/test/rails_app/app/views/admins/index.html.erb +1 -0
  170. data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
  171. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -0
  172. data/test/rails_app/app/views/home/index.html.erb +1 -0
  173. data/test/rails_app/app/views/home/join.html.erb +1 -0
  174. data/test/rails_app/app/views/home/private.html.erb +1 -0
  175. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -0
  176. data/test/rails_app/app/views/layouts/application.html.erb +24 -0
  177. data/test/rails_app/app/views/users/index.html.erb +1 -0
  178. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
  179. data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
  180. data/test/rails_app/config.ru +4 -0
  181. data/test/rails_app/config/application.rb +41 -0
  182. data/test/rails_app/config/boot.rb +8 -0
  183. data/test/rails_app/config/database.yml +18 -0
  184. data/test/rails_app/config/environment.rb +5 -0
  185. data/test/rails_app/config/environments/development.rb +18 -0
  186. data/test/rails_app/config/environments/production.rb +33 -0
  187. data/test/rails_app/config/environments/test.rb +33 -0
  188. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  189. data/test/rails_app/config/initializers/devise.rb +197 -0
  190. data/test/rails_app/config/initializers/inflections.rb +2 -0
  191. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  192. data/test/rails_app/config/routes.rb +87 -0
  193. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +71 -0
  194. data/test/rails_app/db/schema.rb +52 -0
  195. data/test/rails_app/lib/shared_admin.rb +10 -0
  196. data/test/rails_app/lib/shared_user.rb +26 -0
  197. data/test/rails_app/public/404.html +26 -0
  198. data/test/rails_app/public/422.html +26 -0
  199. data/test/rails_app/public/500.html +26 -0
  200. data/test/rails_app/public/favicon.ico +0 -0
  201. data/test/rails_app/script/rails +10 -0
  202. data/test/routes_test.rb +240 -0
  203. data/test/support/assertions.rb +27 -0
  204. data/test/support/helpers.rb +109 -0
  205. data/test/support/integration.rb +88 -0
  206. data/test/support/locale/en.yml +4 -0
  207. data/test/support/webrat/integrations/rails.rb +24 -0
  208. data/test/test_helper.rb +27 -0
  209. data/test/test_helpers_test.rb +134 -0
  210. metadata +295 -0
@@ -0,0 +1,198 @@
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
+ 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 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.send :generate_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.send :generate_reset_password_token!
144
+
145
+ reset_password_user = 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.send :generate_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
+ end
@@ -0,0 +1,168 @@
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.destroy
61
+ resource.expects(:remember_created_at).never
62
+ resource.expects(:save).never
63
+ resource.forget_me!
64
+ end
65
+
66
+ test 'remember is expired if not created at timestamp is set' do
67
+ assert create_resource.remember_expired?
68
+ end
69
+
70
+ test 'serialize should return nil if no resource is found' do
71
+ assert_nil resource_class.serialize_from_cookie([0], "123")
72
+ end
73
+
74
+ test 'remember me return nil if is a valid resource with invalid token' do
75
+ resource = create_resource
76
+ assert_nil resource_class.serialize_from_cookie([resource.id], "123")
77
+ end
78
+
79
+ test 'remember for should fallback to devise remember for default configuration' do
80
+ swap Devise, :remember_for => 1.day do
81
+ resource = create_resource
82
+ resource.remember_me!
83
+ assert_not resource.remember_expired?
84
+ end
85
+ end
86
+
87
+ test 'remember expires at should sum date of creation with remember for configuration' do
88
+ swap Devise, :remember_for => 3.days do
89
+ resource = create_resource
90
+ resource.remember_me!
91
+ assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
92
+
93
+ Devise.remember_for = 5.days
94
+ assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
95
+ end
96
+ end
97
+
98
+ test 'remember should be expired if remember_for is zero' do
99
+ swap Devise, :remember_for => 0.days do
100
+ Devise.remember_for = 0.days
101
+ resource = create_resource
102
+ resource.remember_me!
103
+ assert resource.remember_expired?
104
+ end
105
+ end
106
+
107
+ test 'remember should be expired if it was created before limit time' do
108
+ swap Devise, :remember_for => 1.day do
109
+ resource = create_resource
110
+ resource.remember_me!
111
+ resource.remember_created_at = 2.days.ago
112
+ resource.save
113
+ assert resource.remember_expired?
114
+ end
115
+ end
116
+
117
+ test 'remember should not be expired if it was created whitin the limit time' do
118
+ swap Devise, :remember_for => 30.days do
119
+ resource = create_resource
120
+ resource.remember_me!
121
+ resource.remember_created_at = (30.days.ago + 2.minutes)
122
+ resource.save
123
+ assert_not resource.remember_expired?
124
+ end
125
+ end
126
+
127
+ test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
128
+ swap Devise, :remember_for => 5.minutes do
129
+ resource = create_resource
130
+ resource.remember_me!(false)
131
+ assert resource.remember_created_at
132
+
133
+ resource.remember_created_at = old = 10.minutes.ago
134
+ resource.save
135
+
136
+ resource.remember_me!(false)
137
+ assert_not_equal old.to_i, resource.remember_created_at.to_i
138
+ end
139
+ end
140
+
141
+ test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
142
+ swap Devise, :remember_for => 1.year do
143
+ resource = create_resource
144
+ resource.remember_me!(false)
145
+ assert resource.remember_created_at
146
+
147
+ resource.remember_created_at = old = 10.minutes.ago.utc
148
+ resource.save
149
+
150
+ resource.remember_me!(false)
151
+ assert_equal old.to_i, resource.remember_created_at.to_i
152
+ end
153
+ end
154
+
155
+ test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
156
+ swap Devise, :remember_for => 1.year do
157
+ resource = create_resource
158
+ resource.remember_me!(true)
159
+ assert resource.remember_created_at
160
+
161
+ resource.remember_created_at = old = 10.minutes.ago
162
+ resource.save
163
+
164
+ resource.remember_me!(true)
165
+ assert_not_equal old, resource.remember_created_at
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,38 @@
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
+ assert_match /"email":/, @user.to_json
25
+ assert_no_match /"confirmation_token":/, @user.to_json
26
+ end
27
+
28
+ test 'should not include unsafe keys on JSON even if a new except is provided' do
29
+ assert_no_match /"email":/, @user.to_json(:except => :email)
30
+ assert_no_match /"confirmation_token":/, @user.to_json(:except => :email)
31
+ end
32
+
33
+ test 'should include unsafe keys on JSON if a force_except is provided' do
34
+ assert_no_match /"email":/, @user.to_json(:force_except => :email)
35
+ assert_match /"confirmation_token":/, @user.to_json(:force_except => :email)
36
+ end
37
+
38
+ end
@@ -0,0 +1,42 @@
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 '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
+ assert_not 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
+ assert_not 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
+ assert_not user.timedout?(30.seconds.ago)
36
+
37
+ Devise.timeout_in = 5.minutes
38
+ assert_not user.timedout?(2.minutes.ago)
39
+ assert user.timedout?(6.minutes.ago)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,49 @@
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
+ test 'should not be subject to injection' do
38
+ user1 = create_user
39
+ user1.ensure_authentication_token!
40
+ user1.confirm!
41
+
42
+ user2 = create_user
43
+ user2.ensure_authentication_token!
44
+ user2.confirm!
45
+
46
+ user = User.find_for_token_authentication(:auth_token => {'$ne' => user1.authentication_token})
47
+ assert_nil user
48
+ end
49
+ end