Workaround to test error in ExampleNewDocument_modifyAndReRender.

Revert change to `Scopes` back to `map` type.
`orderedmap.Map` is not properly marshaling this one field from YAML.
This commit is contained in:
Shawn Poulson
2023-08-31 16:04:43 -04:00
parent 94adb8c064
commit dabfafa9ee
7 changed files with 27 additions and 31 deletions

View File

@@ -147,7 +147,6 @@ func (n *NodeBuilder) add(key string, i int) {
// create a new node entry // create a new node entry
nodeEntry := &NodeEntry{Tag: tagName, Key: key} nodeEntry := &NodeEntry{Tag: tagName, Key: key}
nodeEntry.RenderZero = renderZeroFlag nodeEntry.RenderZero = renderZeroFlag
switch value.Kind() { switch value.Kind() {
case reflect.Float64, reflect.Float32: case reflect.Float64, reflect.Float32:
nodeEntry.Value = value.Float() nodeEntry.Value = value.Float()

View File

@@ -292,8 +292,8 @@ func TestNewDocument_Components_SecuritySchemes(t *testing.T) {
assert.Equal(t, "an oAuth security scheme", oAuth.Description) assert.Equal(t, "an oAuth security scheme", oAuth.Description)
assert.Equal(t, 375, oAuth.GoLow().Description.ValueNode.Line) assert.Equal(t, 375, oAuth.GoLow().Description.ValueNode.Line)
assert.Equal(t, 20, oAuth.GoLow().Description.ValueNode.Column) assert.Equal(t, 20, oAuth.GoLow().Description.ValueNode.Column)
assert.Equal(t, 2, orderedmap.Len(oAuth.Flows.Implicit.Scopes)) assert.Equal(t, 2, len(oAuth.Flows.Implicit.Scopes))
assert.Equal(t, "read all burgers", oAuth.Flows.Implicit.Scopes.GetOrZero("read:burgers")) assert.Equal(t, "read all burgers", oAuth.Flows.Implicit.Scopes["read:burgers"])
assert.Equal(t, "https://pb33f.io/oauth", oAuth.Flows.AuthorizationCode.AuthorizationUrl) assert.Equal(t, "https://pb33f.io/oauth", oAuth.Flows.AuthorizationCode.AuthorizationUrl)
// check the lowness is low. // check the lowness is low.

View File

@@ -6,7 +6,6 @@ package v3
import ( import (
"github.com/pb33f/libopenapi/datamodel/high" "github.com/pb33f/libopenapi/datamodel/high"
low "github.com/pb33f/libopenapi/datamodel/low/v3" low "github.com/pb33f/libopenapi/datamodel/low/v3"
"github.com/pb33f/libopenapi/orderedmap"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@@ -16,7 +15,8 @@ type OAuthFlow struct {
AuthorizationUrl string `json:"authorizationUrl,omitempty" yaml:"authorizationUrl,omitempty"` AuthorizationUrl string `json:"authorizationUrl,omitempty" yaml:"authorizationUrl,omitempty"`
TokenUrl string `json:"tokenUrl,omitempty" yaml:"tokenUrl,omitempty"` TokenUrl string `json:"tokenUrl,omitempty" yaml:"tokenUrl,omitempty"`
RefreshUrl string `json:"refreshUrl,omitempty" yaml:"refreshUrl,omitempty"` RefreshUrl string `json:"refreshUrl,omitempty" yaml:"refreshUrl,omitempty"`
Scopes orderedmap.Map[string, string] `json:"scopes,omitempty" yaml:"scopes,omitempty"` // FIXME: Scopes must be converted to orderedmap.Map. Fix unmarshaling issue causing omitted `scopes` stanza on parsing.
Scopes map[string]string `json:"scopes,omitempty" yaml:"scopes,omitempty"`
Extensions map[string]any `json:"-" yaml:"-"` Extensions map[string]any `json:"-" yaml:"-"`
low *low.OAuthFlow low *low.OAuthFlow
} }
@@ -28,9 +28,9 @@ func NewOAuthFlow(flow *low.OAuthFlow) *OAuthFlow {
o.TokenUrl = flow.TokenUrl.Value o.TokenUrl = flow.TokenUrl.Value
o.AuthorizationUrl = flow.AuthorizationUrl.Value o.AuthorizationUrl = flow.AuthorizationUrl.Value
o.RefreshUrl = flow.RefreshUrl.Value o.RefreshUrl = flow.RefreshUrl.Value
scopes := orderedmap.New[string, string]() scopes := map[string]string{}
for pair := orderedmap.First(flow.Scopes.Value); pair != nil; pair = pair.Next() { for k, v := range flow.Scopes.Value {
scopes.Set(pair.Key().Value, pair.Value().Value) scopes[k.Value] = v.Value
} }
o.Scopes = scopes o.Scopes = scopes
o.Extensions = high.ExtractExtensions(flow.Extensions) o.Extensions = high.ExtractExtensions(flow.Extensions)

View File

@@ -7,7 +7,6 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/pb33f/libopenapi/orderedmap"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@@ -17,10 +16,10 @@ func TestOAuthFlow_MarshalYAML(t *testing.T) {
AuthorizationUrl: "https://pb33f.io", AuthorizationUrl: "https://pb33f.io",
TokenUrl: "https://pb33f.io/token", TokenUrl: "https://pb33f.io/token",
RefreshUrl: "https://pb33f.io/refresh", RefreshUrl: "https://pb33f.io/refresh",
Scopes: orderedmap.ToOrderedMap(map[string]string{ Scopes: map[string]string{
"chicken": "nuggets", "chicken": "nuggets",
"beefy": "soup", "beefy": "soup",
}), },
} }
rend, _ := oflow.Render() rend, _ := oflow.Render()

View File

@@ -82,7 +82,7 @@ clientCredentials:
CHIP:CHOP: microwave a sock` CHIP:CHOP: microwave a sock`
// now modify it and render it back out, and it should be identical! // now modify it and render it back out, and it should be identical!
r.ClientCredentials.Scopes.Set("CHIP:CHOP", "microwave a sock") r.ClientCredentials.Scopes["CHIP:CHOP"] = "microwave a sock"
rBytes, _ = r.Render() rBytes, _ = r.Render()
assert.Equal(t, modified, strings.TrimSpace(string(rBytes))) assert.Equal(t, modified, strings.TrimSpace(string(rBytes)))

View File

@@ -11,7 +11,6 @@ import (
"github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low"
"github.com/pb33f/libopenapi/index" "github.com/pb33f/libopenapi/index"
"github.com/pb33f/libopenapi/orderedmap"
"github.com/pb33f/libopenapi/utils" "github.com/pb33f/libopenapi/utils"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@@ -97,7 +96,7 @@ type OAuthFlow struct {
AuthorizationUrl low.NodeReference[string] AuthorizationUrl low.NodeReference[string]
TokenUrl low.NodeReference[string] TokenUrl low.NodeReference[string]
RefreshUrl low.NodeReference[string] RefreshUrl low.NodeReference[string]
Scopes low.NodeReference[orderedmap.Map[low.KeyReference[string], low.ValueReference[string]]] Scopes low.NodeReference[map[low.KeyReference[string]]low.ValueReference[string]]
Extensions map[low.KeyReference[string]]low.ValueReference[any] Extensions map[low.KeyReference[string]]low.ValueReference[any]
*low.Reference *low.Reference
} }
@@ -109,7 +108,7 @@ func (o *OAuthFlow) GetExtensions() map[low.KeyReference[string]]low.ValueRefere
// FindScope attempts to locate a scope using a specified name. // FindScope attempts to locate a scope using a specified name.
func (o *OAuthFlow) FindScope(scope string) *low.ValueReference[string] { func (o *OAuthFlow) FindScope(scope string) *low.ValueReference[string] {
return low.FindItemInOrderedMap[string](scope, o.Scopes.Value) return low.FindItemInMap[string](scope, o.Scopes.Value)
} }
// FindExtension attempts to locate an extension with a specified key // FindExtension attempts to locate an extension with a specified key
@@ -136,10 +135,10 @@ func (o *OAuthFlow) Hash() [32]byte {
if !o.RefreshUrl.IsEmpty() { if !o.RefreshUrl.IsEmpty() {
f = append(f, o.RefreshUrl.Value) f = append(f, o.RefreshUrl.Value)
} }
keys := make([]string, orderedmap.Len(o.Scopes.Value)) keys := make([]string, len(o.Scopes.Value))
z := 0 z := 0
for pair := orderedmap.First(o.Scopes.Value); pair != nil; pair = pair.Next() { for k, v := range o.Scopes.Value {
keys[z] = fmt.Sprintf("%s-%s", pair.Key().Value, sha256.Sum256([]byte(fmt.Sprint(pair.Value().Value)))) keys[z] = fmt.Sprintf("%s-%s", k.Value, sha256.Sum256([]byte(fmt.Sprint(v.Value))))
z++ z++
} }
sort.Strings(keys) sort.Strings(keys)

View File

@@ -6,7 +6,6 @@ package model
import ( import (
"github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low"
v3 "github.com/pb33f/libopenapi/datamodel/low/v3" v3 "github.com/pb33f/libopenapi/datamodel/low/v3"
"github.com/pb33f/libopenapi/orderedmap"
) )
// OAuthFlowsChanges represents changes found between two OpenAPI OAuthFlows objects. // OAuthFlowsChanges represents changes found between two OpenAPI OAuthFlows objects.
@@ -229,26 +228,26 @@ func CompareOAuthFlow(l, r *v3.OAuthFlow) *OAuthFlowChanges {
CheckProperties(props) CheckProperties(props)
for pair := orderedmap.First(l.Scopes.Value); pair != nil; pair = pair.Next() { for k, v := range l.Scopes.Value {
if r != nil && r.FindScope(pair.Key().Value) == nil { if r != nil && r.FindScope(k.Value) == nil {
CreateChange(&changes, ObjectRemoved, v3.Scopes, CreateChange(&changes, ObjectRemoved, v3.Scopes,
pair.Value().ValueNode, nil, true, v.ValueNode, nil, true,
pair.Key().Value, nil) k.Value, nil)
continue continue
} }
if r != nil && r.FindScope(pair.Key().Value) != nil { if r != nil && r.FindScope(k.Value) != nil {
if pair.Value().Value != r.FindScope(pair.Key().Value).Value { if v.Value != r.FindScope(k.Value).Value {
CreateChange(&changes, Modified, v3.Scopes, CreateChange(&changes, Modified, v3.Scopes,
pair.Value().ValueNode, r.FindScope(pair.Key().Value).ValueNode, true, v.ValueNode, r.FindScope(k.Value).ValueNode, true,
pair.Value().Value, r.FindScope(pair.Key().Value).Value) v.Value, r.FindScope(k.Value).Value)
} }
} }
} }
for pair := orderedmap.First(r.Scopes.Value); pair != nil; pair = pair.Next() { for k, v := range r.Scopes.Value {
if l != nil && l.FindScope(pair.Key().Value) == nil { if l != nil && l.FindScope(k.Value) == nil {
CreateChange(&changes, ObjectAdded, v3.Scopes, CreateChange(&changes, ObjectAdded, v3.Scopes,
nil, pair.Value().ValueNode, false, nil, v.ValueNode, false,
nil, pair.Key().Value) nil, k.Value)
} }
} }
oa := new(OAuthFlowChanges) oa := new(OAuthFlowChanges)