github.com/codyleyhan/gqlgen@v0.4.4/codegen/config_test.go (about) 1 package codegen 2 3 import ( 4 "go/build" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestLoadConfig(t *testing.T) { 14 t.Run("config does not exist", func(t *testing.T) { 15 _, err := LoadConfig("doesnotexist.yml") 16 require.Error(t, err) 17 }) 18 19 t.Run("malformed config", func(t *testing.T) { 20 _, err := LoadConfig("testdata/cfg/malformedconfig.yml") 21 require.EqualError(t, err, "unable to parse config: yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `asdf` into codegen.Config") 22 }) 23 24 t.Run("unknown keys", func(t *testing.T) { 25 _, err := LoadConfig("testdata/cfg/unknownkeys.yml") 26 require.EqualError(t, err, "unable to parse config: yaml: unmarshal errors:\n line 2: field unknown not found in type codegen.Config") 27 }) 28 } 29 30 func TestLoadDefaultConfig(t *testing.T) { 31 testDir, err := os.Getwd() 32 require.NoError(t, err) 33 var cfg *Config 34 35 t.Run("will find closest match", func(t *testing.T) { 36 err = os.Chdir(filepath.Join(testDir, "testdata", "cfg", "subdir")) 37 require.NoError(t, err) 38 39 cfg, err = LoadConfigFromDefaultLocations() 40 require.NoError(t, err) 41 require.Equal(t, cfg.SchemaFilename, "inner") 42 }) 43 44 t.Run("will find config in parent dirs", func(t *testing.T) { 45 err = os.Chdir(filepath.Join(testDir, "testdata", "cfg", "otherdir")) 46 require.NoError(t, err) 47 48 cfg, err = LoadConfigFromDefaultLocations() 49 require.NoError(t, err) 50 require.Equal(t, cfg.SchemaFilename, "outer") 51 }) 52 53 t.Run("will return error if config doesn't exist", func(t *testing.T) { 54 err = os.Chdir(testDir) 55 require.NoError(t, err) 56 57 cfg, err = LoadConfigFromDefaultLocations() 58 require.True(t, os.IsNotExist(err)) 59 }) 60 } 61 62 func Test_fullPackageName(t *testing.T) { 63 origBuildContext := build.Default 64 defer func() { build.Default = origBuildContext }() 65 66 t.Run("gopath longer than package name", func(t *testing.T) { 67 p := PackageConfig{Filename: "/b/src/y/foo/bar/baz.go"} 68 build.Default.GOPATH = "/a/src/xxxxxxxxxxxxxxxxxxxxxxxx:/b/src/y" 69 var got string 70 ok := assert.NotPanics(t, func() { got = p.ImportPath() }) 71 if ok { 72 assert.Equal(t, "/b/src/y/foo/bar", got) 73 } 74 }) 75 t.Run("stop searching on first hit", func(t *testing.T) { 76 p := PackageConfig{Filename: "/a/src/x/foo/bar/baz.go"} 77 build.Default.GOPATH = "/a/src/x:/b/src/y" 78 var got string 79 ok := assert.NotPanics(t, func() { got = p.ImportPath() }) 80 if ok { 81 assert.Equal(t, "/a/src/x/foo/bar", got) 82 } 83 }) 84 }