graphql_devise 0.18.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +25 -2
  3. data/.gitignore +4 -0
  4. data/.rubocop.yml +9 -10
  5. data/Appraisals +72 -35
  6. data/CHANGELOG.md +63 -0
  7. data/README.md +71 -142
  8. data/app/controllers/graphql_devise/graphql_controller.rb +3 -3
  9. data/app/views/graphql_devise/mailer/confirmation_instructions.html.erb +1 -5
  10. data/config/routes.rb +0 -2
  11. data/graphql_devise.gemspec +8 -6
  12. data/lib/generators/graphql_devise/install_generator.rb +1 -1
  13. data/lib/graphql_devise/concerns/additional_controller_methods.rb +48 -0
  14. data/lib/graphql_devise/concerns/additional_model_methods.rb +17 -0
  15. data/lib/graphql_devise/concerns/authenticatable.rb +1 -1
  16. data/lib/graphql_devise/concerns/controller_methods.rb +79 -91
  17. data/lib/graphql_devise/concerns/field_authentication.rb +14 -0
  18. data/lib/graphql_devise/concerns/set_user_by_token.rb +1 -1
  19. data/lib/graphql_devise/default_operations.rb +16 -0
  20. data/lib/graphql_devise/engine.rb +0 -2
  21. data/lib/graphql_devise/model/with_email_updater.rb +5 -30
  22. data/lib/graphql_devise/mount_method/operation_preparer.rb +0 -7
  23. data/lib/graphql_devise/mount_method/operation_preparers/custom_operation_preparer.rb +1 -1
  24. data/lib/graphql_devise/mount_method/operation_preparers/default_operation_preparer.rb +1 -1
  25. data/lib/graphql_devise/mount_method/operation_sanitizer.rb +0 -12
  26. data/lib/graphql_devise/mount_method/option_sanitizer.rb +0 -2
  27. data/lib/graphql_devise/mount_method/option_sanitizers/array_checker.rb +2 -2
  28. data/lib/graphql_devise/mount_method/option_sanitizers/class_checker.rb +2 -2
  29. data/lib/graphql_devise/mount_method/option_sanitizers/hash_checker.rb +1 -1
  30. data/lib/graphql_devise/mount_method/option_sanitizers/string_checker.rb +1 -1
  31. data/lib/graphql_devise/mount_method/option_validators/provided_operations_validator.rb +0 -2
  32. data/lib/graphql_devise/mount_method/option_validators/skip_only_validator.rb +1 -1
  33. data/lib/graphql_devise/mount_method/option_validators/supported_operations_validator.rb +1 -1
  34. data/lib/graphql_devise/mount_method/options_validator.rb +0 -3
  35. data/lib/graphql_devise/mount_method/supported_options.rb +0 -5
  36. data/lib/graphql_devise/mutations/base.rb +1 -1
  37. data/lib/graphql_devise/mutations/confirm_registration_with_token.rb +2 -2
  38. data/lib/graphql_devise/mutations/login.rb +2 -2
  39. data/lib/graphql_devise/mutations/register.rb +2 -2
  40. data/lib/graphql_devise/mutations/update_password_with_token.rb +2 -2
  41. data/lib/graphql_devise/resolvers/base.rb +1 -1
  42. data/lib/graphql_devise/resource_loader.rb +71 -39
  43. data/lib/graphql_devise/route_mounter.rb +13 -0
  44. data/lib/graphql_devise/schema_plugin.rb +11 -40
  45. data/lib/graphql_devise/types/authenticatable_type.rb +1 -1
  46. data/lib/graphql_devise/types/base_field.rb +9 -0
  47. data/lib/graphql_devise/types/base_type.rb +8 -0
  48. data/lib/graphql_devise/types/credential_type.rb +1 -1
  49. data/lib/graphql_devise/types/mutation_type.rb +1 -0
  50. data/lib/graphql_devise/types/query_type.rb +1 -0
  51. data/lib/graphql_devise/version.rb +1 -1
  52. data/lib/graphql_devise.rb +21 -29
  53. data/spec/dummy/app/controllers/api/v1/graphql_controller.rb +2 -16
  54. data/spec/dummy/app/graphql/dummy_schema.rb +1 -5
  55. data/spec/dummy/app/graphql/interpreter_schema.rb +6 -2
  56. data/spec/dummy/app/graphql/mutations/base_mutation.rb +6 -0
  57. data/spec/dummy/app/graphql/mutations/update_user.rb +2 -4
  58. data/spec/dummy/app/graphql/types/admin_type.rb +1 -1
  59. data/spec/dummy/app/graphql/types/custom_admin_type.rb +1 -1
  60. data/spec/dummy/app/graphql/types/mutation_type.rb +3 -1
  61. data/spec/dummy/app/graphql/types/query_type.rb +3 -1
  62. data/spec/dummy/app/graphql/types/user_type.rb +1 -1
  63. data/spec/dummy/config/environments/test.rb +1 -1
  64. data/spec/dummy/config/routes.rb +5 -9
  65. data/spec/generators/graphql_devise/install_generator_spec.rb +2 -2
  66. data/spec/graphql_devise/model/with_email_updater_spec.rb +17 -35
  67. data/spec/rails_helper.rb +5 -5
  68. data/spec/requests/mutations/login_spec.rb +34 -0
  69. data/spec/requests/mutations/resend_confirmation_with_token_spec.rb +2 -3
  70. data/spec/requests/user_controller_spec.rb +1 -33
  71. data/spec/services/resource_loader_spec.rb +53 -3
  72. data/spec/spec_helper.rb +1 -1
  73. metadata +62 -55
  74. data/app/controllers/graphql_devise/concerns/additional_controller_methods.rb +0 -72
  75. data/app/controllers/graphql_devise/concerns/set_user_by_token.rb +0 -21
  76. data/app/helpers/graphql_devise/mailer_helper.rb +0 -37
  77. data/app/models/graphql_devise/concerns/additional_model_methods.rb +0 -21
  78. data/app/models/graphql_devise/concerns/model.rb +0 -25
  79. data/lib/graphql_devise/default_operations/mutations.rb +0 -32
  80. data/lib/graphql_devise/default_operations/resolvers.rb +0 -14
  81. data/lib/graphql_devise/mutations/resend_confirmation.rb +0 -45
  82. data/lib/graphql_devise/mutations/send_password_reset.rb +0 -38
  83. data/lib/graphql_devise/mutations/sign_up.rb +0 -61
  84. data/lib/graphql_devise/mutations/update_password.rb +0 -46
  85. data/lib/graphql_devise/rails/routes.rb +0 -15
  86. data/lib/graphql_devise/resolvers/check_password_token.rb +0 -43
  87. data/lib/graphql_devise/resolvers/confirm_account.rb +0 -42
  88. data/spec/dummy/app/graphql/mutations/sign_up.rb +0 -14
  89. data/spec/dummy/app/graphql/resolvers/confirm_admin_account.rb +0 -13
  90. data/spec/requests/mutations/resend_confirmation_spec.rb +0 -153
  91. data/spec/requests/mutations/send_password_reset_spec.rb +0 -103
  92. data/spec/requests/mutations/sign_up_spec.rb +0 -170
  93. data/spec/requests/mutations/update_password_spec.rb +0 -116
  94. data/spec/requests/queries/check_password_token_spec.rb +0 -149
  95. data/spec/requests/queries/confirm_account_spec.rb +0 -137
@@ -1,137 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe 'Account confirmation' do
6
- include_context 'with graphql query request'
7
-
8
- context 'when using the user model' do
9
- let(:user) { create(:user, confirmed_at: nil) }
10
- let(:redirect) { 'https://google.com' }
11
- let(:query) do
12
- <<-GRAPHQL
13
- {
14
- userConfirmAccount(
15
- confirmationToken: "#{token}"
16
- redirectUrl: "#{redirect}"
17
- ) {
18
- email
19
- name
20
- }
21
- }
22
- GRAPHQL
23
- end
24
-
25
- context 'when confirmation token is correct' do
26
- let(:token) { user.confirmation_token }
27
-
28
- before do
29
- user.send_confirmation_instructions(
30
- template_path: ['graphql_devise/mailer'],
31
- controller: 'graphql_devise/graphql',
32
- schema_url: 'http://not-using-this-value.com/gql'
33
- )
34
- end
35
-
36
- it 'confirms the resource and redirects to the sent url' do
37
- expect do
38
- get_request
39
- user.reload
40
- end.to(change(user, :confirmed_at).from(nil))
41
-
42
- expect(response).to redirect_to("#{redirect}?account_confirmation_success=true")
43
- expect(user).to be_active_for_authentication
44
- end
45
-
46
- context 'when redirect_url is not whitelisted' do
47
- let(:redirect) { 'https://not-safe.com' }
48
-
49
- it 'returns a not whitelisted redirect url error' do
50
- expect { post_request }.to not_change(ActionMailer::Base.deliveries, :count)
51
-
52
- expect(json_response[:errors]).to containing_exactly(
53
- hash_including(
54
- message: "Redirect to '#{redirect}' not allowed.",
55
- extensions: { code: 'USER_ERROR' }
56
- )
57
- )
58
- end
59
- end
60
-
61
- context 'when unconfirmed_email is present' do
62
- let(:user) { create(:user, :confirmed, unconfirmed_email: 'vvega@wallaceinc.com') }
63
-
64
- it 'confirms the unconfirmed email and redirects' do
65
- expect do
66
- get_request
67
- user.reload
68
- end.to change(user, :email).from(user.email).to('vvega@wallaceinc.com').and(
69
- change(user, :unconfirmed_email).from('vvega@wallaceinc.com').to(nil)
70
- )
71
-
72
- expect(response).to redirect_to("#{redirect}?account_confirmation_success=true")
73
- end
74
- end
75
- end
76
-
77
- context 'when reset password token is not found' do
78
- let(:token) { "#{user.confirmation_token}-invalid" }
79
-
80
- it 'does *NOT* confirm the user nor does the redirection' do
81
- expect do
82
- get_request
83
- user.reload
84
- end.not_to(change(user, :confirmed_at).from(nil))
85
-
86
- expect(response).not_to be_redirect
87
- expect(json_response[:errors]).to contain_exactly(
88
- hash_including(
89
- message: 'Invalid confirmation token. Please try again',
90
- extensions: { code: 'USER_ERROR' }
91
- )
92
- )
93
- end
94
- end
95
- end
96
-
97
- context 'when using the admin model' do
98
- let(:admin) { create(:admin, confirmed_at: nil) }
99
- let(:redirect) { 'https://google.com' }
100
- let(:query) do
101
- <<-GRAPHQL
102
- {
103
- adminConfirmAccount(
104
- confirmationToken: "#{token}"
105
- redirectUrl: "#{redirect}"
106
- ) {
107
- email
108
- }
109
- }
110
- GRAPHQL
111
- end
112
-
113
- context 'when confirmation token is correct' do
114
- let(:token) { admin.confirmation_token }
115
-
116
- before do
117
- admin.send_confirmation_instructions(
118
- template_path: ['graphql_devise/mailer'],
119
- controller: 'graphql_devise/graphql',
120
- schema_url: 'http://not-using-this-value.com/gql'
121
- )
122
- end
123
-
124
- it 'confirms the resource, persists credentials on the DB and redirects to the sent url' do
125
- expect do
126
- get_request
127
- admin.reload
128
- end.to change(admin, :confirmed_at).from(nil).and(
129
- change { admin.tokens.keys.count }.from(0).to(1)
130
- )
131
-
132
- expect(response).to redirect_to(/\A#{redirect}.+access\-token=/)
133
- expect(admin).to be_active_for_authentication
134
- end
135
- end
136
- end
137
- end