graphql_devise 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +81 -0
- data/.github/ISSUE_TEMPLATE/enhancement.md +38 -0
- data/.github/ISSUE_TEMPLATE/question.md +16 -0
- data/CHANGELOG.md +13 -1
- data/README.md +15 -9
- data/app/graphql/graphql_devise/mutations/login.rb +1 -1
- data/app/graphql/graphql_devise/mutations/resend_confirmation.rb +32 -0
- data/app/views/graphql_devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/graphql_devise/mailer/reset_password_instructions.html.erb +3 -3
- data/config/locales/en.yml +13 -0
- data/lib/graphql_devise/rails/routes.rb +2 -1
- data/lib/graphql_devise/version.rb +1 -1
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/config/initializers/i18n.rb +3 -0
- data/spec/dummy/log/test.log +14356 -0
- data/spec/requests/mutations/resend_confirmation_spec.rb +83 -0
- metadata +10 -6
- data/spec/dummy/config/locales/devise.en.yml +0 -65
- data/spec/dummy/config/locales/en.yml +0 -33
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Resend confirmation' do
|
4
|
+
include_context 'with graphql query request'
|
5
|
+
|
6
|
+
let(:user) { create(:user, confirmed_at: nil) }
|
7
|
+
let(:email) { user.email }
|
8
|
+
let(:id) { user.id }
|
9
|
+
let(:redirect) { Faker::Internet.url }
|
10
|
+
let(:query) do
|
11
|
+
<<-GRAPHQL
|
12
|
+
mutation {
|
13
|
+
userResendConfirmation(
|
14
|
+
email:"#{email}",
|
15
|
+
redirectUrl:"#{redirect}"
|
16
|
+
) {
|
17
|
+
message
|
18
|
+
authenticable {
|
19
|
+
id
|
20
|
+
email
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
GRAPHQL
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when params are correct' do
|
28
|
+
it 'sends an email to the user with confirmation url and returns a success message' do
|
29
|
+
expect { post_request }.to change(ActionMailer::Base.deliveries, :count).by(1)
|
30
|
+
expect(json_response[:data][:userResendConfirmation]).to include(
|
31
|
+
authenticable: {
|
32
|
+
id: id,
|
33
|
+
email: email
|
34
|
+
},
|
35
|
+
message: "You will receive an email with instructions for how to confirm your email address in a few minutes."
|
36
|
+
)
|
37
|
+
|
38
|
+
email = Nokogiri::HTML(ActionMailer::Base.deliveries.last.body.encoded)
|
39
|
+
link = email.css('a').first
|
40
|
+
confirm_link_msg_text = email.css('p')[1].inner_html
|
41
|
+
confirm_account_link_text = link.inner_html
|
42
|
+
|
43
|
+
expect(confirm_link_msg_text).to eq("You can confirm your account email through the link below:")
|
44
|
+
expect(confirm_account_link_text).to eq("Confirm my account")
|
45
|
+
|
46
|
+
# TODO: Move to feature spec
|
47
|
+
expect do
|
48
|
+
get link['href']
|
49
|
+
user.reload
|
50
|
+
end.to change(user, :confirmed_at).from(NilClass).to(ActiveSupport::TimeWithZone)
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when the user has already been confirmed' do
|
54
|
+
before { user.confirm }
|
55
|
+
|
56
|
+
it 'does *NOT* send an email and raises an error' do
|
57
|
+
expect { post_request }.to not_change(ActionMailer::Base.deliveries, :count)
|
58
|
+
expect(json_response[:data][:userResendConfirmation]).to be_nil
|
59
|
+
expect(json_response[:errors]).to contain_exactly(
|
60
|
+
hash_including(
|
61
|
+
message: "Email was already confirmed, please try signing in",
|
62
|
+
extensions: { code: 'USER_ERROR' }
|
63
|
+
)
|
64
|
+
)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when the email isn't in the system" do
|
70
|
+
let(:email) { 'nothere@gmail.com' }
|
71
|
+
|
72
|
+
it 'does *NOT* send an email and raises an error' do
|
73
|
+
expect { post_request }.to not_change(ActionMailer::Base.deliveries, :count)
|
74
|
+
expect(json_response[:data][:userResendConfirmation]).to be_nil
|
75
|
+
expect(json_response[:errors]).to contain_exactly(
|
76
|
+
hash_including(
|
77
|
+
message: "Unable to find user with email '#{email}'.",
|
78
|
+
extensions: { code: 'USER_ERROR' }
|
79
|
+
)
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_devise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Celi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-11-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: devise_token_auth
|
@@ -243,6 +243,9 @@ executables: []
|
|
243
243
|
extensions: []
|
244
244
|
extra_rdoc_files: []
|
245
245
|
files:
|
246
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
247
|
+
- ".github/ISSUE_TEMPLATE/enhancement.md"
|
248
|
+
- ".github/ISSUE_TEMPLATE/question.md"
|
246
249
|
- ".gitignore"
|
247
250
|
- ".rspec"
|
248
251
|
- ".rubocop.yml"
|
@@ -259,6 +262,7 @@ files:
|
|
259
262
|
- app/graphql/graphql_devise/mutations/base.rb
|
260
263
|
- app/graphql/graphql_devise/mutations/login.rb
|
261
264
|
- app/graphql/graphql_devise/mutations/logout.rb
|
265
|
+
- app/graphql/graphql_devise/mutations/resend_confirmation.rb
|
262
266
|
- app/graphql/graphql_devise/mutations/send_password_reset.rb
|
263
267
|
- app/graphql/graphql_devise/mutations/sign_up.rb
|
264
268
|
- app/graphql/graphql_devise/mutations/update_password.rb
|
@@ -343,11 +347,10 @@ files:
|
|
343
347
|
- spec/dummy/config/initializers/devise.rb
|
344
348
|
- spec/dummy/config/initializers/devise_token_auth.rb
|
345
349
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
350
|
+
- spec/dummy/config/initializers/i18n.rb
|
346
351
|
- spec/dummy/config/initializers/inflections.rb
|
347
352
|
- spec/dummy/config/initializers/mime_types.rb
|
348
353
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
349
|
-
- spec/dummy/config/locales/devise.en.yml
|
350
|
-
- spec/dummy/config/locales/en.yml
|
351
354
|
- spec/dummy/config/master.key
|
352
355
|
- spec/dummy/config/puma.rb
|
353
356
|
- spec/dummy/config/routes.rb
|
@@ -374,6 +377,7 @@ files:
|
|
374
377
|
- spec/rails_helper.rb
|
375
378
|
- spec/requests/mutations/login_spec.rb
|
376
379
|
- spec/requests/mutations/logout_spec.rb
|
380
|
+
- spec/requests/mutations/resend_confirmation_spec.rb
|
377
381
|
- spec/requests/mutations/send_password_reset_spec.rb
|
378
382
|
- spec/requests/mutations/sign_up_spec.rb
|
379
383
|
- spec/requests/mutations/update_password_spec.rb
|
@@ -442,8 +446,6 @@ test_files:
|
|
442
446
|
- spec/dummy/bin/rails
|
443
447
|
- spec/dummy/config/secrets.yml
|
444
448
|
- spec/dummy/config/routes.rb
|
445
|
-
- spec/dummy/config/locales/en.yml
|
446
|
-
- spec/dummy/config/locales/devise.en.yml
|
447
449
|
- spec/dummy/config/environments/production.rb
|
448
450
|
- spec/dummy/config/environments/development.rb
|
449
451
|
- spec/dummy/config/environments/test.rb
|
@@ -460,6 +462,7 @@ test_files:
|
|
460
462
|
- spec/dummy/config/initializers/mime_types.rb
|
461
463
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
462
464
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
465
|
+
- spec/dummy/config/initializers/i18n.rb
|
463
466
|
- spec/dummy/config/initializers/devise.rb
|
464
467
|
- spec/dummy/config/initializers/inflections.rb
|
465
468
|
- spec/dummy/config/initializers/cors.rb
|
@@ -486,6 +489,7 @@ test_files:
|
|
486
489
|
- spec/requests/mutations/send_password_reset_spec.rb
|
487
490
|
- spec/requests/mutations/update_password_spec.rb
|
488
491
|
- spec/requests/mutations/sign_up_spec.rb
|
492
|
+
- spec/requests/mutations/resend_confirmation_spec.rb
|
489
493
|
- spec/requests/queries/confirm_account_spec.rb
|
490
494
|
- spec/requests/queries/check_password_token_spec.rb
|
491
495
|
- spec/support/factory_bot.rb
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
|
2
|
-
|
3
|
-
en:
|
4
|
-
devise:
|
5
|
-
confirmations:
|
6
|
-
confirmed: "Your email address has been successfully confirmed."
|
7
|
-
send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
|
8
|
-
send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
|
9
|
-
failure:
|
10
|
-
already_authenticated: "You are already signed in."
|
11
|
-
inactive: "Your account is not activated yet."
|
12
|
-
invalid: "Invalid %{authentication_keys} or password."
|
13
|
-
locked: "Your account is locked."
|
14
|
-
last_attempt: "You have one more attempt before your account is locked."
|
15
|
-
not_found_in_database: "Invalid %{authentication_keys} or password."
|
16
|
-
timeout: "Your session expired. Please sign in again to continue."
|
17
|
-
unauthenticated: "You need to sign in or sign up before continuing."
|
18
|
-
unconfirmed: "You have to confirm your email address before continuing."
|
19
|
-
mailer:
|
20
|
-
confirmation_instructions:
|
21
|
-
subject: "Confirmation instructions"
|
22
|
-
reset_password_instructions:
|
23
|
-
subject: "Reset password instructions"
|
24
|
-
unlock_instructions:
|
25
|
-
subject: "Unlock instructions"
|
26
|
-
email_changed:
|
27
|
-
subject: "Email Changed"
|
28
|
-
password_change:
|
29
|
-
subject: "Password Changed"
|
30
|
-
omniauth_callbacks:
|
31
|
-
failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
|
32
|
-
success: "Successfully authenticated from %{kind} account."
|
33
|
-
passwords:
|
34
|
-
no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
|
35
|
-
send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
|
36
|
-
send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
|
37
|
-
updated: "Your password has been changed successfully. You are now signed in."
|
38
|
-
updated_not_active: "Your password has been changed successfully."
|
39
|
-
registrations:
|
40
|
-
destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
|
41
|
-
signed_up: "Welcome! You have signed up successfully."
|
42
|
-
signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
|
43
|
-
signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
|
44
|
-
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
|
45
|
-
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address."
|
46
|
-
updated: "Your account has been updated successfully."
|
47
|
-
updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again"
|
48
|
-
sessions:
|
49
|
-
signed_in: "Signed in successfully."
|
50
|
-
signed_out: "Signed out successfully."
|
51
|
-
already_signed_out: "Signed out successfully."
|
52
|
-
unlocks:
|
53
|
-
send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
|
54
|
-
send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
|
55
|
-
unlocked: "Your account has been unlocked successfully. Please sign in to continue."
|
56
|
-
errors:
|
57
|
-
messages:
|
58
|
-
already_confirmed: "was already confirmed, please try signing in"
|
59
|
-
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
|
60
|
-
expired: "has expired, please request a new one"
|
61
|
-
not_found: "not found"
|
62
|
-
not_locked: "was not locked"
|
63
|
-
not_saved:
|
64
|
-
one: "1 error prohibited this %{resource} from being saved:"
|
65
|
-
other: "%{count} errors prohibited this %{resource} from being saved:"
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# Files in the config/locales directory are used for internationalization
|
2
|
-
# and are automatically loaded by Rails. If you want to use locales other
|
3
|
-
# than English, add the necessary files in this directory.
|
4
|
-
#
|
5
|
-
# To use the locales, use `I18n.t`:
|
6
|
-
#
|
7
|
-
# I18n.t 'hello'
|
8
|
-
#
|
9
|
-
# In views, this is aliased to just `t`:
|
10
|
-
#
|
11
|
-
# <%= t('hello') %>
|
12
|
-
#
|
13
|
-
# To use a different locale, set it with `I18n.locale`:
|
14
|
-
#
|
15
|
-
# I18n.locale = :es
|
16
|
-
#
|
17
|
-
# This would use the information in config/locales/es.yml.
|
18
|
-
#
|
19
|
-
# The following keys must be escaped otherwise they will not be retrieved by
|
20
|
-
# the default I18n backend:
|
21
|
-
#
|
22
|
-
# true, false, on, off, yes, no
|
23
|
-
#
|
24
|
-
# Instead, surround them with single quotes.
|
25
|
-
#
|
26
|
-
# en:
|
27
|
-
# 'true': 'foo'
|
28
|
-
#
|
29
|
-
# To learn more, please read the Rails Internationalization guide
|
30
|
-
# available at http://guides.rubyonrails.org/i18n.html.
|
31
|
-
|
32
|
-
en:
|
33
|
-
hello_world: "Hello world"
|