summaryrefslogtreecommitdiff
path: root/spec/requests/api/graphql_spec.rb
diff options
context:
space:
mode:
authorcharlie ablett <cablett@gitlab.com>2019-05-23 22:43:47 +0000
committercharlieablett <cablett@gitlab.com>2019-05-31 19:57:02 +1200
commit699532232ca27e6079c553261e0ab1d17317472a (patch)
tree47c7e56de28ba1857add8ea13627de07936e117e /spec/requests/api/graphql_spec.rb
parent5f0c230a18b677bd4ec6a4a54085775b0c69a498 (diff)
downloadgitlab-ce-699532232ca27e6079c553261e0ab1d17317472a.tar.gz
Apply reviewer feedback59587-add-graphql-logging
- Comply doc with guidelines - Improve tests for readability and completeness - Separate out phases visually with newlines - Add `format_message` test - test readability - code and test structure/styling - static query analyzers - call `as_json` on `provided_variables` - add exception handling
Diffstat (limited to 'spec/requests/api/graphql_spec.rb')
-rw-r--r--spec/requests/api/graphql_spec.rb26
1 files changed, 22 insertions, 4 deletions
diff --git a/spec/requests/api/graphql_spec.rb b/spec/requests/api/graphql_spec.rb
index abc24fc0fe8..656d6f8b50b 100644
--- a/spec/requests/api/graphql_spec.rb
+++ b/spec/requests/api/graphql_spec.rb
@@ -19,16 +19,21 @@ describe 'GraphQL' do
context 'logging' do
shared_examples 'logging a graphql query' do
let(:expected_params) do
- { query_string: query, variables: variables.to_json, duration: anything, depth: 1, complexity: 1 }
+ { query_string: query, variables: variables.to_s, duration: anything, depth: 1, complexity: 1 }
end
it 'logs a query with the expected params' do
+ expect(Gitlab::GraphqlLogger).to receive(:info).with(expected_params).once
+
post_graphql(query, variables: variables)
end
- end
- before do
- expect(Gitlab::GraphqlLogger).to receive(:info).with(expected_params).once
+ it 'does not instantiate any query analyzers' do # they are static and re-used
+ expect(GraphQL::Analysis::QueryComplexity).not_to receive(:new)
+ expect(GraphQL::Analysis::QueryDepth).not_to receive(:new)
+
+ 2.times { post_graphql(query, variables: variables) }
+ end
end
context 'with no variables' do
@@ -44,6 +49,19 @@ describe 'GraphQL' do
it_behaves_like 'logging a graphql query'
end
+
+ context 'when there is an error in the logger' do
+ before do
+ allow_any_instance_of(Gitlab::Graphql::QueryAnalyzers::LoggerAnalyzer).to receive(:process_variables).and_raise(StandardError.new("oh noes!"))
+ end
+
+ it 'logs the exception in Sentry and continues with the request' do
+ expect(Gitlab::Sentry).to receive(:track_exception).at_least(1).times
+ expect(Gitlab::GraphqlLogger).to receive(:info)
+
+ post_graphql(query, variables: {})
+ end
+ end
end
context 'invalid variables' do