github.com/go-swagger/go-swagger@v0.31.0/generator/build_test.go (about) 1 package generator_test 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 flags "github.com/jessevdk/go-flags" 9 "github.com/stretchr/testify/require" 10 11 "github.com/go-swagger/go-swagger/cmd/swagger/commands/generate" 12 "github.com/go-swagger/go-swagger/generator/internal/gentest" 13 ) 14 15 const ( 16 defaultAPIPackage = "operations" 17 defaultClientPackage = "client" 18 defaultModelPackage = "models" 19 ) 20 21 func TestGenerateAndBuild(t *testing.T) { 22 // This test generates and actually compiles the output 23 // of generated clients. 24 // 25 // We run this in parallel now. Therefore it is no more 26 // possible to assert the output on stdout. 27 // 28 // NOTE: test cases are randomized (map) 29 t.Parallel() 30 defer gentest.DiscardOutput()() 31 32 cases := map[string]struct { 33 spec string 34 }{ 35 "issue 844": { 36 "../fixtures/bugs/844/swagger.json", 37 }, 38 "issue 844 (with params)": { 39 "../fixtures/bugs/844/swagger-bis.json", 40 }, 41 "issue 1216": { 42 "../fixtures/bugs/1216/swagger.yml", 43 }, 44 "issue 2111": { 45 "../fixtures/bugs/2111/fixture-2111.yaml", 46 }, 47 "issue 2278": { 48 "../fixtures/bugs/2278/fixture-2278.yaml", 49 }, 50 "issue 2163": { 51 "../fixtures/enhancements/2163/fixture-2163.yaml", 52 }, 53 "issue 1771": { 54 "../fixtures/enhancements/1771/fixture-1771.yaml", 55 }, 56 } 57 58 t.Run("build client", func(t *testing.T) { 59 for name, toPin := range cases { 60 cas := toPin 61 62 t.Run(name, func(t *testing.T) { 63 t.Parallel() 64 spec := filepath.FromSlash(cas.spec) 65 66 generated, err := os.MkdirTemp(filepath.Dir(spec), "generated") 67 require.NoErrorf(t, err, "TempDir()=%s", generated) 68 t.Cleanup(func() { _ = os.RemoveAll(generated) }) 69 70 require.NoErrorf(t, newTestClient(spec, generated).Execute(nil), "Execute()=%s", err) 71 72 packages := filepath.Join(generated, "...") 73 74 t.Run("should go get imports", gentest.GoExecInDir("", "get")) 75 t.Run("should build client", gentest.GoExecInDir("", "build", packages)) 76 }) 77 } 78 }) 79 } 80 81 func newTestClient(input, output string) *generate.Client { 82 c := &generate.Client{} 83 c.DefaultScheme = "http" 84 c.DefaultProduces = "application/json" 85 c.Shared.Spec = flags.Filename(input) 86 c.Shared.Target = flags.Filename(output) 87 c.Operations.APIPackage = defaultAPIPackage 88 c.Models.ModelPackage = defaultModelPackage 89 c.ClientPackage = defaultClientPackage 90 return c 91 }