diff --git a/graphql/introspection.lua b/graphql/introspection.lua index 6cb0c42..e50491e 100644 --- a/graphql/introspection.lua +++ b/graphql/introspection.lua @@ -7,7 +7,7 @@ local __Schema, __Directive, __DirectiveLocation, __Type, __Field, __InputValue, local function resolveArgs(field) local function transformArg(arg, name) if arg.__type then - return { kind = arg, name = name } + return { kind = arg, name = name, description = arg.description } elseif arg.name then return arg else diff --git a/graphql/types.lua b/graphql/types.lua index 1d36d93..b5505d1 100644 --- a/graphql/types.lua +++ b/graphql/types.lua @@ -224,6 +224,7 @@ function types.inputObject(config) fields[fieldName] = { name = fieldName, kind = field.kind, + description = field.description, } end diff --git a/test/integration/graphql_test.lua b/test/integration/graphql_test.lua index ac2ed52..faff008 100644 --- a/test/integration/graphql_test.lua +++ b/test/integration/graphql_test.lua @@ -1509,3 +1509,82 @@ function g.test_specifiedBy_directive() t.assert_equals(data, { test_A = { url = "http://localhost", value = "1" } }) t.assert_equals(errors, nil) end + +function g.test_descriptions() + local function callback(_, _) + return nil + end + + local query_schema = { + ['test_query'] = { + kind = types.string.nonNull, + arguments = { + arg = types.string, + arg_described = { + kind = types.object({ + name = 'test_object', + fields = { + object_arg_described = { + kind = types.string, + description = 'object argument' + }, + object_arg = types.string, + }, + kind = types.string, + }), + description = 'described query argument', + } + }, + resolve = callback, + description = 'test query', + } + } + + local mutation_schema = { + ['test_mutation'] = { + kind = types.string.nonNull, + arguments = { + mutation_arg = types.string, + mutation_arg_described = { + kind = types.inputObject({ + name = 'test_input_object', + fields = { + input_object_arg_described = { + kind = types.string, + description = 'input object argument' + }, + input_object_arg = types.string, + }, + kind = types.string, + }), + description = 'described mutation argument', + }, + }, + resolve = callback, + description = 'test mutation', + } + } + + local data, errors = check_request(introspection.query, query_schema, mutation_schema) + t.assert_equals(errors, nil) + + local test_query = util.find_by_name(data.__schema.types, 'Query') + t.assert_equals(test_query.fields[1].description, 'test query') + + local arg_described = util.find_by_name(test_query.fields[1].args, 'arg_described') + t.assert_equals(arg_described.description, 'described query argument') + + local test_object = util.find_by_name(data.__schema.types, 'test_object') + local object_arg_described = util.find_by_name(test_object.fields, 'object_arg_described') + t.assert_equals(object_arg_described.description, 'object argument') + + local test_mutation = util.find_by_name(data.__schema.types, 'Mutation') + t.assert_equals(test_mutation.fields[1].description, 'test mutation') + + local mutation_arg_described = util.find_by_name(test_mutation.fields[1].args, 'mutation_arg_described') + t.assert_equals(mutation_arg_described.description, 'described mutation argument') + + local test_input_object = util.find_by_name(data.__schema.types, 'test_input_object') + local input_object_arg_described = util.find_by_name(test_input_object.inputFields, 'input_object_arg_described') + t.assert_equals(input_object_arg_described.description, 'input object argument') +end