github.com/operandinc/gqlgen@v0.16.1/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/operandinc/gqlgen/codegen/config/testdata", p.ImportPath())
    21  
    22  			require.Equal(t, "config_test_data", p.Pkg().Name())
    23  			require.Equal(t, "github.com/operandinc/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/operandinc/gqlgen/codegen/config/testdata", p.ImportPath())
    38  
    39  			require.Equal(t, "wololo", p.Pkg().Name())
    40  			require.Equal(t, "github.com/operandinc/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/operandinc/gqlgen/codegen/config/testdata", p.ImportPath())
    86  
    87  			require.Equal(t, "config_test_data", p.Pkg().Name())
    88  			require.Equal(t, "github.com/operandinc/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/operandinc/gqlgen/codegen/config/testdata", p.ImportPath())
   103  
   104  			require.Equal(t, "wololo", p.Pkg().Name())
   105  			require.Equal(t, "github.com/operandinc/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/operandinc/gqlgen/codegen/config/testdata", p.ImportPath())
   120  
   121  			require.Equal(t, "config_test_data", p.Pkg().Name())
   122  			require.Equal(t, "github.com/operandinc/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  }