...
1 package followschema
2
3 import (
4 "context"
5 "testing"
6 "time"
7
8 "github.com/stretchr/testify/require"
9
10 "github.com/99designs/gqlgen/client"
11 "github.com/99designs/gqlgen/graphql/handler"
12 )
13
14 func TestTime(t *testing.T) {
15 resolvers := &Stub{}
16
17 c := client.New(handler.NewDefaultServer(NewExecutableSchema(Config{Resolvers: resolvers})))
18
19 resolvers.QueryResolver.User = func(ctx context.Context, id int) (user *User, e error) {
20 return &User{}, nil
21 }
22
23 t.Run("zero value in nullable field", func(t *testing.T) {
24 var resp struct {
25 User struct {
26 Updated *string
27 }
28 }
29
30 err := c.Post(`query { user(id: 1) { updated } }`, &resp)
31 require.NoError(t, err)
32
33 require.Nil(t, resp.User.Updated)
34 })
35
36 t.Run("zero value in non nullable field", func(t *testing.T) {
37 var resp struct {
38 User struct {
39 Created *string
40 }
41 }
42
43 err := c.Post(`query { user(id: 1) { created } }`, &resp)
44 require.EqualError(t, err, `[{"message":"the requested element is null which the schema does not allow","path":["user","created"]}]`)
45 })
46
47 t.Run("with values", func(t *testing.T) {
48 resolvers.QueryResolver.User = func(ctx context.Context, id int) (user *User, e error) {
49 updated := time.Date(2010, 1, 1, 0, 0, 20, 1, time.UTC)
50 return &User{
51 Created: time.Date(2010, 1, 1, 0, 0, 10, 1, time.UTC),
52 Updated: &updated,
53 }, nil
54 }
55
56 var resp struct {
57 User struct {
58 Created string
59 Updated string
60 }
61 }
62
63 err := c.Post(`query { user(id: 1) { created, updated } }`, &resp)
64 require.NoError(t, err)
65
66 require.Equal(t, "2010-01-01T00:00:10.000000001Z", resp.User.Created)
67 require.Equal(t, "2010-01-01T00:00:20.000000001Z", resp.User.Updated)
68 })
69 }
70
View as plain text