Repository URL to install this package:
|
Version:
1.8.2 ▾
|
# frozen_string_literal: true
require "spec_helper"
# Make sure that `!` has no effect
using GraphQL::DeprecatedDSL
describe GraphQL::Schema::Mutation do
let(:mutation) { Jazz::AddInstrument }
after do
Jazz::Models.reset
end
it "Doesn't override !" do
assert_equal false, !mutation
end
describe "definition" do
it "passes along description" do
assert_equal "Register a new musical instrument in the database", mutation.field_options[:description]
assert_equal "Autogenerated return type of AddInstrument", mutation.payload_type.description
end
end
describe "argument prepare" do
it "calls methods on the mutation, uses `as:`" do
query_str = 'mutation { prepareInput(input: 4) }'
res = Jazz::Schema.execute(query_str)
assert_equal 16, res["data"]["prepareInput"], "It's squared by the prepare method"
end
end
describe "a derived field" do
it "has a reference to the mutation" do
f = GraphQL::Schema::Field.from_options(name: "x", **mutation.field_options)
assert_equal mutation, f.mutation
# Make sure it's also present in the schema
f2 = Jazz::Schema.find("Mutation.addInstrument")
assert_equal mutation, f2.mutation
end
end
describe ".payload_type" do
it "has a reference to the mutation" do
assert_equal mutation, mutation.payload_type.mutation
end
end
describe ".field" do
it "raises a nice error when called without args" do
err = assert_raises(ArgumentError) { mutation.field }
assert_includes err.message, "Use `mutation: Jazz::AddInstrument` to attach this mutation instead."
end
end
describe ".object_class" do
it "can override & inherit the parent class" do
obj_class = Class.new(GraphQL::Schema::Object)
mutation_class = Class.new(GraphQL::Schema::Mutation) do
object_class(obj_class)
end
mutation_subclass = Class.new(mutation_class)
assert_equal(GraphQL::Schema::Object, GraphQL::Schema::Mutation.object_class)
assert_equal(obj_class, mutation_class.object_class)
assert_equal(obj_class, mutation_subclass.object_class) end
end
describe ".argument_class" do
it "can override & inherit the parent class" do
arg_class = Class.new(GraphQL::Schema::Argument)
mutation_class = Class.new(GraphQL::Schema::Mutation) do
argument_class(arg_class)
end
mutation_subclass = Class.new(mutation_class)
assert_equal(GraphQL::Schema::Argument, GraphQL::Schema::Mutation.argument_class)
assert_equal(arg_class, mutation_class.argument_class)
assert_equal(arg_class, mutation_subclass.argument_class)
end
end
describe "evaluation" do
it "runs mutations" do
query_str = <<-GRAPHQL
mutation {
addInstrument(name: "Trombone", family: BRASS) {
instrument {
name
family
}
entries {
name
}
ee
}
}
GRAPHQL
response = Jazz::Schema.execute(query_str)
assert_equal "Trombone", response["data"]["addInstrument"]["instrument"]["name"]
assert_equal "BRASS", response["data"]["addInstrument"]["instrument"]["family"]
assert_equal "GraphQL::Query::Context::ExecutionErrors", response["data"]["addInstrument"]["ee"]
assert_equal 7, response["data"]["addInstrument"]["entries"].size
end
end
describe ".null" do
it "overrides whether or not the field can be null" do
non_nullable_mutation_class = Class.new(GraphQL::Schema::Mutation) do
graphql_name "Thing1"
null(false)
end
nullable_mutation_class = Class.new(GraphQL::Schema::Mutation) do
graphql_name "Thing2"
null(true)
end
default_mutation_class = Class.new(GraphQL::Schema::Mutation) do
graphql_name "Thing3"
end
assert default_mutation_class.field_options[:null]
assert nullable_mutation_class.field_options[:null]
refute non_nullable_mutation_class.field_options[:null]
end
it "should inherit and override in subclasses" do
base_mutation = Class.new(GraphQL::Schema::Mutation) do
null(false)
end
inheriting_mutation = Class.new(base_mutation) do
graphql_name "Thing"
end
override_mutation = Class.new(base_mutation) do
graphql_name "Thing2"
null(true)
end
assert_equal false, inheriting_mutation.field_options[:null]
assert override_mutation.field_options[:null]
end
end
end