Skip to content

Commit 2c86080

Browse files
danielreynolds1michaelstaib
authored andcommitted
Resolved issue in SchemaParser that prevented default values parsing in Input Objects (#7895)
1 parent a395e67 commit 2c86080

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

src/HotChocolate/Skimmed/src/Skimmed/Serialization/SchemaParser.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ private static void ExtendInputObjectType(
434434
var field = new InputFieldDefinition(fieldNode.Name.Value);
435435
field.Description = fieldNode.Description?.Value;
436436
field.Type = schema.Types.ResolveType(fieldNode.Type);
437+
field.DefaultValue = fieldNode.DefaultValue;
437438

438439
BuildDirectiveCollection(schema, field.Directives, fieldNode.Directives);
439440

src/HotChocolate/Skimmed/test/Skimmed.Tests/SchemaParserTests.cs

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Text;
2+
using HotChocolate.Language;
23
using HotChocolate.Skimmed.Serialization;
3-
using HotChocolate.Types;
4+
using DirectiveLocation = HotChocolate.Types.DirectiveLocation;
45

56
namespace HotChocolate.Skimmed;
67

@@ -161,4 +162,97 @@ directive @skip("Custom argument description" ifCustom: String! @custom) on ENUM
161162
Assert.True(argument.Directives.ContainsName("custom"));
162163
Assert.Equal(DirectiveLocation.EnumValue, directive.Locations);
163164
}
165+
166+
[Fact]
167+
public void Parse_Input_Object_With_Default_Value()
168+
{
169+
// arrange
170+
var sdl =
171+
"""
172+
input BookFilter {
173+
genre: Genre = FANTASY
174+
}
175+
enum Genre {
176+
FANTASY
177+
SCIENCE_FICTION
178+
}
179+
""";
180+
181+
// act
182+
var schema = SchemaParser.Parse(Encoding.UTF8.GetBytes(sdl));
183+
// assert
184+
Assert.Collection(
185+
schema.Types.OrderBy(t => t.Name),
186+
type =>
187+
{
188+
var inputType = Assert.IsType<InputObjectTypeDefinition>(type);
189+
Assert.Equal("BookFilter", inputType.Name);
190+
var genreField = Assert.Single(inputType.Fields);
191+
Assert.Equal("genre", genreField.Name);
192+
Assert.IsType<EnumTypeDefinition>(genreField.Type);
193+
Assert.NotNull(genreField.DefaultValue);
194+
Assert.Equal("FANTASY", genreField.DefaultValue.Value);
195+
},
196+
type =>
197+
{
198+
var genreType = Assert.IsType<EnumTypeDefinition>(type);
199+
Assert.Equal("Genre", genreType.Name);
200+
});
201+
}
202+
203+
[Fact]
204+
public void Parse_Input_Object_With_Multiple_Default_Values()
205+
{
206+
// arrange
207+
var sdl =
208+
"""
209+
input BookFilter {
210+
genre: Genre = FANTASY
211+
author: String = "Lorem ipsum"
212+
}
213+
enum Genre {
214+
FANTASY
215+
SCIENCE_FICTION
216+
}
217+
218+
scalar String
219+
""";
220+
221+
// act
222+
var schema = SchemaParser.Parse(Encoding.UTF8.GetBytes(sdl));
223+
// assert
224+
Assert.Collection(
225+
schema.Types.OrderBy(t => t.Name),
226+
type =>
227+
{
228+
var inputType = Assert.IsType<InputObjectTypeDefinition>(type);
229+
Assert.Equal("BookFilter", inputType.Name);
230+
Assert.Collection(inputType.Fields.OrderBy(f => f.Name),
231+
authorField =>
232+
{
233+
Assert.Equal("author", authorField.Name);
234+
var fieldType = Assert.IsType<ScalarTypeDefinition>(authorField.Type);
235+
Assert.Equal("String", fieldType.Name);
236+
Assert.NotNull(authorField.DefaultValue);
237+
Assert.Equal("Lorem ipsum", authorField.DefaultValue.Value);
238+
},
239+
genreField =>
240+
{
241+
Assert.Equal("genre", genreField.Name);
242+
Assert.IsType<EnumTypeDefinition>(genreField.Type);
243+
Assert.NotNull(genreField.DefaultValue);
244+
Assert.Equal("FANTASY", genreField.DefaultValue.Value);
245+
});
246+
},
247+
type =>
248+
{
249+
var genreType = Assert.IsType<EnumTypeDefinition>(type);
250+
Assert.Equal("Genre", genreType.Name);
251+
},
252+
type =>
253+
{
254+
var stringType = Assert.IsType<ScalarTypeDefinition>(type);
255+
Assert.Equal("String", stringType.Name);
256+
});
257+
}
164258
}

0 commit comments

Comments
 (0)