-
-
Notifications
You must be signed in to change notification settings - Fork 725
/
NodeFieldSupportTests.cs
77 lines (64 loc) · 2.15 KB
/
NodeFieldSupportTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System.Threading.Tasks;
using HotChocolate.Execution;
using Snapshooter.Xunit;
using Xunit;
namespace HotChocolate.Types.Relay
{
public class NodeFieldSupportTests
{
[Fact]
public async Task NodeId_Is_Correctly_Formatted()
{
// arrange
ISchema schema = SchemaBuilder.New()
.EnableRelaySupport()
.AddQueryType<Foo>()
.AddObjectType<Bar>(d => d
.AsNode()
.IdField(t => t.Id)
.NodeResolver((ctx, id) =>
Task.FromResult(new Bar { Id = id })))
.Create();
IRequestExecutor executor = schema.MakeExecutable();
// act
IExecutionResult result = await executor.ExecuteAsync("{ bar { id } }");
// assert
result.ToJson().MatchSnapshot();
}
[Fact]
public async Task Node_Type_Is_Correctly_In_Context()
{
string type = null;
ISchema schema = SchemaBuilder.New()
.EnableRelaySupport()
.AddQueryType<Foo>()
.AddObjectType<Bar>(d => d
.AsNode()
.IdField(t => t.Id)
.NodeResolver((ctx, id) => Task.FromResult(new Bar { Id = id })))
.Use(next => async ctx =>
{
await next(ctx);
if (ctx.LocalContextData.TryGetValue(
WellKnownContextData.Type,
out object value))
{
type = (NameString)value;
}
})
.Create();
IRequestExecutor executor = schema.MakeExecutable();
IExecutionResult result = await executor.ExecuteAsync(
"{ node(id: \"QmFyCmQxMjM=\") { id } }");
Assert.Equal("Bar", type);
}
public class Foo
{
public Bar Bar { get; set; } = new Bar { Id = "123" };
}
public class Bar
{
public string Id { get; set; }
}
}
}