mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-07 04:20:14 +00:00
Building out extraction and location code.
adding tests to extactraction functions. Signed-off-by: Dave Shanley <dave@quobix.com>
This commit is contained in:
@@ -316,9 +316,9 @@ func TestCreateDocument_Components_Schemas(t *testing.T) {
|
|||||||
assert.NotNil(t, components)
|
assert.NotNil(t, components)
|
||||||
assert.Len(t, components.Schemas.Value, 6)
|
assert.Len(t, components.Schemas.Value, 6)
|
||||||
|
|
||||||
burger := components.FindSchema("Burger")
|
burger := components.FindSchema("Burger").Value
|
||||||
assert.NotNil(t, burger.Value)
|
assert.NotNil(t, burger)
|
||||||
assert.Equal(t, "The tastiest food on the planet you would love to eat everyday", burger.Value.Schema().Description.Value)
|
assert.Equal(t, "The tastiest food on the planet you would love to eat everyday", burger.Schema().Description.Value)
|
||||||
|
|
||||||
er := components.FindSchema("Error")
|
er := components.FindSchema("Error")
|
||||||
assert.NotNil(t, er.Value)
|
assert.NotNil(t, er.Value)
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func FindItemInMap[T any](item string, collection map[KeyReference[string]]ValueReference[T]) *ValueReference[T] {
|
func FindItemInMap[T any](item string, collection map[KeyReference[string]]ValueReference[T]) *ValueReference[T] {
|
||||||
@@ -23,8 +22,6 @@ func FindItemInMap[T any](item string, collection map[KeyReference[string]]Value
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapLock sync.Mutex
|
|
||||||
|
|
||||||
func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) *yaml.Node {
|
func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) *yaml.Node {
|
||||||
if rf, _, rv := utils.IsNodeRefValue(root); rf {
|
if rf, _, rv := utils.IsNodeRefValue(root); rf {
|
||||||
// run through everything and return as soon as we find a match.
|
// run through everything and return as soon as we find a match.
|
||||||
@@ -80,7 +77,8 @@ func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) *yaml.Node {
|
|||||||
cleaned := strings.ReplaceAll(rv, "#/paths/", "")
|
cleaned := strings.ReplaceAll(rv, "#/paths/", "")
|
||||||
cleaned = strings.ReplaceAll(cleaned, "/", ".")
|
cleaned = strings.ReplaceAll(cleaned, "/", ".")
|
||||||
cleaned = strings.ReplaceAll(cleaned, "~1", "/")
|
cleaned = strings.ReplaceAll(cleaned, "~1", "/")
|
||||||
path, err := yamlpath.NewPath(fmt.Sprintf("$.paths.%s", cleaned))
|
yamlPath := fmt.Sprintf("$.paths.%s", cleaned)
|
||||||
|
path, err := yamlpath.NewPath(yamlPath)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
nodes, fErr := path.Find(idx.GetRootNode())
|
nodes, fErr := path.Find(idx.GetRootNode())
|
||||||
if fErr == nil {
|
if fErr == nil {
|
||||||
|
|||||||
74
datamodel/low/extraction_functions_test.go
Normal file
74
datamodel/low/extraction_functions_test.go
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package low
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/pb33f/libopenapi/index"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestFindItemInMap(t *testing.T) {
|
||||||
|
v := make(map[KeyReference[string]]ValueReference[string])
|
||||||
|
v[KeyReference[string]{
|
||||||
|
Value: "pizza",
|
||||||
|
}] = ValueReference[string]{
|
||||||
|
Value: "pie",
|
||||||
|
}
|
||||||
|
assert.Equal(t, "pie", FindItemInMap("pizza", v).Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFindItemInMap_Error(t *testing.T) {
|
||||||
|
v := make(map[KeyReference[string]]ValueReference[string])
|
||||||
|
v[KeyReference[string]{
|
||||||
|
Value: "pizza",
|
||||||
|
}] = ValueReference[string]{
|
||||||
|
Value: "pie",
|
||||||
|
}
|
||||||
|
assert.Nil(t, FindItemInMap("nuggets", v))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLocateRefNode(t *testing.T) {
|
||||||
|
|
||||||
|
yml := `components:
|
||||||
|
schemas:
|
||||||
|
cake:
|
||||||
|
description: hello`
|
||||||
|
|
||||||
|
var idxNode yaml.Node
|
||||||
|
mErr := yaml.Unmarshal([]byte(yml), &idxNode)
|
||||||
|
assert.NoError(t, mErr)
|
||||||
|
idx := index.NewSpecIndex(&idxNode)
|
||||||
|
|
||||||
|
yml = `$ref: '#/components/schemas/cake'`
|
||||||
|
|
||||||
|
var cNode yaml.Node
|
||||||
|
_ = yaml.Unmarshal([]byte(yml), &cNode)
|
||||||
|
|
||||||
|
located := LocateRefNode(cNode.Content[0], idx)
|
||||||
|
assert.NotNil(t, located)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLocateRefNode_Path(t *testing.T) {
|
||||||
|
|
||||||
|
yml := `paths:
|
||||||
|
/burger/time:
|
||||||
|
description: hello`
|
||||||
|
|
||||||
|
var idxNode yaml.Node
|
||||||
|
mErr := yaml.Unmarshal([]byte(yml), &idxNode)
|
||||||
|
assert.NoError(t, mErr)
|
||||||
|
idx := index.NewSpecIndex(&idxNode)
|
||||||
|
|
||||||
|
yml = `$ref: '#/paths/~1burger~1time'`
|
||||||
|
|
||||||
|
var cNode yaml.Node
|
||||||
|
_ = yaml.Unmarshal([]byte(yml), &cNode)
|
||||||
|
|
||||||
|
located := LocateRefNode(cNode.Content[0], idx)
|
||||||
|
assert.NotNil(t, located)
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user