func TestGenerateSwaggerYAML(t *testing.T) { seed := spec.Swagger{} seed.Host = "testapi.my" seed.Produces = []string{"application/json"} seed.Consumes = []string{"application/json"} seed.Schemes = []string{"http"} seed.Info = &spec.Info{} seed.Info.Description = "Our very little example API with 2 endpoints" seed.Info.Title = "Example API" seed.Info.Version = "0.1" seed.BasePath = "/" generator := NewSwaggerGeneratorYAML(seed) tests := getTests() doc, err := generator.Generate(tests) assert.NoError(t, err, "could not generate docs") // checking validity of generated swagger doc yamlMap := map[interface{}]interface{}{} err = yaml.Unmarshal(doc, &yamlMap) assert.NoError(t, err, "could not unmarshal generated doc into map") rawJSON, err := fmts.YAMLToJSON(yamlMap) assert.NoError(t, err) swaggerDoc, err := loads.Analyzed(rawJSON, "") assert.NoError(t, err) err = validate.Spec(swaggerDoc, strfmt.Default) assert.NoError(t, err) // checking equality of generated and expected doc actual := map[interface{}]interface{}{} err = yaml.Unmarshal(doc, &actual) assert.NoError(t, err, "could not unmarshal generated doc into map") fixture, err := ioutil.ReadFile("fixtures/swagger/swagger.yml") assert.NoError(t, err, "could not read fixture file") expected := map[interface{}]interface{}{} err = yaml.Unmarshal(fixture, &expected) assert.NoError(t, err, "could not unmarshal fixture into map") assert.Equal(t, expected, actual) }
// Execute validates the spec func (c *ValidateSpec) Execute(args []string) error { if len(args) == 0 { return errors.New("The validate command requires the swagger document url to be specified") } swaggerDoc := args[0] specDoc, err := loads.Spec(swaggerDoc) if err != nil { log.Fatalln(err) } result := validate.Spec(specDoc, strfmt.Default) if result == nil { fmt.Printf("The swagger spec at %q is valid against swagger specification %s\n", swaggerDoc, specDoc.Version()) } else { str := fmt.Sprintf("The swagger spec at %q is invalid against swagger specification %s. see errors :\n", swaggerDoc, specDoc.Version()) for _, desc := range result.(*swaggererrors.CompositeError).Errors { str += fmt.Sprintf("- %s\n", desc) } return errors.New(str) } return nil }