github.com/josephspurrier/go-swagger@v0.2.1-0.20221129144919-1f672a142a00/cmd/swagger/commands/flatten_test.go (about) 1 package commands 2 3 import ( 4 "io" 5 "log" 6 "os" 7 "path/filepath" 8 "testing" 9 10 flags "github.com/jessevdk/go-flags" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 type executable interface { 15 Execute([]string) error 16 } 17 18 func testValidRefs(t *testing.T, v executable) { 19 log.SetOutput(io.Discard) 20 defer log.SetOutput(os.Stdout) 21 22 specDoc := filepath.Join(fixtureBase, "expansion", "invalid-refs.json") 23 result := v.Execute([]string{specDoc}) 24 assert.Error(t, result) 25 } 26 27 func testRequireParam(t *testing.T, v executable) { 28 log.SetOutput(io.Discard) 29 defer log.SetOutput(os.Stdout) 30 31 result := v.Execute([]string{}) 32 assert.Error(t, result) 33 34 result = v.Execute([]string{"nowhere.json"}) 35 assert.Error(t, result) 36 } 37 38 func getOutput(t *testing.T, specDoc, prefix, filename string) (string, string) { 39 outDir, err := os.MkdirTemp(filepath.Dir(specDoc), "flatten") 40 if !assert.NoError(t, err) { 41 t.FailNow() 42 } 43 return outDir, filepath.Join(outDir, filename) 44 } 45 46 func testProduceOutput(t *testing.T, v executable, specDoc, output string) { 47 log.SetOutput(io.Discard) 48 defer log.SetOutput(os.Stdout) 49 50 result := v.Execute([]string{specDoc}) 51 assert.NoError(t, result) 52 _, exists := os.Stat(output) 53 assert.True(t, !os.IsNotExist(exists)) 54 } 55 56 // Commands requires at least one arg 57 func TestCmd_Flatten(t *testing.T) { 58 v := &FlattenSpec{} 59 testRequireParam(t, v) 60 } 61 62 func TestCmd_Flatten_Default(t *testing.T) { 63 specDoc := filepath.Join(fixtureBase, "bugs", "1536", "fixture-1536.yaml") 64 outDir, output := getOutput(t, specDoc, "flatten", "fixture-1536-flat-minimal.json") 65 defer os.RemoveAll(outDir) 66 v := &FlattenSpec{ 67 Format: "json", 68 Compact: true, 69 Output: flags.Filename(output), 70 } 71 testProduceOutput(t, v, specDoc, output) 72 } 73 74 func TestCmd_Flatten_Error(t *testing.T) { 75 v := &FlattenSpec{} 76 testValidRefs(t, v) 77 }