Repository URL to install this package:
|
Version:
1.8.2 ▾
|
# frozen_string_literal: true
require "spec_helper"
describe GraphQL::Function do
class TestFunc < GraphQL::Function
argument :name, GraphQL::STRING_TYPE
argument :age, types.Int
type do
name "TestFuncPayload"
field :name, types.String, hash_key: :name
end
description "Returns the string you give it"
deprecation_reason "It's useless"
complexity 9
def call(o, a, c)
{ name: a[:name] }
end
end
describe "function API" do
it "exposes required info" do
f = TestFunc.new
assert_equal ["name", "age"], f.arguments.keys
assert_equal "TestFuncPayload", f.type.name
assert_equal "Returns the string you give it", f.description
assert_equal "It's useless", f.deprecation_reason
assert_equal({name: "stuff"}, f.call(nil, { name: "stuff" }, nil))
assert_equal 9, f.complexity
assert_equal TestFunc.new.type, TestFunc.new.type
end
end
it "has default values" do
default_func = GraphQL::Function.new
assert_equal 1, default_func.complexity
assert_equal({}, default_func.arguments)
assert_equal(nil, default_func.type)
assert_equal(nil, default_func.description)
assert_equal(nil, default_func.deprecation_reason)
assert_raises(NotImplementedError) {
default_func.call(nil, nil, nil)
}
end
describe "use in a schema" do
let(:schema) {
query_type = GraphQL::ObjectType.define do
name "Query"
field :test, function: TestFunc.new
connection :testConn, function: TestFunc.new
end
relay_mutation = GraphQL::Relay::Mutation.define do
name "Test"
function TestFunc.new
end
mutation_type = GraphQL::ObjectType.define do
name "Mutation"
field :test, field: relay_mutation.field
end
GraphQL::Schema.define do
query(query_type)
mutation(mutation_type)
end
}
it "gets attributes from the function" do
field = schema.query.fields["test"]
assert_equal ["name", "age"], field.arguments.keys
assert_equal "TestFuncPayload", field.type.name
assert_equal "Returns the string you give it", field.description
assert_equal "It's useless", field.deprecation_reason
assert_equal({name: "stuff"}, field.resolve(nil, { name: "stuff" }, nil))
assert_equal 9, field.complexity
end
it "can be used as a field" do
query_str = <<-GRAPHQL
{ test(name: "graphql") { name }}
GRAPHQL
res = schema.execute(query_str)
assert_equal "graphql", res["data"]["test"]["name"]
end
it "can be used as a mutation" do
query_str = <<-GRAPHQL
mutation { test(input: {clientMutationId: "123", name: "graphql"}) { name, clientMutationId } }
GRAPHQL
res = schema.execute(query_str)
assert_equal "graphql", res["data"]["test"]["name"]
end
end
describe "when overriding" do
let(:schema) {
query_type = GraphQL::ObjectType.define do
name "Query"
field :blockOverride, function: TestFunc.new do
description "I have altered the description"
argument :anArg, types.Int
argument :oneMoreArg, types.String
end
field :argOverride, types.String, "New Description", function: TestFunc.new
end
GraphQL::Schema.define do
query(query_type)
end
}
it "can override description" do
field = schema.query.fields["blockOverride"]
assert_equal "I have altered the description", field.description
assert_equal ["name", "age", "anArg", "oneMoreArg"], field.arguments.keys
end
it "can add to arguments" do
field = schema.query.fields["argOverride"]
assert_equal "New Description", field.description
assert_equal GraphQL::STRING_TYPE, field.type
assert_equal ["name", "age"], field.arguments.keys
end
end
end