github.com/6543-forks/go-swagger@v0.26.0/generator/build_test.go (about) 1 package generator_test 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "log" 7 "os" 8 "os/exec" 9 "path/filepath" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 16 "github.com/go-swagger/go-swagger/cmd/swagger/commands/generate" 17 flags "github.com/jessevdk/go-flags" 18 ) 19 20 const ( 21 defaultAPIPackage = "operations" 22 defaultClientPackage = "client" 23 defaultModelPackage = "models" 24 ) 25 26 func TestGenerateAndBuild(t *testing.T) { 27 defer func() { 28 log.SetOutput(os.Stdout) 29 }() 30 31 cases := map[string]struct { 32 spec string 33 }{ 34 "issue 844": { 35 "../fixtures/bugs/844/swagger.json", 36 }, 37 "issue 844 (with params)": { 38 "../fixtures/bugs/844/swagger-bis.json", 39 }, 40 "issue 1216": { 41 "../fixtures/bugs/1216/swagger.yml", 42 }, 43 "issue 2111": { 44 "../fixtures/bugs/2111/fixture-2111.yaml", 45 }, 46 "issue 2278": { 47 "../fixtures/bugs/2278/fixture-2278.yaml", 48 }, 49 } 50 51 for name, cas := range cases { 52 var captureLog bytes.Buffer 53 log.SetOutput(&captureLog) 54 55 t.Run(name, func(t *testing.T) { 56 spec := filepath.FromSlash(cas.spec) 57 58 generated, err := ioutil.TempDir(filepath.Dir(spec), "generated") 59 if err != nil { 60 t.Fatalf("TempDir()=%s", generated) 61 } 62 defer func() { _ = os.RemoveAll(generated) }() 63 64 err = newTestClient(spec, generated).Execute(nil) 65 require.NoErrorf(t, err, "Execute()=%s", err) 66 67 assert.Contains(t, strings.ToLower(captureLog.String()), "generation completed") 68 69 packages := filepath.Join(generated, "...") 70 71 p, err := exec.Command("go", "get", packages).CombinedOutput() 72 require.NoErrorf(t, err, "go get %s: %s\n%s", packages, err, p) 73 74 p, err = exec.Command("go", "build", packages).CombinedOutput() 75 require.NoErrorf(t, err, "go build %s: %s\n%s", packages, err, p) 76 }) 77 } 78 } 79 80 func newTestClient(input, output string) *generate.Client { 81 c := &generate.Client{} 82 c.DefaultScheme = "http" 83 c.DefaultProduces = "application/json" 84 c.Shared.Spec = flags.Filename(input) 85 c.Shared.Target = flags.Filename(output) 86 c.Operations.APIPackage = defaultAPIPackage 87 c.Models.ModelPackage = defaultModelPackage 88 c.ClientPackage = defaultClientPackage 89 return c 90 }