github.com/snyk/vervet/v3@v3.7.0/internal/generator/generator_test.go (about) 1 package generator 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 qt "github.com/frankban/quicktest" 11 12 "github.com/snyk/vervet/v3/config" 13 "github.com/snyk/vervet/v3/testdata" 14 ) 15 16 func setup(c *qt.C) { 17 cwd, err := os.Getwd() 18 c.Assert(err, qt.IsNil) 19 20 err = os.Chdir(testdata.Path(".")) 21 c.Assert(err, qt.IsNil) 22 c.Cleanup(func() { 23 err := os.Chdir(cwd) 24 c.Assert(err, qt.IsNil) 25 }) 26 } 27 28 func TestGenerators(t *testing.T) { 29 c := qt.New(t) 30 setup(c) 31 32 generated := c.TempDir() 33 configBuf, err := ioutil.ReadFile(testdata.Path(".vervet.yaml")) 34 c.Assert(err, qt.IsNil) 35 configBuf = bytes.ReplaceAll(configBuf, []byte("generated/{{"), []byte(generated+"/{{")) 36 proj, err := config.Load(bytes.NewBuffer(configBuf)) 37 c.Assert(err, qt.IsNil) 38 39 genMap, err := NewMap(proj, Debug(true)) 40 c.Assert(err, qt.IsNil) 41 42 scope := &VersionScope{ 43 API: "testdata", 44 Resource: "foo", 45 Version: "2021-09-01", 46 Stability: "beta", 47 } 48 49 // Smoke test generated files. Fixture test will catch the rest. 50 51 // Test a single-file generator with no data 52 readme := genMap["version-readme"] 53 err = readme.Run(scope) 54 c.Assert(err, qt.IsNil) 55 contents, err := ioutil.ReadFile(filepath.Join(generated, "foo/2021-09-01/README")) 56 c.Assert(err, qt.IsNil) 57 c.Log(string(contents)) 58 c.Assert(string(contents), qt.Equals, ` 59 This is a generated scaffold for version 2021-09-01~beta of the 60 foo resource in API testdata. 61 62 `[1:]) 63 64 // Generate an OpenAPI spec, used by the following generator 65 spec := genMap["version-spec"] 66 err = spec.Run(scope) 67 c.Assert(err, qt.IsNil) 68 69 // Test a multi-file generator with data 70 controller := genMap["version-controller"] 71 err = controller.Run(scope) 72 c.Assert(err, qt.IsNil) 73 contents, err = ioutil.ReadFile(filepath.Join(generated, "foo/2021-09-01/createFoo.ts")) 74 c.Assert(err, qt.IsNil) 75 c.Assert(string(contents), qt.Contains, `export const createFoo = async (`) 76 } 77 78 func TestVersionScope(t *testing.T) { 79 c := qt.New(t) 80 s := &VersionScope{ 81 API: "someapi", 82 Resource: "somerc", 83 Version: "abc", 84 } 85 c.Assert(s.validate(), qt.ErrorMatches, `invalid version "abc"`) 86 s = &VersionScope{ 87 API: "someapi", 88 Resource: "somerc", 89 Version: "2021-07-01", 90 Stability: "shaky", 91 } 92 c.Assert(s.validate(), qt.ErrorMatches, `invalid stability "shaky"`) 93 }