github.com/kaisawind/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  }