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