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  }