devise_jwt_auth 0.1.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 (179) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +99 -0
  4. data/Rakefile +42 -0
  5. data/app/controllers/devise_jwt_auth/application_controller.rb +80 -0
  6. data/app/controllers/devise_jwt_auth/concerns/resource_finder.rb +44 -0
  7. data/app/controllers/devise_jwt_auth/concerns/set_user_by_jwt_token.rb +111 -0
  8. data/app/controllers/devise_jwt_auth/confirmations_controller.rb +88 -0
  9. data/app/controllers/devise_jwt_auth/omniauth_callbacks_controller.rb +291 -0
  10. data/app/controllers/devise_jwt_auth/passwords_controller.rb +217 -0
  11. data/app/controllers/devise_jwt_auth/refresh_token_controller.rb +41 -0
  12. data/app/controllers/devise_jwt_auth/registrations_controller.rb +203 -0
  13. data/app/controllers/devise_jwt_auth/sessions_controller.rb +131 -0
  14. data/app/controllers/devise_jwt_auth/unlocks_controller.rb +99 -0
  15. data/app/models/devise_jwt_auth/concerns/active_record_support.rb +16 -0
  16. data/app/models/devise_jwt_auth/concerns/confirmable_support.rb +27 -0
  17. data/app/models/devise_jwt_auth/concerns/mongoid_support.rb +19 -0
  18. data/app/models/devise_jwt_auth/concerns/tokens_serialization.rb +19 -0
  19. data/app/models/devise_jwt_auth/concerns/user.rb +117 -0
  20. data/app/models/devise_jwt_auth/concerns/user_omniauth_callbacks.rb +28 -0
  21. data/app/validators/devise_jwt_auth_email_validator.rb +23 -0
  22. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  23. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  24. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  25. data/app/views/devise_jwt_auth/omniauth_external_window.html.erb +38 -0
  26. data/config/locales/da-DK.yml +52 -0
  27. data/config/locales/de.yml +51 -0
  28. data/config/locales/en.yml +57 -0
  29. data/config/locales/es.yml +51 -0
  30. data/config/locales/fr.yml +51 -0
  31. data/config/locales/he.yml +52 -0
  32. data/config/locales/it.yml +48 -0
  33. data/config/locales/ja.yml +48 -0
  34. data/config/locales/ko.yml +51 -0
  35. data/config/locales/nl.yml +32 -0
  36. data/config/locales/pl.yml +50 -0
  37. data/config/locales/pt-BR.yml +48 -0
  38. data/config/locales/pt.yml +50 -0
  39. data/config/locales/ro.yml +48 -0
  40. data/config/locales/ru.yml +52 -0
  41. data/config/locales/sq.yml +48 -0
  42. data/config/locales/sv.yml +52 -0
  43. data/config/locales/uk.yml +61 -0
  44. data/config/locales/vi.yml +52 -0
  45. data/config/locales/zh-CN.yml +48 -0
  46. data/config/locales/zh-HK.yml +50 -0
  47. data/config/locales/zh-TW.yml +50 -0
  48. data/lib/devise_jwt_auth.rb +14 -0
  49. data/lib/devise_jwt_auth/blacklist.rb +2 -0
  50. data/lib/devise_jwt_auth/controllers/helpers.rb +161 -0
  51. data/lib/devise_jwt_auth/controllers/url_helpers.rb +10 -0
  52. data/lib/devise_jwt_auth/engine.rb +96 -0
  53. data/lib/devise_jwt_auth/errors.rb +8 -0
  54. data/lib/devise_jwt_auth/rails/routes.rb +118 -0
  55. data/lib/devise_jwt_auth/token_factory.rb +51 -0
  56. data/lib/devise_jwt_auth/url.rb +44 -0
  57. data/lib/devise_jwt_auth/version.rb +5 -0
  58. data/lib/generators/devise_jwt_auth/USAGE +31 -0
  59. data/lib/generators/devise_jwt_auth/install_generator.rb +91 -0
  60. data/lib/generators/devise_jwt_auth/install_generator_helpers.rb +98 -0
  61. data/lib/generators/devise_jwt_auth/install_mongoid_generator.rb +46 -0
  62. data/lib/generators/devise_jwt_auth/install_views_generator.rb +18 -0
  63. data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth.rb +74 -0
  64. data/lib/generators/devise_jwt_auth/templates/devise_jwt_auth_create_users.rb.erb +51 -0
  65. data/lib/generators/devise_jwt_auth/templates/user.rb.erb +9 -0
  66. data/lib/generators/devise_jwt_auth/templates/user_mongoid.rb.erb +56 -0
  67. data/lib/tasks/devise_token_auth_tasks.rake +6 -0
  68. data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
  69. data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
  70. data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
  71. data/test/controllers/custom/custom_refresh_token_controller_test.rb +36 -0
  72. data/test/controllers/custom/custom_registrations_controller_test.rb +59 -0
  73. data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
  74. data/test/controllers/demo_group_controller_test.rb +150 -0
  75. data/test/controllers/demo_mang_controller_test.rb +286 -0
  76. data/test/controllers/demo_user_controller_test.rb +650 -0
  77. data/test/controllers/devise_jwt_auth/confirmations_controller_test.rb +194 -0
  78. data/test/controllers/devise_jwt_auth/omniauth_callbacks_controller_test.rb +462 -0
  79. data/test/controllers/devise_jwt_auth/passwords_controller_test.rb +881 -0
  80. data/test/controllers/devise_jwt_auth/refresh_token_controller_test.rb +84 -0
  81. data/test/controllers/devise_jwt_auth/registrations_controller_test.rb +944 -0
  82. data/test/controllers/devise_jwt_auth/sessions_controller_test.rb +510 -0
  83. data/test/controllers/devise_jwt_auth/unlocks_controller_test.rb +197 -0
  84. data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
  85. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
  86. data/test/controllers/overrides/passwords_controller_test.rb +65 -0
  87. data/test/controllers/overrides/refresh_token_controller_test.rb +37 -0
  88. data/test/controllers/overrides/registrations_controller_test.rb +47 -0
  89. data/test/controllers/overrides/sessions_controller_test.rb +35 -0
  90. data/test/dummy/README.rdoc +28 -0
  91. data/test/dummy/app/active_record/confirmable_user.rb +11 -0
  92. data/test/dummy/app/active_record/lockable_user.rb +7 -0
  93. data/test/dummy/app/active_record/mang.rb +5 -0
  94. data/test/dummy/app/active_record/only_email_user.rb +7 -0
  95. data/test/dummy/app/active_record/scoped_user.rb +9 -0
  96. data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
  97. data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
  98. data/test/dummy/app/active_record/user.rb +6 -0
  99. data/test/dummy/app/controllers/application_controller.rb +18 -0
  100. data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
  101. data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
  102. data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
  103. data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
  104. data/test/dummy/app/controllers/custom/refresh_token_controller.rb +20 -0
  105. data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
  106. data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
  107. data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
  108. data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
  109. data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
  110. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +37 -0
  111. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
  112. data/test/dummy/app/controllers/overrides/passwords_controller.rb +45 -0
  113. data/test/dummy/app/controllers/overrides/refresh_token_controller.rb +22 -0
  114. data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
  115. data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
  116. data/test/dummy/app/helpers/application_helper.rb +1058 -0
  117. data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
  118. data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
  119. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  120. data/test/dummy/app/mongoid/mang.rb +46 -0
  121. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  122. data/test/dummy/app/mongoid/scoped_user.rb +50 -0
  123. data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
  124. data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
  125. data/test/dummy/app/mongoid/user.rb +49 -0
  126. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  127. data/test/dummy/config.ru +18 -0
  128. data/test/dummy/config/application.rb +48 -0
  129. data/test/dummy/config/application.yml.bk +0 -0
  130. data/test/dummy/config/boot.rb +11 -0
  131. data/test/dummy/config/environment.rb +7 -0
  132. data/test/dummy/config/environments/development.rb +46 -0
  133. data/test/dummy/config/environments/production.rb +84 -0
  134. data/test/dummy/config/environments/test.rb +50 -0
  135. data/test/dummy/config/initializers/assets.rb +10 -0
  136. data/test/dummy/config/initializers/backtrace_silencers.rb +9 -0
  137. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  138. data/test/dummy/config/initializers/devise.rb +290 -0
  139. data/test/dummy/config/initializers/devise_jwt_auth.rb +55 -0
  140. data/test/dummy/config/initializers/figaro.rb +3 -0
  141. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  142. data/test/dummy/config/initializers/inflections.rb +18 -0
  143. data/test/dummy/config/initializers/mime_types.rb +6 -0
  144. data/test/dummy/config/initializers/omniauth.rb +11 -0
  145. data/test/dummy/config/initializers/session_store.rb +5 -0
  146. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  147. data/test/dummy/config/routes.rb +57 -0
  148. data/test/dummy/config/spring.rb +3 -0
  149. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +58 -0
  150. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +57 -0
  151. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
  152. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
  153. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +55 -0
  154. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +56 -0
  155. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +56 -0
  156. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +56 -0
  157. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +56 -0
  158. data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
  159. data/test/dummy/db/schema.rb +198 -0
  160. data/test/dummy/lib/migration_database_helper.rb +43 -0
  161. data/test/dummy/tmp/generators/app/models/user.rb +9 -0
  162. data/test/dummy/tmp/generators/config/initializers/devise_jwt_auth.rb +74 -0
  163. data/test/dummy/tmp/generators/config/routes.rb +4 -0
  164. data/test/dummy/tmp/generators/db/migrate/20200206224309_devise_jwt_auth_create_users.rb +51 -0
  165. data/test/factories/users.rb +41 -0
  166. data/test/lib/devise_jwt_auth/blacklist_test.rb +11 -0
  167. data/test/lib/devise_jwt_auth/token_factory_test.rb +115 -0
  168. data/test/lib/devise_jwt_auth/url_test.rb +26 -0
  169. data/test/lib/generators/devise_jwt_auth/install_generator_test.rb +219 -0
  170. data/test/lib/generators/devise_jwt_auth/install_generator_with_namespace_test.rb +224 -0
  171. data/test/lib/generators/devise_jwt_auth/install_views_generator_test.rb +25 -0
  172. data/test/models/concerns/mongoid_support_test.rb +31 -0
  173. data/test/models/concerns/tokens_serialization_test.rb +72 -0
  174. data/test/models/confirmable_user_test.rb +35 -0
  175. data/test/models/only_email_user_test.rb +29 -0
  176. data/test/models/user_test.rb +110 -0
  177. data/test/support/controllers/routes.rb +43 -0
  178. data/test/test_helper.rb +91 -0
  179. metadata +503 -0
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class <%= user_class %> < ActiveRecord::Base
4
+ # Include default devise modules. Others available are:
5
+ # :confirmable, :lockable, :timeoutable and :omniauthable
6
+ devise :database_authenticatable, :registerable,
7
+ :recoverable, :rememberable, :trackable, :validatable
8
+ include DeviseJwtAuth::Concerns::User
9
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ class <%= user_class %>
4
+ include Mongoid::Document
5
+ include Mongoid::Timestamps
6
+ include Mongoid::Locker
7
+
8
+ field :locker_locked_at, type: Time
9
+ field :locker_locked_until, type: Time
10
+
11
+ locker locked_at_field: :locker_locked_at,
12
+ locked_until_field: :locker_locked_until
13
+
14
+ ## Database authenticatable
15
+ field :email, type: String, default: ''
16
+ field :encrypted_password, type: String, default: ''
17
+
18
+ ## Recoverable
19
+ field :reset_password_token, type: String
20
+ field :reset_password_sent_at, type: Time
21
+ field :reset_password_redirect_url, type: String
22
+ field :allow_password_change, type: Boolean, default: false
23
+
24
+ ## Rememberable
25
+ field :remember_created_at, type: Time
26
+
27
+ ## Confirmable
28
+ field :confirmation_token, type: String
29
+ field :confirmed_at, type: Time
30
+ field :confirmation_sent_at, type: Time
31
+ field :unconfirmed_email, type: String # Only if using reconfirmable
32
+
33
+ ## Lockable
34
+ # field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
35
+ # field :unlock_token, type: String # Only if unlock strategy is :email or :both
36
+ # field :locked_at, type: Time
37
+
38
+ ## Required
39
+ field :provider, type: String
40
+ field :uid, type: String, default: ''
41
+
42
+ ## Tokens
43
+ field :tokens, type: Hash, default: {}
44
+
45
+ # Include default devise modules. Others available are:
46
+ # :confirmable, :lockable, :timeoutable and :omniauthable
47
+ devise :database_authenticatable, :registerable,
48
+ :recoverable, :rememberable, :trackable, :validatable
49
+ include DeviseJwtAuth::Concerns::User
50
+
51
+ index({ email: 1 }, { name: 'email_index', unique: true, background: true })
52
+ index({ reset_password_token: 1 }, { name: 'reset_password_token_index', unique: true, sparse: true, background: true })
53
+ index({ confirmation_token: 1 }, { name: 'confirmation_token_index', unique: true, sparse: true, background: true })
54
+ index({ uid: 1, provider: 1}, { name: 'uid_provider_index', unique: true, background: true })
55
+ # index({ unlock_token: 1 }, { name: 'unlock_token_index', unique: true, sparse: true, background: true })
56
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :devise_jwt_auth do
5
+ # # Task goes here
6
+ # end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::ConfirmationsControllerTest < ActionController::TestCase
6
+ describe Custom::ConfirmationsController do
7
+ include CustomControllersRoutes
8
+
9
+ before do
10
+ @redirect_url = Faker::Internet.url
11
+ @new_user = create(:user)
12
+ @new_user.send_confirmation_instructions(redirect_url: @redirect_url)
13
+ @mail = ActionMailer::Base.deliveries.last
14
+ @token = @mail.body.match(/confirmation_token=([^&]*)&/)[1]
15
+ @client_config = @mail.body.match(/config=([^&]*)&/)[1]
16
+
17
+ get :show,
18
+ params: { confirmation_token: @token, redirect_url: @redirect_url }
19
+ end
20
+
21
+ test 'yield resource to block on show success' do
22
+ assert @controller.show_block_called?, 'show failed to yield resource to provided block'
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
6
+ describe Custom::OmniauthCallbacksController do
7
+ include CustomControllersRoutes
8
+
9
+ setup do
10
+ OmniAuth.config.test_mode = true
11
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
12
+ provider: 'facebook',
13
+ uid: '123545',
14
+ info: {
15
+ name: 'swong',
16
+ email: 'swongsong@yandex.ru'
17
+ }
18
+ )
19
+ end
20
+
21
+ test 'yield resource to block on omniauth_success success' do
22
+ @redirect_url = 'http://ng-token-auth.dev/'
23
+ get '/nice_user_auth/facebook',
24
+ params: { auth_origin_url: @redirect_url,
25
+ omniauth_window_type: 'newWindow' }
26
+
27
+ follow_all_redirects!
28
+
29
+ assert @controller.omniauth_success_block_called?,
30
+ 'omniauth_success failed to yield resource to provided block'
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::PasswordsControllerTest < ActionController::TestCase
6
+ describe Custom::PasswordsController do
7
+ include CustomControllersRoutes
8
+
9
+ before do
10
+ @resource = create(:user, :confirmed)
11
+ @redirect_url = 'http://ng-token-auth.dev'
12
+ end
13
+
14
+ test 'yield resource to block on create success' do
15
+ post :create,
16
+ params: { email: @resource.email,
17
+ redirect_url: @redirect_url }
18
+
19
+ @mail = ActionMailer::Base.deliveries.last
20
+ @resource.reload
21
+
22
+ @mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
23
+ @mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
24
+ @mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
25
+
26
+ assert @controller.create_block_called?,
27
+ 'create failed to yield resource to provided block'
28
+ end
29
+
30
+ test 'yield resource to block on edit success' do
31
+ @resource = create(:user)
32
+ @redirect_url = 'http://ng-token-auth.dev'
33
+
34
+ post :create,
35
+ params: { email: @resource.email,
36
+ redirect_url: @redirect_url },
37
+ xhr: true
38
+
39
+ @mail = ActionMailer::Base.deliveries.last
40
+ @resource.reload
41
+
42
+ @mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
43
+ @mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
44
+ @mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
45
+
46
+ get :edit,
47
+ params: { reset_password_token: @mail_reset_token,
48
+ redirect_url: @mail_redirect_url },
49
+ xhr: true
50
+ @resource.reload
51
+ assert @controller.edit_block_called?,
52
+ 'edit failed to yield resource to provided block'
53
+ end
54
+
55
+ test 'yield resource to block on update success' do
56
+ @auth_headers = @resource.create_named_token_pair
57
+ request.headers.merge!(@auth_headers)
58
+ @new_password = Faker::Internet.password
59
+ put :update,
60
+ params: { password: @new_password,
61
+ password_confirmation: @new_password }
62
+ assert @controller.update_block_called?, 'update failed to yield resource to provided block'
63
+ end
64
+
65
+ test 'yield resource to block on update success with custom json' do
66
+ @auth_headers = @resource.create_named_token_pair
67
+ request.headers.merge!(@auth_headers)
68
+ @new_password = Faker::Internet.password
69
+ put :update,
70
+ params: { password: @new_password,
71
+ password_confirmation: @new_password }
72
+
73
+ @data = JSON.parse(response.body)
74
+
75
+ assert @controller.update_block_called?, 'update failed to yield resource to provided block'
76
+ assert_equal @data['custom'], 'foo'
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::RefreshTokenControllerTest < ActionDispatch::IntegrationTest
6
+ describe Custom::RefreshTokenController do
7
+ include CustomControllersRoutes
8
+
9
+ before do
10
+ @resource = create(:user, :confirmed)
11
+ @auth_headers = get_cookie_header(DeviseJwtAuth.refresh_token_name,
12
+ @resource.create_refresh_token
13
+ )
14
+ end
15
+
16
+ test 'yield resource to block on refresh_token success' do
17
+ get '/nice_user_auth/refresh_token',
18
+ params: {},
19
+ headers: @auth_headers
20
+ assert @controller.refresh_token_block_called?,
21
+ 'refresh_token failed to yield resource to provided block'
22
+ end
23
+
24
+ test 'yield resource to block on refresh_token success with custom json' do
25
+ get '/nice_user_auth/refresh_token',
26
+ params: {},
27
+ headers: @auth_headers
28
+
29
+ @data = JSON.parse(response.body)
30
+
31
+ assert @controller.refresh_token_block_called?,
32
+ 'refresh_token failed to yield resource to provided block'
33
+ assert_equal @data['custom'], 'foo'
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
6
+ describe Custom::RegistrationsController do
7
+ include CustomControllersRoutes
8
+
9
+ before do
10
+ @create_params = attributes_for(:user,
11
+ confirm_success_url: Faker::Internet.url,
12
+ unpermitted_param: '(x_x)')
13
+
14
+ @existing_user = create(:user, :confirmed)
15
+ @auth_headers = @existing_user.create_named_token_pair
16
+ end
17
+
18
+ test 'yield resource to block on create success' do
19
+ post '/nice_user_auth', params: @create_params
20
+ assert @controller.create_block_called?,
21
+ 'create failed to yield resource to provided block'
22
+ end
23
+
24
+ test 'yield resource to block on create success with custom json' do
25
+ post '/nice_user_auth', params: @create_params
26
+
27
+ @data = JSON.parse(response.body)
28
+
29
+ assert @controller.create_block_called?,
30
+ 'create failed to yield resource to provided block'
31
+ assert_equal @data['custom'], 'foo'
32
+ end
33
+
34
+ test 'yield resource to block on update success' do
35
+ put '/nice_user_auth',
36
+ params: {
37
+ nickname: "Ol' Sunshine-face"
38
+ },
39
+ headers: @auth_headers
40
+ assert @controller.update_block_called?,
41
+ 'update failed to yield resource to provided block'
42
+ end
43
+
44
+ test 'yield resource to block on destroy success' do
45
+ delete '/nice_user_auth', headers: @auth_headers
46
+ assert @controller.destroy_block_called?,
47
+ 'destroy failed to yield resource to provided block'
48
+ end
49
+
50
+ describe 'when overriding #build_resource' do
51
+ test 'it fails' do
52
+ Custom::RegistrationsController.any_instance.stubs(:build_resource).returns(nil)
53
+ assert_raises DeviseJwtAuth::Errors::NoResourceDefinedError do
54
+ post '/nice_user_auth', params: @create_params
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class Custom::SessionsControllerTest < ActionController::TestCase
6
+ describe Custom::SessionsController do
7
+ include CustomControllersRoutes
8
+
9
+ before do
10
+ @existing_user = create(:user, :confirmed)
11
+ end
12
+
13
+ test 'yield resource to block on create success' do
14
+ post :create,
15
+ params: {
16
+ email: @existing_user.email,
17
+ password: @existing_user.password
18
+ }
19
+ assert @controller.create_block_called?,
20
+ 'create failed to yield resource to provided block'
21
+ end
22
+
23
+ test 'yield resource to block on destroy success' do
24
+ @auth_headers = @existing_user.create_named_token_pair
25
+ request.headers.merge!(@auth_headers)
26
+ delete :destroy, format: :json
27
+ assert @controller.destroy_block_called?,
28
+ 'destroy failed to yield resource to provided block'
29
+ end
30
+
31
+ test 'render method override' do
32
+ post :create,
33
+ params: { email: @existing_user.email,
34
+ password: @existing_user.password }
35
+ @data = JSON.parse(response.body)
36
+ assert_equal @data['custom'], 'foo'
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ # was the web request successful?
6
+ # was the user redirected to the right page?
7
+ # was the user successfully authenticated?
8
+ # was the correct object stored in the response?
9
+ # was the appropriate message delivered in the json payload?
10
+
11
+ class DemoGroupControllerTest < ActionDispatch::IntegrationTest
12
+ describe DemoGroupController do
13
+ describe 'Token access' do
14
+ before do
15
+ # user
16
+ @resource = create(:user, :confirmed)
17
+ @resource_auth_headers = @resource.create_named_token_pair
18
+
19
+ # @resource_token = @resource_auth_headers['access-token']
20
+ # @resource_client_id = @resource_auth_headers['client']
21
+ # @resource_expiry = @resource_auth_headers['expiry']
22
+
23
+ # mang
24
+ @mang = create(:mang_user, :confirmed)
25
+
26
+ @mang_auth_headers = @mang.create_named_token_pair
27
+
28
+ # @mang_token = @mang_auth_headers['access-token']
29
+ # @mang_client_id = @mang_auth_headers['client']
30
+ # @mang_expiry = @mang_auth_headers['expiry']
31
+ end
32
+
33
+ describe 'user access' do
34
+ before do
35
+ # ensure that request is not treated as batch request
36
+ # age_token(@resource, @resource_client_id)
37
+
38
+ get '/demo/members_only_group',
39
+ params: {},
40
+ headers: @resource_auth_headers
41
+
42
+ @resp_token = response.headers['access-token']
43
+ @resp_client_id = response.headers['client']
44
+ @resp_expiry = response.headers['expiry']
45
+ @resp_uid = response.headers['uid']
46
+ end
47
+
48
+ test 'request is successful' do
49
+ assert_equal 200, response.status
50
+ end
51
+
52
+ describe 'devise mappings' do
53
+ it 'should define current_user' do
54
+ assert_equal @resource, @controller.current_user
55
+ end
56
+
57
+ it 'should define user_signed_in?' do
58
+ assert @controller.user_signed_in?
59
+ end
60
+
61
+ it 'should not define current_mang' do
62
+ refute_equal @resource, @controller.current_mang
63
+ end
64
+
65
+ it 'should define current_member' do
66
+ assert_equal @resource, @controller.current_member
67
+ end
68
+
69
+ it 'should define current_members' do
70
+ assert @controller.current_members.include? @resource
71
+ end
72
+
73
+ it 'should define member_signed_in?' do
74
+ assert @controller.current_members.include? @resource
75
+ end
76
+
77
+ it 'should define render_authenticate_error' do
78
+ assert @controller.methods.include?(:render_authenticate_error)
79
+ end
80
+ end
81
+ end
82
+
83
+ describe 'mang access' do
84
+ before do
85
+ # ensure that request is not treated as batch request
86
+ # age_token(@mang, @mang_client_id)
87
+
88
+ get '/demo/members_only_group',
89
+ params: {},
90
+ headers: @mang_auth_headers
91
+
92
+ @resp_token = response.headers['access-token']
93
+ @resp_client_id = response.headers['client']
94
+ @resp_expiry = response.headers['expiry']
95
+ @resp_uid = response.headers['uid']
96
+ end
97
+
98
+ test 'request is successful' do
99
+ assert_equal 200, response.status
100
+ end
101
+
102
+ describe 'devise mappings' do
103
+ it 'should define current_mang' do
104
+ assert_equal @mang, @controller.current_mang
105
+ end
106
+
107
+ it 'should define mang_signed_in?' do
108
+ assert @controller.mang_signed_in?
109
+ end
110
+
111
+ it 'should not define current_mang' do
112
+ refute_equal @mang, @controller.current_user
113
+ end
114
+
115
+ it 'should define current_member' do
116
+ assert_equal @mang, @controller.current_member
117
+ end
118
+
119
+ it 'should define current_members' do
120
+ assert @controller.current_members.include? @mang
121
+ end
122
+
123
+ it 'should define member_signed_in?' do
124
+ assert @controller.current_members.include? @mang
125
+ end
126
+
127
+ it 'should define render_authenticate_error' do
128
+ assert @controller.methods.include?(:render_authenticate_error)
129
+ end
130
+ end
131
+ end
132
+
133
+ describe 'failed access' do
134
+ before do
135
+ get '/demo/members_only_group',
136
+ params: {},
137
+ headers: @mang_auth_headers.merge('access-token' => 'bogus')
138
+ end
139
+
140
+ it 'should not return any auth headers' do
141
+ refute response.headers['access-token']
142
+ end
143
+
144
+ it 'should return error: unauthorized status' do
145
+ assert_equal 401, response.status
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end