git.sr.ht/~sircmpwn/gqlgen@v0.0.0-20200522192042-c84d29a1c940/plugin/resolvergen/resolver_test.go (about) 1 package resolvergen 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "syscall" 7 "testing" 8 9 "git.sr.ht/~sircmpwn/gqlgen/codegen" 10 "git.sr.ht/~sircmpwn/gqlgen/codegen/config" 11 "github.com/stretchr/testify/require" 12 "golang.org/x/tools/go/packages" 13 ) 14 15 func TestLayoutSingleFile(t *testing.T) { 16 _ = syscall.Unlink("testdata/singlefile/out/resolver.go") 17 18 cfg, err := config.LoadConfig("testdata/singlefile/gqlgen.yml") 19 require.NoError(t, err) 20 p := Plugin{} 21 22 require.NoError(t, cfg.Init()) 23 24 data, err := codegen.BuildData(cfg) 25 if err != nil { 26 panic(err) 27 } 28 29 require.NoError(t, p.GenerateCode(data)) 30 assertNoErrors(t, "git.sr.ht/~sircmpwn/gqlgen/plugin/resolvergen/testdata/singlefile/out") 31 } 32 33 func TestLayoutFollowSchema(t *testing.T) { 34 _ = syscall.Unlink("testdata/followschema/out/resolver.go") 35 36 cfg, err := config.LoadConfig("testdata/followschema/gqlgen.yml") 37 require.NoError(t, err) 38 p := Plugin{} 39 40 require.NoError(t, cfg.Init()) 41 42 data, err := codegen.BuildData(cfg) 43 if err != nil { 44 panic(err) 45 } 46 47 require.NoError(t, p.GenerateCode(data)) 48 assertNoErrors(t, "git.sr.ht/~sircmpwn/gqlgen/plugin/resolvergen/testdata/followschema/out") 49 50 b, err := ioutil.ReadFile("testdata/followschema/out/schema.resolvers.go") 51 require.NoError(t, err) 52 source := string(b) 53 54 require.Contains(t, source, "// CustomerResolverType.Resolver implementation") 55 require.Contains(t, source, "// CustomerResolverType.Name implementation") 56 require.Contains(t, source, "// AUserHelperFunction implementation") 57 } 58 59 func assertNoErrors(t *testing.T, pkg string) { 60 pkgs, err := packages.Load(&packages.Config{ 61 Mode: packages.NeedName | 62 packages.NeedFiles | 63 packages.NeedCompiledGoFiles | 64 packages.NeedImports | 65 packages.NeedTypes | 66 packages.NeedTypesSizes, 67 }, pkg) 68 if err != nil { 69 panic(err) 70 } 71 72 hasErrors := false 73 for _, pkg := range pkgs { 74 for _, err := range pkg.Errors { 75 hasErrors = true 76 fmt.Println(err.Pos + ":" + err.Msg) 77 } 78 } 79 if hasErrors { 80 t.Fatal("see compilation errors above") 81 } 82 }