-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Closed
Closed
Copy link
Labels
Description
Problem statement
There's two related issues. When a response ADDS a new schema properly, it is not being recorded. Only "Added schema definition" is. And when a response is REMOVES a new schema properly, it is panicking. I have examples below to demonstrate both.
Swagger specification
See code below
Steps to reproduce
Adding New Schema property
package main
import (
"fmt"
"io"
"github.com/go-openapi/spec"
"github.com/go-swagger/go-swagger/cmd/swagger/commands/diff"
)
func main() {
analyzer := diff.NewSpecAnalyser()
var spec1 spec.Swagger
err := spec1.UnmarshalJSON([]byte(`
{
"swagger": "2.0",
"info": {
"title": "Swagger Fixture",
"version": "1.0"
},
"paths": {
"/a/": {
"get": {
"responses": {
"200": {
"description": "200 response"
}
}
}
}
}
}
`))
if err != nil {
panic(err)
}
var spec2 spec.Swagger
err = spec2.UnmarshalJSON([]byte(`
{
"swagger": "2.0",
"info": {
"title": "Swagger Fixture",
"version": "1.0"
},
"paths": {
"/a/": {
"get": {
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/A1"
}
}
}
}
}
},
"definitions": {
"A1": {
"type": "object",
"properties": {
"id": {
"type": "integer"
}
}
}
}
}
`))
if err != nil {
panic(err)
}
err = analyzer.Analyse(&spec1, &spec2)
if err != nil {
panic(err)
}
r, err, _ := analyzer.Diffs.ReportAllDiffs(false)
if err != nil {
panic(err)
}
results, err := io.ReadAll(r)
if err != nil {
panic(err)
}
fmt.Println(string(results))
}
Output:
NON-BREAKING CHANGES:
=====================
Spec Definitions.A1 - Added a schema definition
compatibility test OK. No breaking changes identified.
Removing schema property
package main
import (
"fmt"
"io"
"github.com/go-openapi/spec"
"github.com/go-swagger/go-swagger/cmd/swagger/commands/diff"
)
func main() {
analyzer := diff.NewSpecAnalyser()
var spec1 spec.Swagger
err := spec1.UnmarshalJSON([]byte(`
{
"swagger": "2.0",
"info": {
"title": "Swagger Fixture",
"version": "1.0"
},
"paths": {
"/a/": {
"get": {
"responses": {
"200": {
"description": "200 response",
"schema": {
"$ref": "#/definitions/A1"
}
}
}
}
}
}
}
`))
if err != nil {
panic(err)
}
var spec2 spec.Swagger
err = spec2.UnmarshalJSON([]byte(`
{
"swagger": "2.0",
"info": {
"title": "Swagger Fixture",
"version": "1.0"
},
"paths": {
"/a/": {
"get": {
"responses": {
"200": {
"description": "200 response"
}
}
}
}
},
"definitions": {
"A1": {
"type": "object",
"properties": {
"id": {
"type": "integer"
}
}
}
}
}
`))
if err != nil {
panic(err)
}
err = analyzer.Analyse(&spec1, &spec2)
if err != nil {
panic(err)
}
r, err, _ := analyzer.Diffs.ReportAllDiffs(false)
if err != nil {
panic(err)
}
results, err := io.ReadAll(r)
if err != nil {
panic(err)
}
fmt.Println(string(results))
}
Output: it panics
Environment
swagger version: 2.0
go version: 1.20
OS: Mac
erraggy