Skip to content

Commit 927858c

Browse files
author
David Revelo
committed
Add tests for model without mutations
1 parent 7240000 commit 927858c

13 files changed

Lines changed: 216 additions & 82 deletions

File tree

lib/graphql_devise/rails/routes.rb

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ def mount_graphql_devise_for(resource, opts = {})
2727
skipped: skipped_operations
2828
}
2929

30-
validate_gql_devise_operations!(param_operations)
30+
GraphqlDevise::OperationChecker.call(
31+
mutations: GraphqlDevise::MutationsPreparer::DEFAULT_MUTATIONS,
32+
queries: GraphqlDevise::QueriesPreparer::DEFAULT_QUERIES,
33+
**param_operations
34+
)
3135

3236
devise_for(
3337
resource.pluralize.underscore.tr('/', '_').to_sym,
@@ -65,15 +69,5 @@ def mount_graphql_devise_for(resource, opts = {})
6569
get path, to: 'graphql_devise/graphql#auth'
6670
end
6771
end
68-
69-
private
70-
71-
def validate_gql_devise_operations!(param_operations)
72-
GraphqlDevise::OperationChecker.call(
73-
mutations: GraphqlDevise::MutationsPreparer::DEFAULT_MUTATIONS,
74-
queries: GraphqlDevise::QueriesPreparer::DEFAULT_QUERIES,
75-
**param_operations
76-
)
77-
end
7872
end
7973
end

spec/dummy/app/models/invitee.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Invitee < ActiveRecord::Base
2+
devise :database_authenticatable, :registerable, :confirmable,
3+
:recoverable, :rememberable, :trackable, :validatable
4+
5+
include GraphqlDevise::Concerns::Model
6+
end

spec/dummy/config/routes.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,11 @@
2121
at: '/api/v1/guest/graphql_auth'
2222
)
2323

24+
mount_graphql_devise_for(
25+
'Invitee',
26+
only: [:confirm_account, :check_password_token],
27+
at: '/api/v1/invitee/graphql_auth'
28+
)
29+
2430
post '/api/v1/graphql', to: 'api/v1/graphql#graphql'
2531
end
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
class DeviseTokenAuthCreateInvitees < ActiveRecord::Migration[6.0]
2+
def change
3+
4+
create_table(:invitees) do |t|
5+
## Required
6+
t.string :provider, :null => false, :default => "email"
7+
t.string :uid, :null => false, :default => ""
8+
9+
## Database authenticatable
10+
t.string :encrypted_password, :null => false, :default => ""
11+
12+
## Recoverable
13+
t.string :reset_password_token
14+
t.datetime :reset_password_sent_at
15+
t.boolean :allow_password_change, :default => false
16+
17+
## Rememberable
18+
t.datetime :remember_created_at
19+
20+
## Confirmable
21+
t.string :confirmation_token
22+
t.datetime :confirmed_at
23+
t.datetime :confirmation_sent_at
24+
t.string :unconfirmed_email # Only if using reconfirmable
25+
26+
## Lockable
27+
# t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
28+
# t.string :unlock_token # Only if unlock strategy is :email or :both
29+
# t.datetime :locked_at
30+
31+
## User Info
32+
t.string :name
33+
t.string :nickname
34+
t.string :image
35+
t.string :email
36+
37+
## Tokens
38+
t.text :tokens
39+
40+
t.timestamps
41+
end
42+
43+
add_index :invitees, :email, unique: true
44+
add_index :invitees, [:uid, :provider], unique: true
45+
add_index :invitees, :reset_password_token, unique: true
46+
add_index :invitees, :confirmation_token, unique: true
47+
# add_index :invitees, :unlock_token, unique: true
48+
end
49+
end

spec/dummy/db/schema.rb

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema.define(version: 2019_10_13_213045) do
13+
ActiveRecord::Schema.define(version: 2020_03_15_133915) do
1414

1515
create_table "admins", force: :cascade do |t|
1616
t.string "provider", default: "email", null: false
@@ -54,6 +54,31 @@
5454
t.index ["uid", "provider"], name: "index_guests_on_uid_and_provider", unique: true
5555
end
5656

57+
create_table "invitees", force: :cascade do |t|
58+
t.string "provider", default: "email", null: false
59+
t.string "uid", default: "", null: false
60+
t.string "encrypted_password", default: "", null: false
61+
t.string "reset_password_token"
62+
t.datetime "reset_password_sent_at"
63+
t.boolean "allow_password_change", default: false
64+
t.datetime "remember_created_at"
65+
t.string "confirmation_token"
66+
t.datetime "confirmed_at"
67+
t.datetime "confirmation_sent_at"
68+
t.string "unconfirmed_email"
69+
t.string "name"
70+
t.string "nickname"
71+
t.string "image"
72+
t.string "email"
73+
t.text "tokens"
74+
t.datetime "created_at", precision: 6, null: false
75+
t.datetime "updated_at", precision: 6, null: false
76+
t.index ["confirmation_token"], name: "index_invitees_on_confirmation_token", unique: true
77+
t.index ["email"], name: "index_invitees_on_email", unique: true
78+
t.index ["reset_password_token"], name: "index_invitees_on_reset_password_token", unique: true
79+
t.index ["uid", "provider"], name: "index_invitees_on_uid_and_provider", unique: true
80+
end
81+
5782
create_table "users", force: :cascade do |t|
5883
t.string "provider", default: "email", null: false
5984
t.string "uid", default: "", null: false

spec/factories/invitee.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FactoryBot.define do
2+
factory :invitee do
3+
name { Faker::FunnyName.two_word_name }
4+
email { Faker::Internet.unique.email }
5+
password { Faker::Internet.password }
6+
7+
trait :confirmed do
8+
confirmed_at { Time.now }
9+
end
10+
11+
trait :locked do
12+
locked_at { Time.now }
13+
end
14+
15+
trait :auth_unavailable do
16+
auth_available { false }
17+
end
18+
end
19+
end

spec/mutations_preparer_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
end
1212

1313
let(:resource) { 'User' }
14-
let(:class_1) { Class.new(GraphQL::Schema::Mutation) }
15-
let(:class_2) { GraphQL::Schema::Mutation }
14+
let(:class1) { Class.new(GraphQL::Schema::Mutation) }
15+
let(:class2) { GraphQL::Schema::Mutation }
1616
let(:auth_type) { GraphqlDevise::Types::AuthenticatableType }
17-
let(:mutations) { { mutation_1: class_1, mutation_2: class_2 } }
17+
let(:mutations) { { mutation_1: class1, mutation_2: class2 } }
1818

1919
context 'when mutations is *NOT* empty' do
2020
it 'assign gql attibutes to mutations and changes keys using resource map' do

spec/operation_checker_spec.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
}
1515
end
1616

17-
let(:mutations) { { mutation_1: Class.new, mutation_2: Class.new } }
18-
let(:queries) { { query_1: Class.new, query_2: Class.new } }
17+
let(:mutations) { { mutation1: Class.new, mutation2: Class.new } }
18+
let(:queries) { { query1: Class.new, query2: Class.new } }
1919
let(:custom) { {} }
2020
let(:only) { [] }
2121
let(:skipped) { [] }
@@ -25,26 +25,26 @@
2525
end
2626

2727
context 'when custom mutations and queries passed are among the defaults' do
28-
let(:custom) { { mutation_1: Class.new, query_2: Class.new } }
28+
let(:custom) { { mutation1: Class.new, query2: Class.new } }
2929

3030
it { is_expected.not_to raise_error }
3131
end
3232

3333
context 'when only operations are among the defaults' do
34-
let(:only) { [:mutation_1, :query_2] }
34+
let(:only) { [:mutation1, :query2] }
3535

3636
it { is_expected.not_to raise_error }
3737
end
3838

3939
context 'when skipped operations are among the defaults' do
40-
let(:skipped) { [:mutation_2, :query_1] }
40+
let(:skipped) { [:mutation2, :query1] }
4141

4242
it { is_expected.not_to raise_error }
4343
end
4444

4545
context 'when only and skipped operations are both defined' do
46-
let(:only) { [:mutation_1, :query_2] }
47-
let(:skipped) { [:mutation_2, :query_1] }
46+
let(:only) { [:mutation1, :query2] }
47+
let(:skipped) { [:mutation2, :query1] }
4848

4949
it {
5050
is_expected.to(
@@ -57,39 +57,39 @@
5757
end
5858

5959
context 'when custom operations include a not supported item' do
60-
let(:custom) { { mutation_3: Class.new, query_2: Class.new } }
60+
let(:custom) { { mutation3: Class.new, query2: Class.new } }
6161

6262
it {
6363
is_expected.to(
6464
raise_error(
6565
GraphqlDevise::Error,
66-
'Custom operation "mutation_3" is not supported. Check for typos.'
66+
'Custom operation "mutation3" is not supported. Check for typos.'
6767
)
6868
)
6969
}
7070
end
7171

7272
context 'when skipped operations include a not supported item' do
73-
let(:skipped) { [:mutation_3, :query_2] }
73+
let(:skipped) { [:mutation3, :query2] }
7474

7575
it {
7676
is_expected.to(
7777
raise_error(
7878
GraphqlDevise::Error,
79-
'Trying to skip unsupported operation "mutation_3". Check for typos.'
79+
'Trying to skip unsupported operation "mutation3". Check for typos.'
8080
)
8181
)
8282
}
8383
end
8484

8585
context 'when only operations include a not supported item' do
86-
let(:only) { [:mutation_3, :query_2] }
86+
let(:only) { [:mutation3, :query2] }
8787

8888
it {
8989
is_expected.to(
9090
raise_error(
9191
GraphqlDevise::Error,
92-
'The "only" operation "mutation_3" is not supported. Check for typos.'
92+
'The "only" operation "mutation3" is not supported. Check for typos.'
9393
)
9494
)
9595
}

spec/operation_sanitizer_spec.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@
44
describe '.call' do
55
subject { described_class.call(default: default, custom: custom, only: only, skipped: skipped) }
66

7-
let(:op_class_1) { Class.new }
8-
let(:op_class_2) { Class.new }
9-
let(:op_class_3) { Class.new }
7+
let(:op_class1) { Class.new }
8+
let(:op_class2) { Class.new }
9+
let(:op_class3) { Class.new }
1010

1111
context 'when the operations passed are mutations' do
1212
let(:custom) { {} }
1313
let(:skipped) { [] }
1414
let(:only) { [] }
15-
let(:default) { { operation_1: op_class_1, operation_2: op_class_2 } }
15+
let(:default) { { operation1: op_class1, operation2: op_class2 } }
1616

1717
context 'when no other option besides default is passed' do
1818
it { is_expected.to eq(default) }
1919
end
2020

2121
context 'when there are custom operations' do
22-
let(:custom) { { operation_1: op_class_3, bad_operation: GraphQL::Schema::Resolver } }
22+
let(:custom) { { operation1: op_class3, bad_operation: GraphQL::Schema::Resolver } }
2323

24-
it { is_expected.to eq(operation_1: op_class_3, operation_2: op_class_2) }
24+
it { is_expected.to eq(operation1: op_class3, operation2: op_class2) }
2525
end
2626

2727
context 'when there are only operations' do
28-
let(:only) { [:operation_1] }
28+
let(:only) { [:operation1] }
2929

30-
it { is_expected.to eq(operation_1: op_class_1) }
30+
it { is_expected.to eq(operation1: op_class1) }
3131
end
3232

3333
context 'when there are skipped operations' do
34-
let(:skipped) { [:operation_2] }
34+
let(:skipped) { [:operation2] }
3535

36-
it { is_expected.to eq(operation_1: op_class_1) }
36+
it { is_expected.to eq(operation1: op_class1) }
3737
end
3838
end
3939
end

spec/queries_preparer_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
end
1212

1313
let(:resource) { 'User' }
14-
let(:class_1) { Class.new(GraphQL::Schema::Resolver) }
15-
let(:class_2) { GraphQL::Schema::Resolver }
14+
let(:class1) { Class.new(GraphQL::Schema::Resolver) }
15+
let(:class2) { GraphQL::Schema::Resolver }
1616
let(:auth_type) { GraphqlDevise::Types::AuthenticatableType }
17-
let(:queries) { { query_1: class_1, query_2: class_2 } }
17+
let(:queries) { { query1: class1, query2: class2 } }
1818

1919
context 'when queries is *NOT* empty' do
2020
it 'assign gql attibutes to queries and changes keys using resource map' do
2121
result = subject
2222

23-
expect(result.keys).to contain_exactly(:user_query_1, :user_query_2)
23+
expect(result.keys).to contain_exactly(:user_query1, :user_query2)
2424
expect(result.values.map(&:graphql_name)).to contain_exactly(
2525
'UserQuery1', 'UserQuery2'
2626
)

0 commit comments

Comments
 (0)