devise_token_auth 0.1.43 → 1.2.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 (183) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +42 -895
  3. data/Rakefile +11 -4
  4. data/app/controllers/devise_token_auth/application_controller.rb +19 -8
  5. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +26 -12
  6. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +106 -85
  7. data/app/controllers/devise_token_auth/confirmations_controller.rb +73 -17
  8. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +95 -51
  9. data/app/controllers/devise_token_auth/passwords_controller.rb +65 -57
  10. data/app/controllers/devise_token_auth/registrations_controller.rb +61 -61
  11. data/app/controllers/devise_token_auth/sessions_controller.rb +22 -18
  12. data/app/controllers/devise_token_auth/token_validations_controller.rb +5 -3
  13. data/app/controllers/devise_token_auth/unlocks_controller.rb +20 -16
  14. data/app/models/devise_token_auth/concerns/active_record_support.rb +14 -0
  15. data/app/models/devise_token_auth/concerns/confirmable_support.rb +28 -0
  16. data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
  17. data/app/models/devise_token_auth/concerns/tokens_serialization.rb +31 -0
  18. data/app/models/devise_token_auth/concerns/user.rb +92 -100
  19. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +8 -3
  20. data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +5 -3
  21. data/app/views/devise_token_auth/omniauth_external_window.html.erb +1 -1
  22. data/config/locales/da-DK.yml +11 -9
  23. data/config/locales/de.yml +2 -0
  24. data/config/locales/en.yml +10 -0
  25. data/config/locales/es.yml +2 -0
  26. data/config/locales/fr.yml +2 -0
  27. data/config/locales/he.yml +52 -0
  28. data/config/locales/it.yml +2 -0
  29. data/config/locales/ja.yml +4 -2
  30. data/config/locales/ko.yml +51 -0
  31. data/config/locales/nl.yml +2 -0
  32. data/config/locales/pl.yml +6 -3
  33. data/config/locales/pt-BR.yml +2 -0
  34. data/config/locales/pt.yml +6 -3
  35. data/config/locales/ro.yml +2 -0
  36. data/config/locales/ru.yml +2 -0
  37. data/config/locales/sq.yml +2 -0
  38. data/config/locales/sv.yml +52 -0
  39. data/config/locales/uk.yml +2 -0
  40. data/config/locales/vi.yml +2 -0
  41. data/config/locales/zh-CN.yml +2 -0
  42. data/config/locales/zh-HK.yml +2 -0
  43. data/config/locales/zh-TW.yml +2 -0
  44. data/lib/devise_token_auth/blacklist.rb +6 -0
  45. data/lib/devise_token_auth/controllers/helpers.rb +21 -13
  46. data/lib/devise_token_auth/controllers/url_helpers.rb +2 -0
  47. data/lib/devise_token_auth/engine.rb +26 -14
  48. data/lib/devise_token_auth/errors.rb +8 -0
  49. data/lib/devise_token_auth/rails/routes.rb +37 -30
  50. data/lib/devise_token_auth/token_factory.rb +126 -0
  51. data/lib/devise_token_auth/url.rb +11 -4
  52. data/lib/devise_token_auth/version.rb +3 -1
  53. data/lib/devise_token_auth.rb +11 -5
  54. data/lib/generators/devise_token_auth/USAGE +2 -2
  55. data/lib/generators/devise_token_auth/install_generator.rb +36 -105
  56. data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
  57. data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
  58. data/lib/generators/devise_token_auth/install_views_generator.rb +7 -5
  59. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +12 -0
  60. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +8 -14
  61. data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
  62. data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
  63. data/lib/tasks/devise_token_auth_tasks.rake +2 -0
  64. data/test/controllers/custom/custom_confirmations_controller_test.rb +5 -1
  65. data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +4 -0
  66. data/test/controllers/custom/custom_passwords_controller_test.rb +6 -2
  67. data/test/controllers/custom/custom_registrations_controller_test.rb +17 -8
  68. data/test/controllers/custom/custom_sessions_controller_test.rb +7 -5
  69. data/test/controllers/custom/custom_token_validations_controller_test.rb +5 -3
  70. data/test/controllers/demo_group_controller_test.rb +4 -6
  71. data/test/controllers/demo_mang_controller_test.rb +3 -3
  72. data/test/controllers/demo_user_controller_test.rb +53 -25
  73. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +159 -25
  74. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +117 -47
  75. data/test/controllers/devise_token_auth/passwords_controller_test.rb +309 -126
  76. data/test/controllers/devise_token_auth/registrations_controller_test.rb +65 -23
  77. data/test/controllers/devise_token_auth/sessions_controller_test.rb +93 -61
  78. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +18 -6
  79. data/test/controllers/devise_token_auth/unlocks_controller_test.rb +24 -5
  80. data/test/controllers/overrides/confirmations_controller_test.rb +6 -2
  81. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +5 -1
  82. data/test/controllers/overrides/passwords_controller_test.rb +27 -29
  83. data/test/controllers/overrides/registrations_controller_test.rb +33 -27
  84. data/test/controllers/overrides/sessions_controller_test.rb +6 -4
  85. data/test/controllers/overrides/token_validations_controller_test.rb +5 -3
  86. data/test/dummy/app/active_record/confirmable_user.rb +11 -0
  87. data/test/dummy/app/{models → active_record}/lockable_user.rb +2 -0
  88. data/test/dummy/app/{models → active_record}/mang.rb +2 -0
  89. data/test/dummy/app/{models → active_record}/only_email_user.rb +2 -0
  90. data/test/dummy/app/{models → active_record}/scoped_user.rb +4 -2
  91. data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +3 -2
  92. data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
  93. data/test/dummy/app/active_record/user.rb +6 -0
  94. data/test/dummy/app/controllers/application_controller.rb +2 -0
  95. data/test/dummy/app/controllers/auth_origin_controller.rb +2 -0
  96. data/test/dummy/app/controllers/custom/confirmations_controller.rb +2 -2
  97. data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +2 -0
  98. data/test/dummy/app/controllers/custom/passwords_controller.rb +3 -4
  99. data/test/dummy/app/controllers/custom/registrations_controller.rb +3 -3
  100. data/test/dummy/app/controllers/custom/sessions_controller.rb +3 -3
  101. data/test/dummy/app/controllers/custom/token_validations_controller.rb +3 -3
  102. data/test/dummy/app/controllers/demo_group_controller.rb +2 -0
  103. data/test/dummy/app/controllers/demo_mang_controller.rb +2 -0
  104. data/test/dummy/app/controllers/demo_user_controller.rb +2 -0
  105. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +8 -6
  106. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +5 -3
  107. data/test/dummy/app/controllers/overrides/passwords_controller.rb +10 -8
  108. data/test/dummy/app/controllers/overrides/registrations_controller.rb +5 -3
  109. data/test/dummy/app/controllers/overrides/sessions_controller.rb +12 -12
  110. data/test/dummy/app/controllers/overrides/token_validations_controller.rb +5 -5
  111. data/test/dummy/app/helpers/application_helper.rb +1029 -1036
  112. data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +8 -7
  113. data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
  114. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  115. data/test/dummy/app/mongoid/mang.rb +46 -0
  116. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  117. data/test/dummy/app/mongoid/scoped_user.rb +50 -0
  118. data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
  119. data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
  120. data/test/dummy/app/mongoid/user.rb +49 -0
  121. data/test/dummy/app/views/layouts/application.html.erb +0 -2
  122. data/test/dummy/config/application.rb +26 -3
  123. data/test/dummy/config/boot.rb +8 -2
  124. data/test/dummy/config/environment.rb +3 -1
  125. data/test/dummy/config/environments/development.rb +5 -13
  126. data/test/dummy/config/environments/production.rb +2 -16
  127. data/test/dummy/config/environments/test.rb +3 -1
  128. data/test/dummy/config/initializers/backtrace_silencers.rb +2 -0
  129. data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
  130. data/test/dummy/config/initializers/devise.rb +287 -0
  131. data/test/dummy/config/initializers/devise_token_auth.rb +37 -4
  132. data/test/dummy/config/initializers/figaro.rb +3 -1
  133. data/test/dummy/config/initializers/filter_parameter_logging.rb +2 -0
  134. data/test/dummy/config/initializers/inflections.rb +2 -0
  135. data/test/dummy/config/initializers/mime_types.rb +2 -0
  136. data/test/dummy/config/initializers/omniauth.rb +5 -2
  137. data/test/dummy/config/initializers/session_store.rb +2 -0
  138. data/test/dummy/config/initializers/wrap_parameters.rb +2 -0
  139. data/test/dummy/config/routes.rb +14 -29
  140. data/test/dummy/config/spring.rb +2 -0
  141. data/test/dummy/config.ru +5 -3
  142. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +9 -14
  143. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +8 -13
  144. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +2 -0
  145. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +2 -0
  146. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +6 -11
  147. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +8 -13
  148. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +8 -13
  149. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +8 -13
  150. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +8 -13
  151. data/test/dummy/{tmp/generators/db/migrate/20171014052631_devise_token_auth_create_users.rb → db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb} +8 -14
  152. data/test/dummy/db/schema.rb +11 -71
  153. data/test/dummy/lib/migration_database_helper.rb +15 -1
  154. data/test/dummy/tmp/generators/app/controllers/application_controller.rb +6 -0
  155. data/test/dummy/tmp/generators/app/models/azpire/v1/human_resource/user.rb +56 -0
  156. data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +12 -0
  157. data/test/factories/users.rb +41 -0
  158. data/test/lib/devise_token_auth/blacklist_test.rb +19 -0
  159. data/test/lib/devise_token_auth/rails/custom_routes_test.rb +29 -0
  160. data/test/lib/devise_token_auth/rails/routes_test.rb +87 -0
  161. data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
  162. data/test/lib/devise_token_auth/url_test.rb +9 -7
  163. data/test/lib/generators/devise_token_auth/install_generator_test.rb +67 -37
  164. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
  165. data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +3 -1
  166. data/test/models/concerns/mongoid_support_test.rb +31 -0
  167. data/test/models/concerns/tokens_serialization_test.rb +104 -0
  168. data/test/models/confirmable_user_test.rb +35 -0
  169. data/test/models/only_email_user_test.rb +2 -8
  170. data/test/models/user_test.rb +18 -79
  171. data/test/support/controllers/routes.rb +43 -0
  172. data/test/test_helper.rb +83 -26
  173. metadata +153 -44
  174. data/config/initializers/devise.rb +0 -196
  175. data/lib/generators/devise_token_auth/templates/user.rb +0 -7
  176. data/test/dummy/app/models/evil_user.rb +0 -3
  177. data/test/dummy/app/models/nice_user.rb +0 -7
  178. data/test/dummy/app/models/unregisterable_user.rb +0 -7
  179. data/test/dummy/config/initializers/assets.rb +0 -8
  180. data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +0 -64
  181. data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +0 -61
  182. data/test/dummy/tmp/generators/app/models/user.rb +0 -11
  183. data/test/integration/navigation_test.rb +0 -10
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -8,6 +10,17 @@ require 'test_helper'
8
10
 
9
11
  class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::IntegrationTest
10
12
  describe DeviseTokenAuth::RegistrationsController do
13
+
14
+ def mock_registration_params
15
+ {
16
+ email: Faker::Internet.email,
17
+ password: 'secret123',
18
+ password_confirmation: 'secret123',
19
+ confirm_success_url: Faker::Internet.url,
20
+ unpermitted_param: '(x_x)'
21
+ }
22
+ end
23
+
11
24
  describe 'Validate non-empty body' do
12
25
  before do
13
26
  # need to post empty data
@@ -39,13 +52,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
39
52
  @mails_sent = ActionMailer::Base.deliveries.count
40
53
 
41
54
  post '/auth',
42
- params: {
43
- email: Faker::Internet.email,
44
- password: 'secret123',
45
- password_confirmation: 'secret123',
46
- confirm_success_url: Faker::Internet.url,
47
- unpermitted_param: '(x_x)'
48
- }
55
+ params: mock_registration_params
49
56
 
50
57
  @resource = assigns(:resource)
51
58
  @data = JSON.parse(response.body)
@@ -81,6 +88,41 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
81
88
  end
82
89
  end
83
90
 
91
+ describe 'using allow_unconfirmed_access_for' do
92
+ before do
93
+ @original_duration = Devise.allow_unconfirmed_access_for
94
+ Devise.allow_unconfirmed_access_for = nil
95
+ end
96
+
97
+ test 'auth headers were returned in response' do
98
+ post '/auth', params: mock_registration_params
99
+ assert response.headers['access-token']
100
+ assert response.headers['token-type']
101
+ assert response.headers['client']
102
+ assert response.headers['expiry']
103
+ assert response.headers['uid']
104
+ end
105
+
106
+ describe 'using auth cookie' do
107
+ before do
108
+ DeviseTokenAuth.cookie_enabled = true
109
+ end
110
+
111
+ test 'auth cookie was returned in response' do
112
+ post '/auth', params: mock_registration_params
113
+ assert response.cookies[DeviseTokenAuth.cookie_name]
114
+ end
115
+
116
+ after do
117
+ DeviseTokenAuth.cookie_enabled = false
118
+ end
119
+ end
120
+
121
+ after do
122
+ Devise.allow_unconfirmed_access_for = @original_duration
123
+ end
124
+ end
125
+
84
126
  describe 'using "+" in email' do
85
127
  test 'can use + sign in email addresses' do
86
128
  @plus_email = 'ak+testing@gmail.com'
@@ -177,7 +219,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
177
219
  @resource = assigns(:resource)
178
220
  @data = JSON.parse(response.body)
179
221
  @mail = ActionMailer::Base.deliveries.last
180
- @sent_redirect_url = URI.decode(@mail.body.match(/redirect_url=([^&]*)(&|\")/)[1])
222
+ @sent_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)(&|\")/)[1])
181
223
  end
182
224
 
183
225
  teardown do
@@ -303,7 +345,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
303
345
  end
304
346
 
305
347
  test 'user should not have been created' do
306
- assert_nil @resource.id
348
+ refute @resource.persisted?
307
349
  end
308
350
 
309
351
  test 'error should be returned in the response' do
@@ -331,7 +373,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
331
373
  end
332
374
 
333
375
  test 'user should not have been created' do
334
- assert_nil @resource.id
376
+ refute @resource.persisted?
335
377
  end
336
378
 
337
379
  test 'error should be returned in the response' do
@@ -360,7 +402,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
360
402
  end
361
403
 
362
404
  test 'user should have been created' do
363
- assert_nil @resource.id
405
+ refute @resource.persisted?
364
406
  end
365
407
 
366
408
  test 'error should be returned in the response' do
@@ -374,7 +416,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
374
416
 
375
417
  describe 'Existing users' do
376
418
  before do
377
- @existing_user = users(:confirmed_email_user)
419
+ @existing_user = create(:user, :confirmed)
378
420
 
379
421
  post '/auth',
380
422
  params: { email: @existing_user.email,
@@ -391,7 +433,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
391
433
  end
392
434
 
393
435
  test 'user should have been created' do
394
- assert_nil @resource.id
436
+ refute @resource.persisted?
395
437
  end
396
438
 
397
439
  test 'error should be returned in the response' do
@@ -402,7 +444,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
402
444
  describe 'Destroy user account' do
403
445
  describe 'success' do
404
446
  before do
405
- @existing_user = users(:confirmed_email_user)
447
+ @existing_user = create(:user, :confirmed)
406
448
  @auth_headers = @existing_user.create_new_auth_token
407
449
  @client_id = @auth_headers['client']
408
450
 
@@ -449,7 +491,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
449
491
  describe 'Update user account' do
450
492
  describe 'existing user' do
451
493
  before do
452
- @existing_user = users(:confirmed_email_user)
494
+ @existing_user = create(:user, :confirmed)
453
495
  @auth_headers = @existing_user.create_new_auth_token
454
496
  @client_id = @auth_headers['client']
455
497
 
@@ -463,7 +505,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
463
505
  # test valid update param
464
506
  @resource_class = User
465
507
  @new_operating_thetan = 1_000_000
466
- @email = 'AlternatingCase2@example.com'
508
+ @email = Faker::Internet.safe_email
467
509
  @request_params = {
468
510
  operating_thetan: @new_operating_thetan,
469
511
  email: @email
@@ -497,13 +539,13 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
497
539
  end
498
540
 
499
541
  test 'Supply current password' do
500
- @request_params[:current_password] = 'secret123'
501
- @request_params[:email] = 'new.email@example.com'
542
+ @request_params[:current_password] = @existing_user.password
543
+ @request_params[:email] = @existing_user.email
502
544
 
503
545
  put '/auth', params: @request_params, headers: @auth_headers
504
546
  @data = JSON.parse(response.body)
505
547
  @existing_user.reload
506
- assert_equal @existing_user.email, 'new.email@example.com'
548
+ assert_equal @existing_user.email, @request_params[:email]
507
549
  end
508
550
  end
509
551
 
@@ -570,7 +612,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
570
612
  # test valid update param
571
613
  @resource_class = User
572
614
  @new_operating_thetan = 1_000_000
573
- @email = 'AlternatingCase2@example.com'
615
+ @email = Faker::Internet.safe_email
574
616
  @request_params = {
575
617
  operating_thetan: @new_operating_thetan,
576
618
  email: @email
@@ -621,7 +663,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
621
663
  before do
622
664
  DeviseTokenAuth.check_current_password_before_update = :password
623
665
  @new_operating_thetan = 1_000_000
624
- @email = 'AlternatingCase2@example.com'
666
+ @email = Faker::Internet.safe_email
625
667
  end
626
668
 
627
669
  after do
@@ -666,7 +708,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
666
708
 
667
709
  describe 'invalid user' do
668
710
  before do
669
- @existing_user = users(:confirmed_email_user)
711
+ @existing_user = create(:user, :confirmed)
670
712
  @auth_headers = @existing_user.create_new_auth_token
671
713
  @client_id = @auth_headers['client']
672
714
 
@@ -703,7 +745,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
703
745
 
704
746
  describe 'Ouath user has existing email' do
705
747
  before do
706
- @existing_user = users(:duplicate_email_facebook_user)
748
+ @existing_user = create(:user, :facebook, :confirmed)
707
749
 
708
750
  post '/auth',
709
751
  params: { email: @existing_user.email,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -10,33 +12,20 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
10
12
  describe DeviseTokenAuth::SessionsController do
11
13
  describe 'Confirmed user' do
12
14
  before do
13
- @existing_user = users(:confirmed_email_user)
14
- @existing_user.skip_confirmation!
15
- @existing_user.save!
15
+ @existing_user = create(:user, :with_nickname, :confirmed)
16
16
  end
17
17
 
18
18
  describe 'success' do
19
19
  before do
20
- @old_sign_in_count = @existing_user.sign_in_count
21
- @old_current_sign_in_at = @existing_user.current_sign_in_at
22
- @old_last_sign_in_at = @existing_user.last_sign_in_at
23
- @old_sign_in_ip = @existing_user.current_sign_in_ip
24
- @old_last_sign_in_ip = @existing_user.last_sign_in_ip
20
+ @user_session_params = {
21
+ email: @existing_user.email,
22
+ password: @existing_user.password
23
+ }
25
24
 
26
- post :create,
27
- params: {
28
- email: @existing_user.email,
29
- password: 'secret123'
30
- }
25
+ post :create, params: @user_session_params
31
26
 
32
27
  @resource = assigns(:resource)
33
28
  @data = JSON.parse(response.body)
34
-
35
- @new_sign_in_count = @resource.sign_in_count
36
- @new_current_sign_in_at = @resource.current_sign_in_at
37
- @new_last_sign_in_at = @resource.last_sign_in_at
38
- @new_sign_in_ip = @resource.current_sign_in_ip
39
- @new_last_sign_in_ip = @resource.last_sign_in_ip
40
29
  end
41
30
 
42
31
  test 'request should succeed' do
@@ -47,29 +36,63 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
47
36
  assert_equal @existing_user.email, @data['data']['email']
48
37
  end
49
38
 
50
- describe 'trackable' do
51
- test 'sign_in_count incrementns' do
52
- assert_equal @old_sign_in_count + 1, @new_sign_in_count
39
+ describe 'using auth cookie' do
40
+ before do
41
+ DeviseTokenAuth.cookie_enabled = true
53
42
  end
54
43
 
55
- test 'current_sign_in_at is updated' do
56
- refute @old_current_sign_in_at
57
- assert @new_current_sign_in_at
44
+ test 'request should return auth cookie' do
45
+ post :create, params: @user_session_params
46
+ assert response.cookies[DeviseTokenAuth.cookie_name]
58
47
  end
59
48
 
60
- test 'last_sign_in_at is updated' do
61
- refute @old_last_sign_in_at
62
- assert @new_last_sign_in_at
49
+ after do
50
+ DeviseTokenAuth.cookie_enabled = false
63
51
  end
52
+ end
64
53
 
65
- test 'sign_in_ip is updated' do
66
- refute @old_sign_in_ip
67
- assert_equal '0.0.0.0', @new_sign_in_ip
54
+ describe "with multiple clients and headers don't change in each request" do
55
+ before do
56
+ # Set the max_number_of_devices to a lower number
57
+ # to expedite tests! (Default is 10)
58
+ DeviseTokenAuth.max_number_of_devices = 2
59
+ DeviseTokenAuth.change_headers_on_each_request = false
68
60
  end
69
61
 
70
- test 'last_sign_in_ip is updated' do
71
- refute @old_last_sign_in_ip
72
- assert_equal '0.0.0.0', @new_last_sign_in_ip
62
+ test 'should limit the maximum number of concurrent devices' do
63
+ # increment the number of devices until the maximum is exceeded
64
+ 1.upto(DeviseTokenAuth.max_number_of_devices + 1).each do |n|
65
+ initial_tokens = @existing_user.reload.tokens
66
+
67
+ assert_equal(
68
+ [n, DeviseTokenAuth.max_number_of_devices].min,
69
+ @existing_user.reload.tokens.length
70
+ )
71
+
72
+ # Already have the max number of devices
73
+ post :create, params: @user_session_params
74
+
75
+ # A session for a new device maintains the max number of concurrent devices
76
+ refute_equal initial_tokens, @existing_user.reload.tokens
77
+ end
78
+ end
79
+
80
+ test 'should drop old tokens when max number of devices is exceeded' do
81
+ 1.upto(DeviseTokenAuth.max_number_of_devices).each do |n|
82
+ post :create, params: @user_session_params
83
+ end
84
+
85
+ oldest_token, _ = @existing_user.reload.tokens \
86
+ .min_by { |cid, v| v[:expiry] || v['expiry'] }
87
+
88
+ post :create, params: @user_session_params
89
+
90
+ assert_not_includes @existing_user.reload.tokens.keys, oldest_token
91
+ end
92
+
93
+ after do
94
+ DeviseTokenAuth.max_number_of_devices = 10
95
+ DeviseTokenAuth.change_headers_on_each_request = true
73
96
  end
74
97
  end
75
98
  end
@@ -78,7 +101,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
78
101
  before do
79
102
  get :new,
80
103
  params: { nickname: @existing_user.nickname,
81
- password: 'secret123' }
104
+ password: @existing_user.password }
82
105
  @data = JSON.parse(response.body)
83
106
  end
84
107
 
@@ -95,7 +118,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
95
118
  before do
96
119
  request.headers.merge!(
97
120
  'email' => @existing_user.email,
98
- 'password' => 'secret123'
121
+ 'password' => @existing_user.password
99
122
  )
100
123
 
101
124
  head :create
@@ -111,7 +134,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
111
134
  before do
112
135
  post :create,
113
136
  params: { nickname: @existing_user.nickname,
114
- password: 'secret123' }
137
+ password: @existing_user.password }
115
138
  @data = JSON.parse(response.body)
116
139
  end
117
140
 
@@ -147,6 +170,24 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
147
170
  test 'session was destroyed' do
148
171
  assert_equal true, @controller.reset_session_called
149
172
  end
173
+
174
+ describe 'using auth cookie' do
175
+ before do
176
+ DeviseTokenAuth.cookie_enabled = true
177
+ @auth_token = @existing_user.create_new_auth_token
178
+ @controller.send(:cookies)[DeviseTokenAuth.cookie_name] = { value: @auth_token.to_json }
179
+ end
180
+
181
+ test 'auth cookie was destroyed' do
182
+ assert_equal @auth_token.to_json, @controller.send(:cookies)[DeviseTokenAuth.cookie_name] # sanity check
183
+ delete :destroy, format: :json
184
+ assert_nil @controller.send(:cookies)[DeviseTokenAuth.cookie_name]
185
+ end
186
+
187
+ after do
188
+ DeviseTokenAuth.cookie_enabled = false
189
+ end
190
+ end
150
191
  end
151
192
 
152
193
  describe 'unauthed user sign out' do
@@ -223,7 +264,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
223
264
  @resource_class = User
224
265
  @request_params = {
225
266
  email: @existing_user.email.upcase,
226
- password: 'secret123'
267
+ password: @existing_user.password
227
268
  }
228
269
  end
229
270
 
@@ -246,7 +287,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
246
287
  @request_params = {
247
288
  # adding whitespace before and after email
248
289
  email: " #{@existing_user.email} ",
249
- password: 'secret123'
290
+ password: @existing_user.password
250
291
  }
251
292
  end
252
293
 
@@ -266,9 +307,9 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
266
307
 
267
308
  describe 'Unconfirmed user' do
268
309
  before do
269
- @unconfirmed_user = users(:unconfirmed_email_user)
310
+ @unconfirmed_user = create(:user)
270
311
  post :create, params: { email: @unconfirmed_user.email,
271
- password: 'secret123' }
312
+ password: @unconfirmed_user.password }
272
313
  @resource = assigns(:resource)
273
314
  @data = JSON.parse(response.body)
274
315
  end
@@ -289,10 +330,10 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
289
330
  before do
290
331
  @original_duration = Devise.allow_unconfirmed_access_for
291
332
  Devise.allow_unconfirmed_access_for = 3.days
292
- @recent_unconfirmed_user = users(:recent_unconfirmed_email_user)
333
+ @recent_unconfirmed_user = create(:user)
293
334
  post :create,
294
335
  params: { email: @recent_unconfirmed_user.email,
295
- password: 'secret123' }
336
+ password: @recent_unconfirmed_user.password }
296
337
  @resource = assigns(:resource)
297
338
  @data = JSON.parse(response.body)
298
339
  end
@@ -312,20 +353,14 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
312
353
 
313
354
  describe 'Unconfirmed user with expired unconfirmed access' do
314
355
  before do
315
- @original_duration = Devise.allow_unconfirmed_access_for
316
- Devise.allow_unconfirmed_access_for = 3.days
317
- @unconfirmed_user = users(:unconfirmed_email_user)
356
+ @unconfirmed_user = create(:user, :unconfirmed)
318
357
  post :create,
319
358
  params: { email: @unconfirmed_user.email,
320
- password: 'secret123' }
359
+ password: @unconfirmed_user.password }
321
360
  @resource = assigns(:resource)
322
361
  @data = JSON.parse(response.body)
323
362
  end
324
363
 
325
- after do
326
- Devise.allow_unconfirmed_access_for = @original_duration
327
- end
328
-
329
364
  test 'request should fail' do
330
365
  assert_equal 401, response.status
331
366
  end
@@ -363,13 +398,11 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
363
398
  end
364
399
 
365
400
  before do
366
- @existing_user = mangs(:confirmed_email_user)
367
- @existing_user.skip_confirmation!
368
- @existing_user.save!
401
+ @existing_user = create(:mang_user, :confirmed)
369
402
 
370
403
  post :create,
371
404
  params: { email: @existing_user.email,
372
- password: 'secret123' }
405
+ password: @existing_user.password }
373
406
 
374
407
  @resource = assigns(:resource)
375
408
  @data = JSON.parse(response.body)
@@ -394,12 +427,11 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
394
427
  end
395
428
 
396
429
  before do
397
- @existing_user = only_email_users(:user)
398
- @existing_user.save!
430
+ @existing_user = create(:only_email_user)
399
431
 
400
432
  post :create,
401
433
  params: { email: @existing_user.email,
402
- password: 'secret123' }
434
+ password: @existing_user.password }
403
435
 
404
436
  @resource = assigns(:resource)
405
437
  @data = JSON.parse(response.body)
@@ -437,10 +469,10 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
437
469
 
438
470
  describe 'locked user' do
439
471
  before do
440
- @locked_user = lockable_users(:locked_user)
472
+ @locked_user = create(:lockable_user, :locked)
441
473
  post :create,
442
474
  params: { email: @locked_user.email,
443
- password: 'secret123' }
475
+ password: @locked_user.password }
444
476
  @data = JSON.parse(response.body)
445
477
  end
446
478
 
@@ -456,7 +488,7 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
456
488
 
457
489
  describe 'unlocked user with bad password' do
458
490
  before do
459
- @unlocked_user = lockable_users(:unlocked_user)
491
+ @unlocked_user = create(:lockable_user)
460
492
  post :create,
461
493
  params: { email: @unlocked_user.email,
462
494
  password: 'bad-password' }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -9,9 +11,7 @@ require 'test_helper'
9
11
  class DeviseTokenAuth::TokenValidationsControllerTest < ActionDispatch::IntegrationTest
10
12
  describe DeviseTokenAuth::TokenValidationsController do
11
13
  before do
12
- @resource = users(:confirmed_email_user)
13
- @resource.skip_confirmation!
14
- @resource.save!
14
+ @resource = create(:user, :confirmed)
15
15
 
16
16
  @auth_headers = @resource.create_new_auth_token
17
17
 
@@ -45,6 +45,20 @@ class DeviseTokenAuth::TokenValidationsControllerTest < ActionDispatch::Integrat
45
45
  end
46
46
  end
47
47
 
48
+ describe 'with invalid user' do
49
+ before do
50
+ @resource.update_column(:email, 'invalid') if DEVISE_TOKEN_AUTH_ORM == :active_record
51
+ @resource.set(email: 'invalid') if DEVISE_TOKEN_AUTH_ORM == :mongoid
52
+ end
53
+
54
+ test 'request should raise invalid model error' do
55
+ error = assert_raises DeviseTokenAuth::Errors::InvalidModel do
56
+ get '/auth/validate_token', params: {}, headers: @auth_headers
57
+ end
58
+ assert_equal(error.message, "Cannot set auth token in invalid model. Errors: [\"Email is not an email\"]")
59
+ end
60
+ end
61
+
48
62
  describe 'failure' do
49
63
  before do
50
64
  get '/api/v1/auth/validate_token',
@@ -66,9 +80,7 @@ class DeviseTokenAuth::TokenValidationsControllerTest < ActionDispatch::Integrat
66
80
 
67
81
  describe 'using namespaces with unused resource' do
68
82
  before do
69
- @resource = scoped_users(:confirmed_email_user)
70
- @resource.skip_confirmation!
71
- @resource.save!
83
+ @resource = create(:scoped_user, :confirmed)
72
84
 
73
85
  @auth_headers = @resource.create_new_auth_token
74
86
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -33,7 +35,7 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
33
35
 
34
36
  describe 'Unlocking user' do
35
37
  before do
36
- @resource = lockable_users(:unlocked_user)
38
+ @resource = create(:lockable_user)
37
39
  end
38
40
 
39
41
  describe 'request unlock without email' do
@@ -55,7 +57,7 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
55
57
  end
56
58
 
57
59
  describe 'request unlock' do
58
- describe 'unknown user should return 404' do
60
+ describe 'without paranoid mode' do
59
61
  before do
60
62
  post :create, params: { email: 'chester@cheet.ah' }
61
63
  @data = JSON.parse(response.body)
@@ -66,9 +68,26 @@ class DeviseTokenAuth::UnlocksControllerTest < ActionController::TestCase
66
68
 
67
69
  test 'errors should be returned' do
68
70
  assert @data['errors']
69
- assert_equal @data['errors'],
70
- [I18n.t('devise_token_auth.passwords.user_not_found',
71
- email: 'chester@cheet.ah')]
71
+ assert_equal @data['errors'], [I18n.t('devise_token_auth.unlocks.user_not_found',
72
+ email: 'chester@cheet.ah')]
73
+ end
74
+ end
75
+
76
+ describe 'with paranoid mode' do
77
+ before do
78
+ swap Devise, paranoid: true do
79
+ post :create, params: { email: 'chester@cheet.ah' }
80
+ @data = JSON.parse(response.body)
81
+ end
82
+ end
83
+
84
+ test 'unknown user should return 404' do
85
+ assert_equal 404, response.status
86
+ end
87
+
88
+ test 'errors should be returned' do
89
+ assert @data['errors']
90
+ assert_equal @data['errors'], [I18n.t('devise_token_auth.unlocks.sended_paranoid')]
72
91
  end
73
92
  end
74
93
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -7,10 +9,12 @@ require 'test_helper'
7
9
  # was the appropriate message delivered in the json payload?
8
10
 
9
11
  class Overrides::ConfirmationsControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
10
14
  describe Overrides::ConfirmationsController do
11
15
  before do
12
16
  @redirect_url = Faker::Internet.url
13
- @new_user = evil_users(:unconfirmed_email_user)
17
+ @new_user = create(:user)
14
18
 
15
19
  # generate + send email
16
20
  @new_user.send_confirmation_instructions(redirect_url: @redirect_url)
@@ -34,7 +38,7 @@ class Overrides::ConfirmationsControllerTest < ActionDispatch::IntegrationTest
34
38
  override_proof_str = '(^^,)'
35
39
 
36
40
  # ensure present in redirect URL
37
- override_proof_param = URI.unescape(response.headers['Location']
41
+ override_proof_param = CGI.unescape(response.headers['Location']
38
42
  .match(/override_proof=([^&]*)&/)[1])
39
43
 
40
44
  assert_equal override_proof_str, override_proof_param
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -7,8 +9,10 @@ require 'test_helper'
7
9
  # was the appropriate message delivered in the json payload?
8
10
 
9
11
  class Overrides::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
12
+ include OverridesControllersRoutes
13
+
10
14
  describe Overrides::OmniauthCallbacksController do
11
- setup do
15
+ before do
12
16
  OmniAuth.config.test_mode = true
13
17
  OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
14
18
  provider: 'facebook',