Skip to content

Commit 49d85a1

Browse files
Merge pull request #94 from graphql-devise/increase-controller-coverage
Increase GraphqlDevise::GraphqlController coverage
2 parents aa9ac82 + db84826 commit 49d85a1

3 files changed

Lines changed: 80 additions & 13 deletions

File tree

spec/rails_helper.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
config.include(Requests::JsonHelpers, type: :request)
3939
config.include(Requests::AuthHelpers, type: :request)
4040
config.include(ActiveSupport::Testing::TimeHelpers)
41-
config.include(Generators::FileHelpers, type: :generator)
4241

4342
config.before(:suite) do
4443
ActionController::Base.allow_forgery_protection = true
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
require 'rails_helper'
2+
3+
RSpec.describe GraphqlDevise::GraphqlController do
4+
let(:password) { 'password123' }
5+
let(:user) { create(:user, :confirmed, password: password) }
6+
let(:params) { { query: query, variables: variables } }
7+
let(:request_params) do
8+
if Rails::VERSION::MAJOR >= 5
9+
{ params: params }
10+
else
11+
params
12+
end
13+
end
14+
15+
context 'when variables are a string' do
16+
let(:variables) { "{\"email\": \"#{user.email}\"}" }
17+
let(:query) { "mutation($email: String!) { userLogin(email: $email, password: \"#{password}\") { user { email name signInCount } } }" }
18+
19+
it 'parses the string variables' do
20+
post '/api/v1/graphql_auth', request_params
21+
22+
expect(json_response).to match(
23+
data: { userLogin: { user: { email: user.email, name: user.name, signInCount: 1 } } }
24+
)
25+
end
26+
27+
context 'when variables is an empty string' do
28+
let(:variables) { '' }
29+
let(:query) { "mutation { userLogin(email: \"#{user.email}\", password: \"#{password}\") { user { email name signInCount } } }" }
30+
31+
it 'returns an empty hash as variables' do
32+
post '/api/v1/graphql_auth', request_params
33+
34+
expect(json_response).to match(
35+
data: { userLogin: { user: { email: user.email, name: user.name, signInCount: 1 } } }
36+
)
37+
end
38+
end
39+
end
40+
41+
context 'when variables are not a string or hash' do
42+
let(:variables) { 1 }
43+
let(:query) { "mutation($email: String!) { userLogin(email: $email, password: \"#{password}\") { user { email name signInCount } } }" }
44+
45+
it 'raises an error' do
46+
expect do
47+
post '/api/v1/graphql_auth', request_params
48+
end.to raise_error(ArgumentError)
49+
end
50+
end
51+
52+
context 'when multiplexing queries' do
53+
let(:params) do
54+
{
55+
_json: [
56+
{ query: "mutation { userLogin(email: \"#{user.email}\", password: \"#{password}\") { user { email name signInCount } } }" },
57+
{ query: "mutation { userLogin(email: \"#{user.email}\", password: \"wrong password\") { user { email name signInCount } } }" }
58+
]
59+
}
60+
end
61+
62+
it 'executes multiple queries in the same request' do
63+
post '/api/v1/graphql_auth', request_params
64+
65+
expect(json_response).to match(
66+
[
67+
{ data: { userLogin: { user: { email: user.email, name: user.name, signInCount: 1 } } } },
68+
{
69+
data: { userLogin: nil },
70+
errors: [
71+
hash_including(
72+
message: 'Invalid login credentials. Please try again.', extensions: { code: 'USER_ERROR' }
73+
)
74+
]
75+
}
76+
]
77+
)
78+
end
79+
end
80+
end

spec/support/generators/file_helpers.rb

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)