Repository URL to install this package:
|
Version:
1.8.2 ▾
|
# frozen_string_literal: true
require "spec_helper"
describe GraphQL::Schema::Argument do
module SchemaArgumentTest
class Query < GraphQL::Schema::Object
field :field, String, null: false do
argument :arg, String, description: "test", required: false
argument :arg_with_block, String, required: false do
description "test"
end
argument :aliased_arg, String, required: false, as: :renamed
argument :prepared_arg, Int, required: false, prepare: :multiply
end
def field(**args)
args.inspect
end
def multiply(val)
context[:multiply_by] * val
end
end
class Schema < GraphQL::Schema
query(Query)
end
end
describe "#name" do
it "reflects camelization" do
assert_equal "argWithBlock", SchemaArgumentTest::Query.fields["field"].arguments["argWithBlock"].name
end
end
describe "#type" do
let(:argument) { SchemaArgumentTest::Query.fields["field"].arguments["arg"] }
it "returns the type" do
assert_equal GraphQL::STRING_TYPE, argument.type
end
end
describe "graphql definition" do
it "calls block" do
assert_equal "test", SchemaArgumentTest::Query.fields["field"].arguments["argWithBlock"].description
end
end
describe "#description" do
it "sets description" do
SchemaArgumentTest::Query.fields["field"].arguments["arg"].description "new description"
assert_equal "new description", SchemaArgumentTest::Query.fields["field"].arguments["arg"].description
end
it "returns description" do
assert_equal "test", SchemaArgumentTest::Query.fields["field"].arguments["argWithBlock"].description
end
end
describe "as:" do
it "uses that Symbol for Ruby kwargs" do
query_str = <<-GRAPHQL
{ field(aliasedArg: "x") }
GRAPHQL
res = SchemaArgumentTest::Schema.execute(query_str)
# Make sure it's getting the renamed symbol:
assert_equal '{:renamed=>"x"}', res["data"]["field"]
end
end
describe "prepare:" do
it "calls the method on the field's owner" do
query_str = <<-GRAPHQL
{ field(preparedArg: 5) }
GRAPHQL
res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3})
# Make sure it's getting the renamed symbol:
assert_equal '{:prepared_arg=>15}', res["data"]["field"]
end
end
end