summaryrefslogtreecommitdiff
path: root/spec/support
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support')
-rw-r--r--spec/support/helpers/graphql_helpers.rb47
-rw-r--r--spec/support/matchers/graphql_matchers.rb23
-rw-r--r--spec/support/shared_examples/requests/graphql_shared_examples.rb11
3 files changed, 59 insertions, 22 deletions
diff --git a/spec/support/helpers/graphql_helpers.rb b/spec/support/helpers/graphql_helpers.rb
index ae29b16e32c..30ff9a1196a 100644
--- a/spec/support/helpers/graphql_helpers.rb
+++ b/spec/support/helpers/graphql_helpers.rb
@@ -1,7 +1,16 @@
module GraphqlHelpers
+ # makes an underscored string look like a fieldname
+ # "merge_request" => "mergeRequest"
+ def self.fieldnamerize(underscored_field_name)
+ graphql_field_name = underscored_field_name.to_s.camelize
+ graphql_field_name[0] = graphql_field_name[0].downcase
+
+ graphql_field_name
+ end
+
# Run a loader's named resolver
- def resolve(kls, name, obj: nil, args: {}, ctx: {})
- kls[name].call(obj, args, ctx)
+ def resolve(resolver_class, obj: nil, args: {}, ctx: {})
+ resolver_class.new(object: obj, context: ctx).resolve(args)
end
# Runs a block inside a BatchLoader::Executor wrapper
@@ -24,8 +33,20 @@ module GraphqlHelpers
end
end
- def all_graphql_fields_for(klass)
- type = GitlabSchema.types[klass.name]
+ def graphql_query_for(name, attributes = {}, fields = nil)
+ fields ||= all_graphql_fields_for(name.classify)
+ attributes = attributes_to_graphql(attributes)
+ <<~QUERY
+ {
+ #{name}(#{attributes}) {
+ #{fields}
+ }
+ }
+ QUERY
+ end
+
+ def all_graphql_fields_for(class_name)
+ type = GitlabSchema.types[class_name.to_s]
return "" unless type
type.fields.map do |name, field|
@@ -37,8 +58,22 @@ module GraphqlHelpers
end.join("\n")
end
- def post_graphql(query)
- post '/api/graphql', query: query
+ def attributes_to_graphql(attributes)
+ attributes.map do |name, value|
+ "#{GraphqlHelpers.fieldnamerize(name.to_s)}: \"#{value}\""
+ end.join(", ")
+ end
+
+ def post_graphql(query, current_user: nil)
+ post api('/', current_user, version: 'graphql'), query: query
+ end
+
+ def graphql_data
+ json_response['data']
+ end
+
+ def graphql_errors
+ json_response['data']
end
def scalar?(field)
diff --git a/spec/support/matchers/graphql_matchers.rb b/spec/support/matchers/graphql_matchers.rb
index c0ed16ecaba..ba7a1c8cde0 100644
--- a/spec/support/matchers/graphql_matchers.rb
+++ b/spec/support/matchers/graphql_matchers.rb
@@ -1,31 +1,40 @@
RSpec::Matchers.define :require_graphql_authorizations do |*expected|
match do |field|
- authorizations = field.metadata[:authorize]
-
- expect(authorizations).to contain_exactly(*expected)
+ field_definition = field.metadata[:type_class]
+ expect(field_definition).to respond_to(:required_permissions)
+ expect(field_definition.required_permissions).to contain_exactly(*expected)
end
end
RSpec::Matchers.define :have_graphql_fields do |*expected|
match do |kls|
- expect(kls.fields.keys).to contain_exactly(*expected.map(&:to_s))
+ field_names = expected.map { |name| GraphqlHelpers.fieldnamerize(name) }
+ expect(kls.fields.keys).to contain_exactly(*field_names)
end
end
RSpec::Matchers.define :have_graphql_arguments do |*expected|
+ include GraphqlHelpers
+
match do |field|
- expect(field.arguments.keys).to contain_exactly(*expected.map(&:to_s))
+ argument_names = expected.map { |name| GraphqlHelpers.fieldnamerize(name) }
+ expect(field.arguments.keys).to contain_exactly(*argument_names)
end
end
RSpec::Matchers.define :have_graphql_type do |expected|
match do |field|
- expect(field.type).to eq(expected)
+ expect(field.type).to eq(expected.to_graphql)
end
end
RSpec::Matchers.define :have_graphql_resolver do |expected|
match do |field|
- expect(field.resolve_proc).to eq(expected)
+ case expected
+ when Method
+ expect(field.metadata[:type_class].resolve_proc).to eq(expected)
+ else
+ expect(field.metadata[:type_class].resolver).to eq(expected)
+ end
end
end
diff --git a/spec/support/shared_examples/requests/graphql_shared_examples.rb b/spec/support/shared_examples/requests/graphql_shared_examples.rb
index c143b83696e..9b2b74593a5 100644
--- a/spec/support/shared_examples/requests/graphql_shared_examples.rb
+++ b/spec/support/shared_examples/requests/graphql_shared_examples.rb
@@ -3,16 +3,9 @@ require 'spec_helper'
shared_examples 'a working graphql query' do
include GraphqlHelpers
- let(:parsed_response) { JSON.parse(response.body) }
- let(:response_data) { parsed_response['data'] }
-
- before do
- post_graphql(query)
- end
-
it 'is returns a successfull response', :aggregate_failures do
expect(response).to be_success
- expect(parsed_response['errors']).to be_nil
- expect(response_data).not_to be_empty
+ expect(graphql_errors['errors']).to be_nil
+ expect(json_response.keys).to include('data')
end
end