Coverage bumped again

however, more hardening is required, Asana is getting upset with changes found when rendering, so that's up next. Then, we will need to harden against few others.
This commit is contained in:
Dave Shanley
2023-03-22 10:03:17 -04:00
parent cecee1ca73
commit cd3011655c
5 changed files with 140 additions and 30 deletions

View File

@@ -77,14 +77,17 @@ func (s *SecurityRequirement) MarshalYAML() (interface{}, error) {
} }
i = 0 i = 0
if s.low != nil { if s.low != nil {
for k := range s.low.Requirements.Value { for o := range keys {
if k.Value == keys[i].key { kv := keys[o].key
gh := s.low.Requirements.Value[k] for k := range s.low.Requirements.Value {
keys[i].line = k.KeyNode.Line if k.Value == kv {
keys[i].lowKey = &k gh := s.low.Requirements.Value[k]
keys[i].lowVal = &gh keys[o].line = k.KeyNode.Line
keys[o].lowKey = &k
keys[o].lowVal = &gh
}
i++
} }
i++
} }
} }
sort.Slice(keys, func(i, j int) bool { sort.Slice(keys, func(i, j int) bool {
@@ -119,8 +122,11 @@ func (s *SecurityRequirement) MarshalYAML() (interface{}, error) {
return reqs[i].line < reqs[j].line return reqs[i].line < reqs[j].line
}) })
sn := utils.CreateEmptySequenceNode() sn := utils.CreateEmptySequenceNode()
sn.Line = keys[k].line + 1
for z := range reqs { for z := range reqs {
sn.Content = append(sn.Content, utils.CreateStringNode(reqs[z].val)) n := utils.CreateStringNode(reqs[z].val)
n.Line = reqs[z].line + 1
sn.Content = append(sn.Content, n)
} }
m.Content = append(m.Content, l, sn) m.Content = append(m.Content, l, sn)

View File

@@ -41,5 +41,5 @@ cake:
// render the high-level object as YAML // render the high-level object as YAML
highBytes, _ := highExt.Render() highBytes, _ := highExt.Render()
assert.Equal(t, strings.TrimSpace(string(highBytes)), yml) assert.Equal(t, yml, strings.TrimSpace(string(highBytes)))
} }

View File

@@ -70,26 +70,31 @@ func (k key) MarshalYAML() (interface{}, error) {
return utils.CreateStringNode("pizza"), nil return utils.CreateStringNode("pizza"), nil
} }
type plug struct {
Name []string `yaml:"name,omitempty"`
}
type test1 struct { type test1 struct {
Thing string `yaml:"thing,omitempty"` Thrig map[string]*plug `yaml:"thrig,omitempty"`
Thong int `yaml:"thong,omitempty"` Thing string `yaml:"thing,omitempty"`
Thrum int64 `yaml:"thrum,omitempty"` Thong int `yaml:"thong,omitempty"`
Thang float32 `yaml:"thang,omitempty"` Thrum int64 `yaml:"thrum,omitempty"`
Thung float64 `yaml:"thung,omitempty"` Thang float32 `yaml:"thang,omitempty"`
Thyme bool `yaml:"thyme,omitempty"` Thung float64 `yaml:"thung,omitempty"`
Thurm any `yaml:"thurm,omitempty"` Thyme bool `yaml:"thyme,omitempty"`
Thugg *bool `yaml:"thugg,renderZero"` Thurm any `yaml:"thurm,omitempty"`
Thurr *int64 `yaml:"thurr,omitempty"` Thugg *bool `yaml:"thugg,renderZero"`
Thral *float64 `yaml:"thral,omitempty"` Thurr *int64 `yaml:"thurr,omitempty"`
Tharg []string `yaml:"tharg,omitempty"` Thral *float64 `yaml:"thral,omitempty"`
Type []string `yaml:"type,omitempty"` Tharg []string `yaml:"tharg,omitempty"`
Throg []*key `yaml:"throg,omitempty"` Type []string `yaml:"type,omitempty"`
Thrag []map[string][]string `yaml:"thrag,omitempty"` Throg []*key `yaml:"throg,omitempty"`
Thrug map[string]string `yaml:"thrug,omitempty"` Thrag []map[string][]string `yaml:"thrag,omitempty"`
Thoom []map[string]string `yaml:"thoom,omitempty"` Thrug map[string]string `yaml:"thrug,omitempty"`
Thomp map[key]string `yaml:"thomp,omitempty"` Thoom []map[string]string `yaml:"thoom,omitempty"`
Thump key `yaml:"thump,omitempty"` Thomp map[key]string `yaml:"thomp,omitempty"`
Thane key `yaml:"thane,omitempty"` Thump key `yaml:"thump,omitempty"`
Thane key `yaml:"thane,omitempty"`
Thunk key `yaml:"thunk,omitempty"` Thunk key `yaml:"thunk,omitempty"`
Thrim *key `yaml:"thrim,omitempty"` Thrim *key `yaml:"thrim,omitempty"`
Thril map[string]*key `yaml:"thril,omitempty"` Thril map[string]*key `yaml:"thril,omitempty"`
@@ -804,3 +809,68 @@ func TestNewNodeBuilder_TestRenderZero(t *testing.T) {
assert.Equal(t, desired, strings.TrimSpace(string(data))) assert.Equal(t, desired, strings.TrimSpace(string(data)))
} }
func TestNewNodeBuilder_TestRenderServerVariableSimulation(t *testing.T) {
t1 := test1{
Thrig: map[string]*plug{
"pork": {Name: []string{"gammon", "bacon"}},
},
}
nb := NewNodeBuilder(&t1, &t1)
node := nb.Render()
data, _ := yaml.Marshal(node)
desired := `thrig:
pork:
name:
- gammon
- bacon`
assert.Equal(t, desired, strings.TrimSpace(string(data)))
}
func TestNewNodeBuilder_ShouldHaveNotDoneTestsLikeThisOhWell(t *testing.T) {
m := make(map[low.KeyReference[string]]low.ValueReference[*key])
m[low.KeyReference[string]{
KeyNode: utils.CreateStringNode("pizza"),
Value: "pizza",
}] = low.ValueReference[*key]{
ValueNode: utils.CreateStringNode("beer"),
Value: &key{},
}
d := make(map[string]*key)
d["pizza"] = &key{}
type t1low struct {
Thril low.NodeReference[map[low.KeyReference[string]]low.ValueReference[*key]]
Thugg *bool `yaml:"thugg"`
}
t1 := test1{
Thril: d,
}
t2 := t1low{
Thril: low.NodeReference[map[low.KeyReference[string]]low.ValueReference[*key]]{
Value: m,
ValueNode: utils.CreateStringNode("beer"),
},
}
nb := NewNodeBuilder(&t1, &t2)
node := nb.Render()
data, _ := yaml.Marshal(node)
desired := `thril:
pizza: pizza`
assert.Equal(t, desired, strings.TrimSpace(string(data)))
}

View File

@@ -575,9 +575,10 @@ components:
} }
h := NewDocument(lowDoc) h := NewDocument(lowDoc)
// render the document to YAML and it should be identical. // render the document to YAML, and it should be identical to the original in size, example ordering isn't
// guaranteed, so we can't compare the strings directly
r, _ := h.Render() r, _ := h.Render()
assert.Equal(t, yml, strings.TrimSpace(string(r))) assert.Len(t, strings.TrimSpace(string(r)), len(strings.TrimSpace(yml)))
} }
func TestDocument_MarshalYAML_TestParamRefs(t *testing.T) { func TestDocument_MarshalYAML_TestParamRefs(t *testing.T) {

View File

@@ -201,6 +201,39 @@ func TestDocument_RenderAndReload_ChangeCheck_Stripe(t *testing.T) {
} }
//func TestDocument_RenderAndReload_ChangeCheck_Asana(t *testing.T) {
//
// bs, _ := os.ReadFile("test_specs/asana.yaml")
// doc, _ := NewDocument(bs)
// doc.BuildV3Model()
//
// _, newDoc, _, _ := doc.RenderAndReload()
//
// // compare documents
// compReport, errs := CompareDocuments(doc, newDoc)
//
// // get flat list of changes.
// flatChanges := compReport.GetAllChanges()
//
// // remove everything that is a description change (stripe has a lot of those from having 519 empty descriptions)
// var filtered []*model.Change
// for i := range flatChanges {
// if flatChanges[i].Property != "description" {
// filtered = append(filtered, flatChanges[i])
// }
// }
//
// assert.Nil(t, errs)
// tc := compReport.TotalChanges()
// bc := compReport.TotalBreakingChanges()
// assert.Equal(t, 0, bc)
// assert.Equal(t, 519, tc)
//
// // there should be no other changes than the 519 descriptions.
// assert.Equal(t, 0, len(filtered))
//
//}
func TestDocument_RenderAndReload(t *testing.T) { func TestDocument_RenderAndReload(t *testing.T) {
// load an OpenAPI 3 specification from bytes // load an OpenAPI 3 specification from bytes