Refactored SecurityRequirement **breaking change**

The v3 model is wrong and out of sync with the spec. It's been corrected, so the v2 and v2 model for SecurityRequirement have been collapsed down into a base model., they are the same data structures. This has allowed me to delete the complexity of sharing two different models for the same structure, by unifying the model correctly. I am not sure why I decided to change the v3 model, oh well, its been corrected. Long live swagger!
This commit is contained in:
Dave Shanley
2022-11-02 10:02:53 -04:00
parent 4b30fe3622
commit d27e66ff3d
21 changed files with 308 additions and 469 deletions

View File

@@ -5,8 +5,7 @@ package model
import (
"github.com/pb33f/libopenapi/datamodel/low"
"github.com/pb33f/libopenapi/datamodel/low/v2"
"github.com/pb33f/libopenapi/datamodel/low/v3"
"github.com/pb33f/libopenapi/datamodel/low/base"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"testing"
@@ -27,15 +26,15 @@ func TestCompareSecurityRequirement_V2(t *testing.T) {
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Nil(t, extChanges)
}
@@ -60,15 +59,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
@@ -92,15 +91,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&rDoc, &lDoc)
extChanges := CompareSecurityRequirement(&rDoc, &lDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
}
@@ -124,15 +123,15 @@ milk:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 4, extChanges.TotalChanges())
assert.Equal(t, 2, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
@@ -160,15 +159,15 @@ milk:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 2, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
@@ -195,15 +194,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
@@ -233,15 +232,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 2, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
@@ -267,15 +266,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 3, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
}
@@ -301,15 +300,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Nil(t, extChanges)
}
@@ -333,15 +332,15 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&rDoc, &lDoc)
extChanges := CompareSecurityRequirement(&rDoc, &lDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
@@ -369,167 +368,168 @@ biscuit:
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v2.SecurityRequirement
var rDoc v2.SecurityRequirement
var lDoc base.SecurityRequirement
var rDoc base.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV2(&lDoc, &rDoc)
extChanges := CompareSecurityRequirement(&lDoc, &rDoc)
assert.Equal(t, 2, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
}
func TestCompareSecurityRequirement_V3(t *testing.T) {
left := `- auth:
- pizza
- pie`
right := `- auth:
- pie
- pizza`
var lNode, rNode yaml.Node
_ = yaml.Unmarshal([]byte(left), &lNode)
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v3.SecurityRequirement
var rDoc v3.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
assert.Nil(t, extChanges)
}
func TestCompareSecurityRequirement_V3_AddARole(t *testing.T) {
left := `- auth:
- pizza
- pie`
right := `- auth:
- pie
- pizza
- beer`
var lNode, rNode yaml.Node
_ = yaml.Unmarshal([]byte(left), &lNode)
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v3.SecurityRequirement
var rDoc v3.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
}
func TestCompareSecurityRequirement_V3_RemoveRole(t *testing.T) {
left := `- auth:
- pizza
- pie`
right := `- auth:
- pie
- pizza
- beer`
var lNode, rNode yaml.Node
_ = yaml.Unmarshal([]byte(left), &lNode)
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v3.SecurityRequirement
var rDoc v3.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV3(&rDoc, &lDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
}
func TestCompareSecurityRequirement_V3_AddAReq(t *testing.T) {
left := `- auth:
- pizza
- pie`
right := `- auth:
- pie
- pizza
- coffee:
- filter
- espresso`
var lNode, rNode yaml.Node
_ = yaml.Unmarshal([]byte(left), &lNode)
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v3.SecurityRequirement
var rDoc v3.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 0, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
}
func TestCompareSecurityRequirement_V3_RemoveAReq(t *testing.T) {
left := `- coffee:
- filter
- espresso`
right := `- coffee:
- filter
- espresso
- auth:
- pizza
- pie`
var lNode, rNode yaml.Node
_ = yaml.Unmarshal([]byte(left), &lNode)
_ = yaml.Unmarshal([]byte(right), &rNode)
// create low level objects
var lDoc v3.SecurityRequirement
var rDoc v3.SecurityRequirement
_ = low.BuildModel(&lNode, &lDoc)
_ = low.BuildModel(&rNode, &rDoc)
_ = lDoc.Build(lNode.Content[0], nil)
_ = rDoc.Build(rNode.Content[0], nil)
// compare
extChanges := CompareSecurityRequirementV3(&rDoc, &lDoc)
assert.Equal(t, 1, extChanges.TotalChanges())
assert.Equal(t, 1, extChanges.TotalBreakingChanges())
assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
}
//
//func TestCompareSecurityRequirement_V3(t *testing.T) {
//
// left := `- auth:
// - pizza
// - pie`
//
// right := `- auth:
// - pie
// - pizza`
//
// var lNode, rNode yaml.Node
// _ = yaml.Unmarshal([]byte(left), &lNode)
// _ = yaml.Unmarshal([]byte(right), &rNode)
//
// // create low level objects
// var lDoc v3.SecurityRequirement
// var rDoc v3.SecurityRequirement
// _ = low.BuildModel(&lNode, &lDoc)
// _ = low.BuildModel(&rNode, &rDoc)
// _ = lDoc.Build(lNode.Content[0], nil)
// _ = rDoc.Build(rNode.Content[0], nil)
//
// // compare
// extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
// assert.Nil(t, extChanges)
//}
//
//func TestCompareSecurityRequirement_V3_AddARole(t *testing.T) {
//
// left := `- auth:
// - pizza
// - pie`
//
// right := `- auth:
// - pie
// - pizza
// - beer`
//
// var lNode, rNode yaml.Node
// _ = yaml.Unmarshal([]byte(left), &lNode)
// _ = yaml.Unmarshal([]byte(right), &rNode)
//
// // create low level objects
// var lDoc v3.SecurityRequirement
// var rDoc v3.SecurityRequirement
// _ = low.BuildModel(&lNode, &lDoc)
// _ = low.BuildModel(&rNode, &rDoc)
// _ = lDoc.Build(lNode.Content[0], nil)
// _ = rDoc.Build(rNode.Content[0], nil)
//
// // compare
// extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
// assert.Equal(t, 1, extChanges.TotalChanges())
// assert.Equal(t, 0, extChanges.TotalBreakingChanges())
// assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
//}
//
//func TestCompareSecurityRequirement_V3_RemoveRole(t *testing.T) {
//
// left := `- auth:
// - pizza
// - pie`
//
// right := `- auth:
// - pie
// - pizza
// - beer`
//
// var lNode, rNode yaml.Node
// _ = yaml.Unmarshal([]byte(left), &lNode)
// _ = yaml.Unmarshal([]byte(right), &rNode)
//
// // create low level objects
// var lDoc v3.SecurityRequirement
// var rDoc v3.SecurityRequirement
// _ = low.BuildModel(&lNode, &lDoc)
// _ = low.BuildModel(&rNode, &rDoc)
// _ = lDoc.Build(lNode.Content[0], nil)
// _ = rDoc.Build(rNode.Content[0], nil)
//
// // compare
// extChanges := CompareSecurityRequirementV3(&rDoc, &lDoc)
// assert.Equal(t, 1, extChanges.TotalChanges())
// assert.Equal(t, 1, extChanges.TotalBreakingChanges())
// assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
//}
//
//func TestCompareSecurityRequirement_V3_AddAReq(t *testing.T) {
//
// left := `- auth:
// - pizza
// - pie`
//
// right := `- auth:
// - pie
// - pizza
//- coffee:
// - filter
// - espresso`
//
// var lNode, rNode yaml.Node
// _ = yaml.Unmarshal([]byte(left), &lNode)
// _ = yaml.Unmarshal([]byte(right), &rNode)
//
// // create low level objects
// var lDoc v3.SecurityRequirement
// var rDoc v3.SecurityRequirement
// _ = low.BuildModel(&lNode, &lDoc)
// _ = low.BuildModel(&rNode, &rDoc)
// _ = lDoc.Build(lNode.Content[0], nil)
// _ = rDoc.Build(rNode.Content[0], nil)
//
// // compare
// extChanges := CompareSecurityRequirementV3(&lDoc, &rDoc)
// assert.Equal(t, 1, extChanges.TotalChanges())
// assert.Equal(t, 0, extChanges.TotalBreakingChanges())
// assert.Equal(t, ObjectAdded, extChanges.Changes[0].ChangeType)
//}
//
//func TestCompareSecurityRequirement_V3_RemoveAReq(t *testing.T) {
//
// left := `- coffee:
// - filter
// - espresso`
//
// right := `- coffee:
// - filter
// - espresso
//- auth:
// - pizza
// - pie`
//
// var lNode, rNode yaml.Node
// _ = yaml.Unmarshal([]byte(left), &lNode)
// _ = yaml.Unmarshal([]byte(right), &rNode)
//
// // create low level objects
// var lDoc v3.SecurityRequirement
// var rDoc v3.SecurityRequirement
// _ = low.BuildModel(&lNode, &lDoc)
// _ = low.BuildModel(&rNode, &rDoc)
// _ = lDoc.Build(lNode.Content[0], nil)
// _ = rDoc.Build(rNode.Content[0], nil)
//
// // compare
// extChanges := CompareSecurityRequirementV3(&rDoc, &lDoc)
// assert.Equal(t, 1, extChanges.TotalChanges())
// assert.Equal(t, 1, extChanges.TotalBreakingChanges())
// assert.Equal(t, ObjectRemoved, extChanges.Changes[0].ChangeType)
//}