Skip to content

Commit 423886e

Browse files
committed
Fix coercing default values on schema generation
1 parent 5aac8f9 commit 423886e

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

graphql/schema.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ function schema:generateTypeMap(node)
7070

7171
if node.__type == 'Object' or node.__type == 'Interface' or node.__type == 'InputObject' then
7272
for fieldName, field in pairs(node.fields) do
73+
local defaultValue = field.defaultValue
7374
if field.arguments then
7475
for name, argument in pairs(field.arguments) do
7576
-- BEGIN_HACK: resolve type names to real types
@@ -85,12 +86,14 @@ function schema:generateTypeMap(node)
8586

8687
local argumentType = argument.__type and argument or argument.kind
8788
assert(argumentType, 'Must supply type for argument "' .. name .. '" on "' .. fieldName .. '"')
89+
argumentType.defaultValue = argument.defaultValue
8890
self:generateTypeMap(argumentType)
8991
end
9092
end
9193

9294
-- HACK: resolve type names to real types
9395
field.kind = types.resolve(field.kind, self.name)
96+
field.defaultValue = defaultValue
9497
self:generateTypeMap(field.kind)
9598
end
9699
end

graphql/types.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ function types.inputObject(config)
224224
name = fieldName,
225225
kind = field.kind,
226226
description = field.description,
227+
defaultValue = field.defaultValue,
227228
}
228229
end
229230

test/integration/graphql_test.lua

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1639,3 +1639,39 @@ function g.test_schema_input_arg_described_with_kind_variable_pass()
16391639
local _, errors = check_request(query, query_schema, nil, nil, { variables = variables })
16401640
t.assert_equals(errors, nil)
16411641
end
1642+
1643+
function g.test_arguments_default_values()
1644+
local function callback(_, _)
1645+
return nil
1646+
end
1647+
1648+
local mutation_schema = {
1649+
['test_mutation'] = {
1650+
kind = types.string.nonNull,
1651+
arguments = {
1652+
mutation_arg = types.string,
1653+
mutation_arg_defaults = {
1654+
kind = types.inputObject({
1655+
name = 'test_input_object',
1656+
fields = {
1657+
input_object_arg_defaults = {
1658+
kind = types.string,
1659+
defaultValue = 'input object argument default value'
1660+
},
1661+
input_object_arg = types.string,
1662+
},
1663+
kind = types.string,
1664+
}),
1665+
},
1666+
},
1667+
resolve = callback,
1668+
}
1669+
}
1670+
1671+
local data, errors = check_request(introspection.query, nil, mutation_schema)
1672+
t.assert_equals(errors, nil)
1673+
1674+
local test_input_object = util.find_by_name(data.__schema.types, 'test_input_object')
1675+
local input_object_arg_defaults = util.find_by_name(test_input_object.inputFields, 'input_object_arg_defaults')
1676+
t.assert_equals(input_object_arg_defaults.defaultValue, 'input object argument default value')
1677+
end

0 commit comments

Comments
 (0)