Skip to content

Commit 144d07b

Browse files
author
David Revelo
committed
Handle edge case when there are no mutations
1 parent 7240000 commit 144d07b

8 files changed

Lines changed: 40 additions & 44 deletions

File tree

lib/graphql_devise/engine.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ class Engine < ::Rails::Engine
55
isolate_namespace GraphqlDevise
66

77
config.before_initialize do
8-
GraphqlDevise::Schema.mutation(GraphqlDevise::Types::MutationType)
8+
if GraphqlDevise::Types::MutationType.fields.blank?
9+
GraphqlDevise::Schema.mutation(GraphqlDevise::Types::MutationType)
10+
end
911

1012
if GraphqlDevise::Types::QueryType.fields.blank?
1113
GraphqlDevise::Types::QueryType.field(:dummy, resolver: GraphqlDevise::Resolvers::Dummy)

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/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
)

spec/requests/mutations/login_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@
138138
GRAPHQL
139139
end
140140

141-
before { post_request('/api/v1/guest/graphql_auth') }
141+
before { post_request }
142142

143143
it 'works alongside the user mount point' do
144144
expect(json_response[:data][:guestLogin]).to include(

spec/requests/mutations/sign_up_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
end
124124

125125
it 'works without the confirmable module' do
126-
expect { post_request('/api/v1/guest/graphql_auth') }.to change(Guest, :count).by(1)
126+
expect { post_request }.to change(Guest, :count).from(0).to(1)
127127
end
128128
end
129129
end

0 commit comments

Comments
 (0)