...
1 package antest
2
3 import (
4 "encoding/json"
5 "flag"
6 "os"
7 "path/filepath"
8 "sync"
9 "testing"
10
11 "github.com/go-openapi/spec"
12 "github.com/go-openapi/swag"
13 "github.com/stretchr/testify/require"
14 )
15
16 var (
17 oncePathLoader sync.Once
18 enableLongTests bool
19 )
20
21 func init() {
22 if flag.Lookup("enable-long") == nil {
23 flag.BoolVar(&enableLongTests, "enable-long", false, "enable long runnning tests")
24 }
25 }
26
27
28 func LongTestsEnabled() bool {
29 return enableLongTests
30 }
31
32 func initPathLoader() {
33 spec.PathLoader = func(path string) (json.RawMessage, error) {
34 ext := filepath.Ext(path)
35 if ext == ".yml" || ext == ".yaml" {
36 return swag.YAMLDoc(path)
37 }
38
39 data, err := swag.LoadFromFileOrHTTP(path)
40 if err != nil {
41 return nil, err
42 }
43
44 return json.RawMessage(data), nil
45 }
46 }
47
48
49 func LoadSpec(path string) (*spec.Swagger, error) {
50 oncePathLoader.Do(initPathLoader)
51
52 data, err := spec.PathLoader(path)
53 if err != nil {
54 return nil, err
55 }
56
57 var sw spec.Swagger
58 if err := json.Unmarshal(data, &sw); err != nil {
59 return nil, err
60 }
61
62 return &sw, nil
63 }
64
65
66 func LoadOrFail(t testing.TB, relative string) *spec.Swagger {
67 cwd, _ := os.Getwd()
68 sp, err := LoadSpec(filepath.Join(cwd, relative))
69 require.NoError(t, err)
70
71 return sp
72 }
73
74
75 func AsJSON(t testing.TB, in interface{}) string {
76 bbb, err := json.MarshalIndent(in, "", " ")
77 require.NoError(t, err)
78
79 return string(bbb)
80 }
81
View as plain text