github.com/senomas/gqlgen@v0.17.11-0.20220626120754-9aee61b0716a/codegen/config/resolver_test.go (about) 1 package config 2 3 import ( 4 "path/filepath" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestResolverConfig(t *testing.T) { 11 t.Run("single-file", func(t *testing.T) { 12 t.Run("when given just a filename", func(t *testing.T) { 13 p := ResolverConfig{Filename: "testdata/example.go"} 14 require.True(t, p.IsDefined()) 15 16 require.NoError(t, p.Check()) 17 require.NoError(t, p.Check()) 18 19 require.Equal(t, p.Package, "config_test_data") 20 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.ImportPath()) 21 22 require.Equal(t, "config_test_data", p.Pkg().Name()) 23 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.Pkg().Path()) 24 25 require.Contains(t, filepath.ToSlash(p.Filename), "codegen/config/testdata/example.go") 26 require.Contains(t, filepath.ToSlash(p.Dir()), "codegen/config/testdata") 27 }) 28 29 t.Run("when given both", func(t *testing.T) { 30 p := ResolverConfig{Filename: "testdata/example.go", Package: "wololo"} 31 require.True(t, p.IsDefined()) 32 33 require.NoError(t, p.Check()) 34 require.NoError(t, p.Check()) 35 36 require.Equal(t, p.Package, "wololo") 37 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.ImportPath()) 38 39 require.Equal(t, "wololo", p.Pkg().Name()) 40 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.Pkg().Path()) 41 42 require.Contains(t, filepath.ToSlash(p.Filename), "codegen/config/testdata/example.go") 43 require.Contains(t, filepath.ToSlash(p.Dir()), "codegen/config/testdata") 44 }) 45 46 t.Run("when given nothing", func(t *testing.T) { 47 p := ResolverConfig{} 48 require.False(t, p.IsDefined()) 49 50 require.EqualError(t, p.Check(), "filename must be specified with layout=single-file") 51 52 require.Equal(t, "", p.Package) 53 require.Equal(t, "", p.ImportPath()) 54 55 require.Nil(t, p.Pkg()) 56 57 require.Equal(t, "", p.Filename) 58 require.Equal(t, "", p.Dir()) 59 }) 60 61 t.Run("when given invalid filename", func(t *testing.T) { 62 p := ResolverConfig{Filename: "wololo.sql"} 63 require.True(t, p.IsDefined()) 64 65 require.EqualError(t, p.Check(), "filename should be path to a go source file with layout=single-file") 66 }) 67 68 t.Run("when package includes a filename", func(t *testing.T) { 69 p := ResolverConfig{Filename: "foo.go", Package: "foo/foo.go"} 70 require.True(t, p.IsDefined()) 71 72 require.EqualError(t, p.Check(), "package should be the output package name only, do not include the output filename") 73 }) 74 }) 75 76 t.Run("follow-schema", func(t *testing.T) { 77 t.Run("when given just a dir", func(t *testing.T) { 78 p := ResolverConfig{Layout: LayoutFollowSchema, DirName: "testdata"} 79 require.True(t, p.IsDefined()) 80 81 require.NoError(t, p.Check()) 82 require.NoError(t, p.Check()) 83 84 require.Equal(t, p.Package, "config_test_data") 85 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.ImportPath()) 86 87 require.Equal(t, "config_test_data", p.Pkg().Name()) 88 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.Pkg().Path()) 89 90 require.Contains(t, filepath.ToSlash(p.Filename), "codegen/config/testdata/resolver.go") 91 require.Contains(t, p.Dir(), "codegen/config/testdata") 92 }) 93 94 t.Run("when given dir and package name", func(t *testing.T) { 95 p := ResolverConfig{Layout: LayoutFollowSchema, DirName: "testdata", Package: "wololo"} 96 require.True(t, p.IsDefined()) 97 98 require.NoError(t, p.Check()) 99 require.NoError(t, p.Check()) 100 101 require.Equal(t, p.Package, "wololo") 102 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.ImportPath()) 103 104 require.Equal(t, "wololo", p.Pkg().Name()) 105 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.Pkg().Path()) 106 107 require.Contains(t, filepath.ToSlash(p.Filename), "codegen/config/testdata/resolver.go") 108 require.Contains(t, p.Dir(), "codegen/config/testdata") 109 }) 110 111 t.Run("when given a filename", func(t *testing.T) { 112 p := ResolverConfig{Layout: LayoutFollowSchema, DirName: "testdata", Filename: "testdata/asdf.go"} 113 require.True(t, p.IsDefined()) 114 115 require.NoError(t, p.Check()) 116 require.NoError(t, p.Check()) 117 118 require.Equal(t, p.Package, "config_test_data") 119 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.ImportPath()) 120 121 require.Equal(t, "config_test_data", p.Pkg().Name()) 122 require.Equal(t, "github.com/99designs/gqlgen/codegen/config/testdata", p.Pkg().Path()) 123 124 require.Contains(t, filepath.ToSlash(p.Filename), "codegen/config/testdata/asdf.go") 125 require.Contains(t, p.Dir(), "codegen/config/testdata") 126 }) 127 128 t.Run("when given nothing", func(t *testing.T) { 129 p := ResolverConfig{Layout: LayoutFollowSchema} 130 require.False(t, p.IsDefined()) 131 132 require.EqualError(t, p.Check(), "dirname must be specified with layout=follow-schema") 133 134 require.Equal(t, "", p.Package) 135 require.Equal(t, "", p.ImportPath()) 136 137 require.Nil(t, p.Pkg()) 138 139 require.Equal(t, "", p.Filename) 140 require.Equal(t, "", p.Dir()) 141 }) 142 }) 143 144 t.Run("invalid layout", func(t *testing.T) { 145 p := ResolverConfig{Layout: "pies", Filename: "asdf.go"} 146 require.True(t, p.IsDefined()) 147 148 require.EqualError(t, p.Check(), "invalid layout pies. must be single-file or follow-schema") 149 }) 150 }