1package generator_test
2
3import (
4	"io/ioutil"
5	"os"
6	"os/exec"
7	"path/filepath"
8	"testing"
9
10	"github.com/go-swagger/go-swagger/cmd/swagger/commands/generate"
11	flags "github.com/jessevdk/go-flags"
12)
13
14func TestGenerateAndBuild(t *testing.T) {
15	cases := map[string]struct {
16		spec string
17	}{
18		"issue 844": {
19			"../fixtures/bugs/844/swagger.json",
20		},
21	}
22
23	for name, cas := range cases {
24		t.Run(name, func(t *testing.T) {
25			spec := filepath.FromSlash(cas.spec)
26
27			generated, err := ioutil.TempDir(filepath.Dir(spec), "generated")
28			if err != nil {
29				t.Fatalf("TempDir()=%s", generated)
30			}
31			defer os.RemoveAll(generated)
32
33			err = newTestClient(spec, generated).Execute(nil)
34			if err != nil {
35				t.Fatalf("Execute()=%s", err)
36			}
37
38			packages := filepath.Join(generated, "...")
39
40			if p, err := exec.Command("go", "get", packages).CombinedOutput(); err != nil {
41				t.Fatalf("go get %s: %s\n%s", packages, err, p)
42			}
43
44			if p, err := exec.Command("go", "build", packages).CombinedOutput(); err != nil {
45				t.Fatalf("go build %s: %s\n%s", packages, err, p)
46			}
47		})
48	}
49}
50
51func newTestClient(input, output string) *generate.Client {
52	c := &generate.Client{
53		DefaultScheme:   "http",
54		DefaultProduces: "application/json",
55	}
56	c.Spec = flags.Filename(input)
57	c.Target = flags.Filename(output)
58	c.APIPackage = "operations"
59	c.ModelPackage = "models"
60	c.ServerPackage = "restapi"
61	c.ClientPackage = "client"
62	return c
63}
64