Skip to content

Commit c08f7d2

Browse files
dlederleDavid Revelo
authored andcommitted
Add types to the schema in the mapper
1 parent e24a5b8 commit c08f7d2

9 files changed

Lines changed: 48 additions & 52 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ Additional queries and mutations is usually a good place for other
117117
operations on your schema that require no authentication (like sign_up).
118118
Also by adding them through the mount method, your mutations and
119119
resolvers can inherit from our [base mutation](https://github.com/graphql-devise/graphql_devise/blob/master/app/graphql/graphql_devise/mutations/base.rb)
120-
or [base resover](https://github.com/graphql-devise/graphql_devise/blob/master/app/graphql/graphql_devise/resolvers/base.rb)
120+
or [base resolver](https://github.com/graphql-devise/graphql_devise/blob/master/app/graphql/graphql_devise/resolvers/base.rb)
121121
respectively, to take advantage of some of the methods provided by devise
122122
just like with `devise_scope`
123123

lib/graphql_devise/engine.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,5 @@
33
module GraphqlDevise
44
class Engine < ::Rails::Engine
55
isolate_namespace GraphqlDevise
6-
7-
config.before_initialize do
8-
GraphqlDevise::Schema.mutation(GraphqlDevise::Types::MutationType)
9-
10-
if GraphqlDevise::Types::QueryType.fields.blank?
11-
GraphqlDevise::Types::QueryType.field(:dummy, resolver: GraphqlDevise::Resolvers::Dummy)
12-
end
13-
end
146
end
157
end

lib/graphql_devise/rails/routes.rb

Lines changed: 15 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,
@@ -54,26 +58,26 @@ def mount_graphql_devise_for(resource, opts = {})
5458
prepared_mutations.merge(additional_mutations).each do |action, mutation|
5559
GraphqlDevise::Types::MutationType.field(action, mutation: mutation)
5660
end
61+
62+
if (prepared_mutations.present? || additional_mutations.present?) &&
63+
(Gem::Version.new(GraphQL::VERSION) <= Gem::Version.new('1.10.0') || GraphqlDevise::Schema.mutation.nil?)
64+
GraphqlDevise::Schema.mutation(GraphqlDevise::Types::MutationType)
65+
end
66+
5767
prepared_queries.merge(additional_queries).each do |action, resolver|
5868
GraphqlDevise::Types::QueryType.field(action, resolver: resolver)
5969
end
6070

71+
if (prepared_queries.blank? || additional_queries.present?) && GraphqlDevise::Types::QueryType.fields.blank?
72+
GraphqlDevise::Types::QueryType.field(:dummy, resolver: GraphqlDevise::Resolvers::Dummy)
73+
end
74+
6175
Devise.mailer.helper(GraphqlDevise::MailerHelper)
6276

6377
devise_scope mapping_name do
6478
post path, to: 'graphql_devise/graphql#auth'
6579
get path, to: 'graphql_devise/graphql#auth'
6680
end
6781
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
7882
end
7983
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)