github.com/robertoortis/fastgql@v0.7.2/codegen/config_test.go (about) 1 package codegen 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 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, SchemaFilenames{"inner"}, cfg.SchemaFilename) 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, SchemaFilenames{"outer"}, cfg.SchemaFilename) 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 TestReferencedPackages(t *testing.T) { 63 t.Run("valid", func(t *testing.T) { 64 tm := TypeMap{ 65 "Foo": {Model: "github.com/test.Foo"}, 66 "Bar": {Model: "github.com/test.Bar"}, 67 "Baz": {Model: "github.com/otherpkg.Baz"}, 68 "Map": {Model: "map[string]interface{}"}, 69 "SkipResolver": { 70 Fields: map[string]TypeMapField{ 71 "field": {Resolver: false}, 72 }, 73 }, 74 } 75 76 pkgs := tm.referencedPackages() 77 78 assert.Equal(t, []string{"github.com/test", "github.com/otherpkg"}, pkgs) 79 }) 80 81 }