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 }
151
View as plain text