github.com/youyuanwu/go-swagger@v0.19.0/cmd/swagger/commands/generate/spec_test.go (about) 1 package generate 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "os" 7 "testing" 8 9 "github.com/go-swagger/go-swagger/scan" 10 "github.com/jessevdk/go-flags" 11 "github.com/stretchr/testify/assert" 12 "gopkg.in/yaml.v2" 13 ) 14 15 const ( 16 basePath = "../../../../fixtures/goparsing/spec" 17 jsonResultFile = basePath + "/api_spec.json" 18 yamlResultFile = basePath + "/api_spec.yml" 19 ) 20 21 func TestSpecFileExecute(t *testing.T) { 22 files := []string{"", "spec.json", "spec.yml", "spec.yaml"} 23 for _, outputFile := range files { 24 spec := &SpecFile{ 25 BasePath: basePath, 26 Output: flags.Filename(outputFile), 27 } 28 29 err := spec.Execute(nil) 30 assert.NoError(t, err) 31 if outputFile != "" { 32 os.Remove(outputFile) 33 } 34 } 35 } 36 37 func TestGenerateJSONSpec(t *testing.T) { 38 opts := scan.Opts{ 39 BasePath: basePath, 40 } 41 42 swspec, err := scan.Application(opts) 43 assert.NoError(t, err) 44 45 data, err := marshalToJSONFormat(swspec, true) 46 assert.NoError(t, err) 47 48 expected, err := ioutil.ReadFile(jsonResultFile) 49 assert.NoError(t, err) 50 51 verifyJSONData(t, data, expected) 52 } 53 54 func TestGenerateYAMLSpec(t *testing.T) { 55 opts := scan.Opts{ 56 BasePath: basePath, 57 } 58 59 swspec, err := scan.Application(opts) 60 assert.NoError(t, err) 61 62 data, err := marshalToYAMLFormat(swspec) 63 assert.NoError(t, err) 64 65 expected, err := ioutil.ReadFile(yamlResultFile) 66 assert.NoError(t, err) 67 68 verifyYAMLData(t, data, expected) 69 } 70 71 func verifyJSONData(t *testing.T, data, expectedJSON []byte) { 72 var got interface{} 73 var expected interface{} 74 75 err := json.Unmarshal(data, &got) 76 assert.NoError(t, err) 77 78 err = json.Unmarshal(expectedJSON, &expected) 79 assert.NoError(t, err) 80 81 if !assert.ObjectsAreEqual(got, expected) { 82 assert.Fail(t, "marshaled JSON data doesn't equal expected JSON data") 83 } 84 } 85 86 func verifyYAMLData(t *testing.T, data, expectedYAML []byte) { 87 var got interface{} 88 var expected interface{} 89 90 err := yaml.Unmarshal(data, &got) 91 assert.NoError(t, err) 92 93 err = yaml.Unmarshal(expectedYAML, &expected) 94 assert.NoError(t, err) 95 96 if !assert.ObjectsAreEqual(got, expected) { 97 assert.Fail(t, "marshaled YAML data doesn't equal expected YAML data") 98 } 99 }