1 package validator
2
3 import (
4 "io/ioutil"
5 "testing"
6
7 "github.com/stretchr/testify/require"
8 "github.com/vektah/gqlparser/ast"
9 "github.com/vektah/gqlparser/parser/testrunner"
10 )
11
12 func TestLoadSchema(t *testing.T) {
13 t.Run("prelude", func(t *testing.T) {
14 s, err := LoadSchema(Prelude)
15 require.Nil(t, err)
16
17 boolDef := s.Types["Boolean"]
18 require.Equal(t, "Boolean", boolDef.Name)
19 require.Equal(t, ast.Scalar, boolDef.Kind)
20 require.Equal(t, "The `Boolean` scalar type represents `true` or `false`.", boolDef.Description)
21 })
22 t.Run("swapi", func(t *testing.T) {
23 file, err := ioutil.ReadFile("testdata/swapi.graphql")
24 require.Nil(t, err)
25 s, err := LoadSchema(Prelude, &ast.Source{Input: string(file), Name: "TestLoadSchema"})
26 require.Nil(t, err)
27
28 require.Equal(t, "Query", s.Query.Name)
29 require.Equal(t, "hero", s.Query.Fields[0].Name)
30
31 require.Equal(t, "Human", s.Types["Human"].Name)
32
33 require.Equal(t, "Subscription", s.Subscription.Name)
34 require.Equal(t, "reviewAdded", s.Subscription.Fields[0].Name)
35
36 possibleCharacters := s.GetPossibleTypes(s.Types["Character"])
37 require.Len(t, possibleCharacters, 2)
38 require.Equal(t, "Human", possibleCharacters[0].Name)
39 require.Equal(t, "Droid", possibleCharacters[1].Name)
40
41 implements := s.GetImplements(s.Types["Droid"])
42 require.Len(t, implements, 2)
43 require.Equal(t, "Character", implements[0].Name)
44 require.Equal(t, "SearchResult", implements[1].Name)
45 })
46
47 t.Run("type extensions", func(t *testing.T) {
48 file, err := ioutil.ReadFile("testdata/extensions.graphql")
49 require.Nil(t, err)
50 s, err := LoadSchema(Prelude, &ast.Source{Input: string(file), Name: "TestLoadSchema"})
51 require.Nil(t, err)
52
53 require.Equal(t, "Subscription", s.Subscription.Name)
54 require.Equal(t, "dogEvents", s.Subscription.Fields[0].Name)
55
56 require.Equal(t, "owner", s.Types["Dog"].Fields[1].Name)
57 })
58
59 testrunner.Test(t, "./schema_test.yml", func(t *testing.T, input string) testrunner.Spec {
60 _, err := LoadSchema(Prelude, &ast.Source{Input: input})
61 return testrunner.Spec{
62 Error: err,
63 }
64 })
65 }
66
View as plain text