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  }