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,49 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SerializableTest < ActiveSupport::TestCase
4
- setup do
5
- @user = create_user
6
- end
7
-
8
- test 'should not include unsafe keys on XML' do
9
- assert_match(/email/, @user.to_xml)
10
- assert_no_match(/confirmation-token/, @user.to_xml)
11
- end
12
-
13
- test 'should not include unsafe keys on XML even if a new except is provided' do
14
- assert_no_match(/email/, @user.to_xml(:except => :email))
15
- assert_no_match(/confirmation-token/, @user.to_xml(:except => :email))
16
- end
17
-
18
- test 'should include unsafe keys on XML if a force_except is provided' do
19
- assert_no_match(/<email/, @user.to_xml(:force_except => :email))
20
- assert_match(/confirmation-token/, @user.to_xml(:force_except => :email))
21
- end
22
-
23
- test 'should not include unsafe keys on JSON' do
24
- keys = from_json().keys.select{ |key| !key.include?("id") }
25
- assert_equal %w(created_at email facebook_token updated_at username), keys.sort
26
- end
27
-
28
- test 'should not include unsafe keys on JSON even if a new except is provided' do
29
- assert_no_key "email", from_json(:except => :email)
30
- assert_no_key "confirmation_token", from_json(:except => :email)
31
- end
32
-
33
- test 'should include unsafe keys on JSON if a force_except is provided' do
34
- assert_no_key "email", from_json(:force_except => :email)
35
- assert_key "confirmation_token", from_json(:force_except => :email)
36
- end
37
-
38
- def assert_key(key, subject)
39
- assert subject.key?(key), "Expected #{subject.inspect} to have key #{key.inspect}"
40
- end
41
-
42
- def assert_no_key(key, subject)
43
- assert !subject.key?(key), "Expected #{subject.inspect} to not have key #{key.inspect}"
44
- end
45
-
46
- def from_json(options=nil)
47
- ActiveSupport::JSON.decode(@user.to_json(options))["user"]
48
- end
49
- end
@@ -1,46 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TimeoutableTest < ActiveSupport::TestCase
4
-
5
- test 'should be expired' do
6
- assert new_user.timedout?(31.minutes.ago)
7
- end
8
-
9
- test 'should not be expired' do
10
- 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
-
43
- test 'required_fields should contain the fields that Devise uses' do
44
- assert_same_content Devise::Models::Timeoutable.required_fields(User), []
45
- end
46
- end
@@ -1,55 +0,0 @@
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
-
50
- test 'required_fields should contain the fields that Devise uses' do
51
- assert_same_content Devise::Models::TokenAuthenticatable.required_fields(User), [
52
- :authentication_token
53
- ]
54
- end
55
- end
@@ -1,13 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TrackableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_same_content Devise::Models::Trackable.required_fields(User), [
6
- :current_sign_in_at,
7
- :current_sign_in_ip,
8
- :last_sign_in_at,
9
- :last_sign_in_ip,
10
- :sign_in_count
11
- ]
12
- end
13
- end
@@ -1,127 +0,0 @@
1
- # encoding: UTF-8
2
- require 'test_helper'
3
-
4
- class ValidatableTest < ActiveSupport::TestCase
5
- test 'should require email to be set' do
6
- user = new_user(:email => nil)
7
- assert user.invalid?
8
- assert user.errors[:email]
9
- assert_equal 'can\'t be blank', user.errors[:email].join
10
- end
11
-
12
- test 'should require uniqueness of email if email has changed, allowing blank' do
13
- existing_user = create_user
14
-
15
- user = new_user(:email => '')
16
- assert user.invalid?
17
- assert_no_match(/taken/, user.errors[:email].join)
18
-
19
- user.email = existing_user.email
20
- assert user.invalid?
21
- assert_match(/taken/, user.errors[:email].join)
22
-
23
- user.save(:validate => false)
24
- assert user.valid?
25
- end
26
-
27
- test 'should require correct email format if email has changed, allowing blank' do
28
- user = new_user(:email => '')
29
- assert user.invalid?
30
- assert_not_equal 'is invalid', user.errors[:email].join
31
-
32
- %w{invalid_email_format 123 $$$ () ☃ bla@bla.}.each do |email|
33
- user.email = email
34
- assert user.invalid?, 'should be invalid with email ' << email
35
- assert_equal 'is invalid', user.errors[:email].join
36
- end
37
-
38
- user.save(:validate => false)
39
- assert user.valid?
40
- end
41
-
42
- test 'should accept valid emails' do
43
- %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
44
- user = new_user(:email => email)
45
- assert user.valid?, 'should be valid with email ' << email
46
- assert_blank user.errors[:email]
47
- end
48
- end
49
-
50
- test 'should require password to be set when creating a new record' do
51
- user = new_user(:password => '', :password_confirmation => '')
52
- assert user.invalid?
53
- assert_equal 'can\'t be blank', user.errors[:password].join
54
- end
55
-
56
- test 'should require confirmation to be set when creating a new record' do
57
- user = new_user(:password => 'new_password', :password_confirmation => 'blabla')
58
- assert user.invalid?
59
-
60
- if Devise.rails4?
61
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
62
- else
63
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
64
- end
65
- end
66
-
67
- test 'should require password when updating/resetting password' do
68
- user = create_user
69
-
70
- user.password = ''
71
- user.password_confirmation = ''
72
-
73
- assert user.invalid?
74
- assert_equal 'can\'t be blank', user.errors[:password].join
75
- end
76
-
77
- test 'should require confirmation when updating/resetting password' do
78
- user = create_user
79
- user.password_confirmation = 'another_password'
80
- assert user.invalid?
81
-
82
- if Devise.rails4?
83
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
84
- else
85
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
86
- end
87
- end
88
-
89
- test 'should require a password with minimum of 6 characters' do
90
- user = new_user(:password => '12345', :password_confirmation => '12345')
91
- assert user.invalid?
92
- assert_equal 'is too short (minimum is 6 characters)', user.errors[:password].join
93
- end
94
-
95
- test 'should require a password with maximum of 128 characters long' do
96
- user = new_user(:password => 'x'*129, :password_confirmation => 'x'*129)
97
- assert user.invalid?
98
- assert_equal 'is too long (maximum is 128 characters)', user.errors[:password].join
99
- end
100
-
101
- test 'should not require password length when it\'s not changed' do
102
- user = create_user.reload
103
- user.password = user.password_confirmation = nil
104
- assert user.valid?
105
-
106
- user.password_confirmation = 'confirmation'
107
- assert user.invalid?
108
- assert_not (user.errors[:password].join =~ /is too long/)
109
- end
110
-
111
- test 'should complain about length even if password is not required' do
112
- user = new_user(:password => 'x'*129, :password_confirmation => 'x'*129)
113
- user.stubs(:password_required?).returns(false)
114
- assert user.invalid?
115
- assert_equal 'is too long (maximum is 128 characters)', user.errors[:password].join
116
- end
117
-
118
- test 'should not be included in objects with invalid API' do
119
- assert_raise RuntimeError do
120
- Class.new.send :include, Devise::Models::Validatable
121
- end
122
- end
123
-
124
- test 'required_fields should be an empty array' do
125
- assert_equal Devise::Models::Validatable.required_fields(User), []
126
- end
127
- end
data/test/models_test.rb DELETED
@@ -1,163 +0,0 @@
1
- require 'test_helper'
2
- require 'test_models'
3
-
4
- class ActiveRecordTest < ActiveSupport::TestCase
5
- def include_module?(klass, mod)
6
- klass.devise_modules.include?(mod) &&
7
- klass.included_modules.include?(Devise::Models::const_get(mod.to_s.classify))
8
- end
9
-
10
- def assert_include_modules(klass, *modules)
11
- modules.each do |mod|
12
- assert include_module?(klass, mod)
13
- end
14
-
15
- (Devise::ALL - modules).each do |mod|
16
- assert_not include_module?(klass, mod)
17
- end
18
- end
19
-
20
- test 'can cherry pick modules' do
21
- assert_include_modules Admin, :database_authenticatable, :registerable, :timeoutable, :recoverable, :lockable, :confirmable
22
- end
23
-
24
- test 'validations options are not applied too late' do
25
- validators = WithValidation.validators_on :password
26
- length = validators.find { |v| v.kind == :length }
27
- assert_equal 2, length.options[:minimum]
28
- assert_equal 6, length.options[:maximum]
29
- end
30
-
31
- test 'validations are applied just once' do
32
- validators = Several.validators_on :password
33
- assert_equal 1, validators.select{ |v| v.kind == :length }.length
34
- end
35
-
36
- test 'chosen modules are inheritable' do
37
- assert_include_modules Inheritable, :database_authenticatable, :registerable, :timeoutable, :recoverable, :lockable, :confirmable
38
- end
39
-
40
- test 'order of module inclusion' do
41
- correct_module_order = [:database_authenticatable, :recoverable, :registerable, :confirmable, :lockable, :timeoutable]
42
- incorrect_module_order = [:database_authenticatable, :timeoutable, :registerable, :recoverable, :lockable, :confirmable]
43
-
44
- assert_include_modules Admin, *incorrect_module_order
45
-
46
- # get module constants from symbol list
47
- module_constants = correct_module_order.collect { |mod| Devise::Models::const_get(mod.to_s.classify) }
48
-
49
- # confirm that they adhere to the order in ALL
50
- # get included modules, filter out the noise, and reverse the order
51
- assert_equal module_constants, (Admin.included_modules & module_constants).reverse
52
- end
53
-
54
- test 'raise error on invalid module' do
55
- assert_raise NameError do
56
- # Mix valid an invalid modules.
57
- Configurable.class_eval { devise :database_authenticatable, :doesnotexit }
58
- end
59
- end
60
-
61
- test 'set a default value for stretches' do
62
- assert_equal 15, Configurable.stretches
63
- end
64
-
65
- test 'set a default value for pepper' do
66
- assert_equal 'abcdef', Configurable.pepper
67
- end
68
-
69
- test 'set a default value for allow_unconfirmed_access_for' do
70
- assert_equal 5.days, Configurable.allow_unconfirmed_access_for
71
- end
72
-
73
- test 'set a default value for remember_for' do
74
- assert_equal 7.days, Configurable.remember_for
75
- end
76
-
77
- test 'set a default value for timeout_in' do
78
- assert_equal 15.minutes, Configurable.timeout_in
79
- end
80
-
81
- test 'set a default value for unlock_in' do
82
- assert_equal 10.days, Configurable.unlock_in
83
- end
84
-
85
- test 'set null fields on migrations' do
86
- # Ignore email sending since no email exists.
87
- klass = Class.new(Admin) do
88
- def send_devise_notification(*); end
89
- end
90
-
91
- klass.create!
92
- end
93
- end
94
-
95
- class CheckFieldsTest < ActiveSupport::TestCase
96
- test 'checks if the class respond_to the required fields' do
97
- Player = Class.new do
98
- extend Devise::Models
99
-
100
- def self.before_validation(instance)
101
- end
102
-
103
- devise :database_authenticatable
104
-
105
- attr_accessor :encrypted_password, :email
106
- end
107
-
108
- assert_nothing_raised Devise::Models::MissingAttribute do
109
- Devise::Models.check_fields!(Player)
110
- end
111
- end
112
-
113
- test 'raises Devise::Models::MissingAtrribute and shows the missing attribute if the class doesn\'t respond_to one of the attributes' do
114
- Clown = Class.new do
115
- extend Devise::Models
116
-
117
- def self.before_validation(instance)
118
- end
119
-
120
- devise :database_authenticatable
121
-
122
- attr_accessor :encrypted_password
123
- end
124
-
125
- assert_raise_with_message Devise::Models::MissingAttribute, "The following attribute(s) is (are) missing on your model: email" do
126
- Devise::Models.check_fields!(Clown)
127
- end
128
- end
129
-
130
- test 'raises Devise::Models::MissingAtrribute with all the missing attributes if there is more than one' do
131
- Magician = Class.new do
132
- extend Devise::Models
133
-
134
- def self.before_validation(instance)
135
- end
136
-
137
- devise :database_authenticatable
138
- end
139
-
140
- assert_raise_with_message Devise::Models::MissingAttribute, "The following attribute(s) is (are) missing on your model: encrypted_password, email" do
141
- Devise::Models.check_fields!(Magician)
142
- end
143
- end
144
-
145
- test "doesn't raise a NoMethodError exception when the module doesn't have a required_field(klass) class method" do
146
- driver = Class.new do
147
- extend Devise::Models
148
-
149
- def self.before_validation(instance)
150
- end
151
-
152
- attr_accessor :encrypted_password, :email
153
-
154
- devise :database_authenticatable
155
- end
156
-
157
- swap_module_method_existence Devise::Models::DatabaseAuthenticatable, :required_fields do
158
- assert_deprecated do
159
- Devise::Models.check_fields!(driver)
160
- end
161
- end
162
- end
163
- end
@@ -1,57 +0,0 @@
1
- require 'test_helper'
2
-
3
- class OmniAuthConfigTest < ActiveSupport::TestCase
4
- class MyStrategy
5
- include OmniAuth::Strategy
6
- end
7
-
8
- test 'strategy_name returns provider if no options given' do
9
- config = Devise::OmniAuth::Config.new :facebook, [{}]
10
- assert_equal :facebook, config.strategy_name
11
- end
12
-
13
- test 'strategy_name returns provider if no name option are given' do
14
- config = Devise::OmniAuth::Config.new :facebook, [{ :other => :option }]
15
- assert_equal :facebook, config.strategy_name
16
- end
17
-
18
- test 'returns name option when have a name' do
19
- config = Devise::OmniAuth::Config.new :facebook, [{ :name => :github }]
20
- assert_equal :github, config.strategy_name
21
- end
22
-
23
- test "finds contrib strategies" do
24
- config = Devise::OmniAuth::Config.new :facebook, [{}]
25
- assert_equal OmniAuth::Strategies::Facebook, config.strategy_class
26
- end
27
-
28
- test "finds the strategy in OmniAuth's list by name" do
29
- NamedTestStrategy = Class.new
30
- NamedTestStrategy.send :include, OmniAuth::Strategy
31
- NamedTestStrategy.option :name, :the_one
32
-
33
- config = Devise::OmniAuth::Config.new :the_one, [{}]
34
- assert_equal NamedTestStrategy, config.strategy_class
35
- end
36
-
37
- test "finds the strategy in OmniAuth's list by class name" do
38
- UnNamedTestStrategy = Class.new
39
- UnNamedTestStrategy.send :include, OmniAuth::Strategy
40
-
41
- config = Devise::OmniAuth::Config.new :un_named_test_strategy, [{}]
42
- assert_equal UnNamedTestStrategy, config.strategy_class
43
- end
44
-
45
- test 'raises an error if strategy cannot be found' do
46
- config = Devise::OmniAuth::Config.new :my_other_strategy, [{}]
47
- assert_raise Devise::OmniAuth::StrategyNotFound do
48
- config.strategy_class
49
- end
50
- end
51
-
52
- test 'allows the user to define a custom require path' do
53
- config = Devise::OmniAuth::Config.new :my_strategy, [{:strategy_class => MyStrategy}]
54
- config_class = config.strategy_class
55
- assert_equal MyStrategy, config_class
56
- end
57
- end
@@ -1,54 +0,0 @@
1
- require 'test_helper'
2
-
3
- class OmniAuthRoutesTest < ActionController::TestCase
4
- ExpectedUrlGeneratiorError = Devise.rails4? ?
5
- ActionController::UrlGenerationError : ActionController::RoutingError
6
-
7
- tests ApplicationController
8
-
9
- def assert_path(action, provider, with_param=true)
10
- # Resource param
11
- assert_equal @controller.send(action, :user, provider),
12
- @controller.send("user_#{action}", provider)
13
-
14
- # With an object
15
- assert_equal @controller.send(action, User.new, provider),
16
- @controller.send("user_#{action}", provider)
17
-
18
- if with_param
19
- # Default url params
20
- assert_equal @controller.send(action, :user, provider, :param => 123),
21
- @controller.send("user_#{action}", provider, :param => 123)
22
- end
23
- end
24
-
25
- test 'should alias omniauth_callback to mapped user auth_callback' do
26
- assert_path :omniauth_callback_path, :facebook
27
- end
28
-
29
- test 'should alias omniauth_authorize to mapped user auth_authorize' do
30
- assert_path :omniauth_authorize_path, :facebook, false
31
- end
32
-
33
- test 'should generate authorization path' do
34
- assert_match "/users/auth/facebook", @controller.omniauth_authorize_path(:user, :facebook)
35
-
36
- assert_raise ExpectedUrlGeneratiorError do
37
- @controller.omniauth_authorize_path(:user, :github)
38
- end
39
- end
40
-
41
- test 'should generate authorization path for named open_id omniauth' do
42
- assert_match "/users/auth/google", @controller.omniauth_authorize_path(:user, :google)
43
- end
44
-
45
- test 'should generate authorization path with params' do
46
- assert_match "/users/auth/openid?openid_url=http%3A%2F%2Fyahoo.com",
47
- @controller.omniauth_authorize_path(:user, :openid, :openid_url => "http://yahoo.com")
48
- end
49
-
50
- test 'should not add a "?" if no param was sent' do
51
- assert_equal "/users/auth/openid",
52
- @controller.omniauth_authorize_path(:user, :openid)
53
- end
54
- end
@@ -1,10 +0,0 @@
1
- ActiveRecord::Migration.verbose = false
2
- ActiveRecord::Base.logger = Logger.new(nil)
3
- ActiveRecord::Base.include_root_in_json = true
4
-
5
- ActiveRecord::Migrator.migrate(File.expand_path("../../rails_app/db/migrate/", __FILE__))
6
-
7
- class ActiveSupport::TestCase
8
- self.use_transactional_fixtures = true
9
- self.use_instantiated_fixtures = false
10
- end
data/test/orm/mongoid.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'mongoid/version'
2
-
3
- Mongoid.configure do |config|
4
- config.connect_to("devise-test-suite")
5
- config.use_utc = true
6
- config.include_root_in_json = true
7
- end
8
-
9
- class ActiveSupport::TestCase
10
- setup do
11
- Mongoid.purge!
12
- end
13
- end
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
- require 'devise/parameter_sanitizer'
3
-
4
- class BaseSanitizerTest < ActiveSupport::TestCase
5
- def sanitizer
6
- Devise::BaseSanitizer.new(User, :user, { user: { "email" => "jose" } })
7
- end
8
-
9
- test 'returns chosen params' do
10
- assert_equal({ "email" => "jose" }, sanitizer.for(:sign_in))
11
- end
12
- end
13
-
14
- if defined?(ActionController::StrongParameters)
15
- require 'active_model/forbidden_attributes_protection'
16
-
17
- class ParameterSanitizerTest < ActiveSupport::TestCase
18
- def sanitizer(params)
19
- params = ActionController::Parameters.new(params)
20
- Devise::ParameterSanitizer.new(User, :user, params)
21
- end
22
-
23
- test 'filters some parameters on sign in by default' do
24
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid", "remember_me" => "1" })
25
- assert_equal({ "email" => "jose", "password" => "invalid", "remember_me" => "1" }, sanitizer.for(:sign_in))
26
- end
27
-
28
- test 'handles auth keys as a hash' do
29
- swap Devise, :authentication_keys => {:email => true} do
30
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
31
- assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.for(:sign_in))
32
- end
33
- end
34
-
35
- test 'filters some parameters on sign up by default' do
36
- sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
37
- assert_equal({ "email" => "jose" }, sanitizer.for(:sign_up))
38
- end
39
-
40
- test 'filters some parameters on account update by default' do
41
- sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
42
- assert_equal({ "email" => "jose" }, sanitizer.for(:account_update))
43
- end
44
-
45
- test 'allows custom hooks' do
46
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
47
- sanitizer.for(:sign_in) { |user| user.permit(:email, :password) }
48
- assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.for(:sign_in))
49
- end
50
-
51
- test 'raises on unknown hooks' do
52
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
53
- assert_raise NotImplementedError do
54
- sanitizer.for(:unknown)
55
- end
56
- end
57
- end
58
- end
@@ -1,6 +0,0 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
-
4
- require File.expand_path('../config/application', __FILE__)
5
-
6
- Rails.application.load_tasks
@@ -1,6 +0,0 @@
1
- require 'shared_admin'
2
-
3
- class Admin < ActiveRecord::Base
4
- include Shim
5
- include SharedAdmin
6
- end
@@ -1,2 +0,0 @@
1
- module Shim
2
- end
@@ -1,6 +0,0 @@
1
- require 'shared_user'
2
-
3
- class User < ActiveRecord::Base
4
- include Shim
5
- include SharedUser
6
- end
@@ -1,6 +0,0 @@
1
- class Admins::SessionsController < Devise::SessionsController
2
- def new
3
- flash[:special] = "Welcome to #{controller_path.inspect} controller!"
4
- super
5
- end
6
- end