mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 12:37:49 +00:00
Adding more tests to bump coverage
Signed-off-by: quobix <dave@quobix.com>
This commit is contained in:
@@ -6,6 +6,7 @@ package base
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/pb33f/libopenapi/datamodel/low"
|
"github.com/pb33f/libopenapi/datamodel/low"
|
||||||
|
"github.com/pb33f/libopenapi/index"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -96,3 +97,67 @@ x-common-definitions:
|
|||||||
assert.Equal(t, "The type of life cycle", sch.Schema().Description.Value)
|
assert.Equal(t, "The type of life cycle", sch.Schema().Description.Value)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSchemaProxy_GetSchemaReferenceLocation(t *testing.T) {
|
||||||
|
|
||||||
|
yml := `type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: thing`
|
||||||
|
|
||||||
|
var idxNodeA yaml.Node
|
||||||
|
e := yaml.Unmarshal([]byte(yml), &idxNodeA)
|
||||||
|
assert.NoError(t, e)
|
||||||
|
|
||||||
|
yml = `
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: thang`
|
||||||
|
|
||||||
|
var schA SchemaProxy
|
||||||
|
var schB SchemaProxy
|
||||||
|
var schC SchemaProxy
|
||||||
|
var idxNodeB yaml.Node
|
||||||
|
_ = yaml.Unmarshal([]byte(yml), &idxNodeB)
|
||||||
|
|
||||||
|
c := index.CreateOpenAPIIndexConfig()
|
||||||
|
rolo := index.NewRolodex(c)
|
||||||
|
rolo.SetRootNode(&idxNodeA)
|
||||||
|
_ = rolo.IndexTheRolodex()
|
||||||
|
|
||||||
|
err := schA.Build(context.Background(), nil, idxNodeA.Content[0], rolo.GetRootIndex())
|
||||||
|
assert.NoError(t, err)
|
||||||
|
err = schB.Build(context.Background(), nil, idxNodeB.Content[0].Content[3].Content[1], rolo.GetRootIndex())
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
rolo.GetRootIndex().SetAbsolutePath("/rooty/rootster")
|
||||||
|
origin := schA.GetSchemaReferenceLocation()
|
||||||
|
assert.NotNil(t, origin)
|
||||||
|
assert.Equal(t, "/rooty/rootster", origin.AbsoluteLocation)
|
||||||
|
|
||||||
|
// mess things up so it cannot be found
|
||||||
|
schA.vn = schB.vn
|
||||||
|
origin = schA.GetSchemaReferenceLocation()
|
||||||
|
assert.Nil(t, origin)
|
||||||
|
|
||||||
|
// create a new index
|
||||||
|
idx := index.NewSpecIndexWithConfig(&idxNodeB, c)
|
||||||
|
idx.SetAbsolutePath("/boaty/mcboatface")
|
||||||
|
|
||||||
|
// add the index to the rolodex
|
||||||
|
rolo.AddIndex(idx)
|
||||||
|
|
||||||
|
// can now find the origin
|
||||||
|
origin = schA.GetSchemaReferenceLocation()
|
||||||
|
assert.NotNil(t, origin)
|
||||||
|
assert.Equal(t, "/boaty/mcboatface", origin.AbsoluteLocation)
|
||||||
|
|
||||||
|
// do it again, but with no index
|
||||||
|
err = schC.Build(context.Background(), nil, idxNodeA.Content[0], nil)
|
||||||
|
origin = schC.GetSchemaReferenceLocation()
|
||||||
|
assert.Nil(t, origin)
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -296,6 +296,16 @@ func (index *SpecIndex) GetCache() *syncmap.Map {
|
|||||||
return index.cache
|
return index.cache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetAbsolutePath sets the absolute path to the spec file for the index. Will be absolute, either as a http link or a file.
|
||||||
|
func (index *SpecIndex) SetAbsolutePath(absolutePath string) {
|
||||||
|
index.specAbsolutePath = absolutePath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAbsolutePath returns the absolute path to the spec file for the index. Will be absolute, either as a http link or a file.
|
||||||
|
func (index *SpecIndex) GetAbsolutePath() string {
|
||||||
|
return index.specAbsolutePath
|
||||||
|
}
|
||||||
|
|
||||||
// ExternalLookupFunction is for lookup functions that take a JSONSchema reference and tries to find that node in the
|
// ExternalLookupFunction is for lookup functions that take a JSONSchema reference and tries to find that node in the
|
||||||
// URI based document. Decides if the reference is local, remote or in a file.
|
// URI based document. Decides if the reference is local, remote or in a file.
|
||||||
type ExternalLookupFunction func(id string) (foundNode *yaml.Node, rootNode *yaml.Node, lookupError error)
|
type ExternalLookupFunction func(id string) (foundNode *yaml.Node, rootNode *yaml.Node, lookupError error)
|
||||||
|
|||||||
@@ -70,13 +70,16 @@ func (index *SpecIndex) MapNodes(rootNode *yaml.Node) {
|
|||||||
close(index.nodeMapCompleted)
|
close(index.nodeMapCompleted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindNodeOrigin searches this index for a matching node. If the node is found, a NodeOrigin
|
||||||
|
// is returned, otherwise nil is returned.
|
||||||
func (index *SpecIndex) FindNodeOrigin(node *yaml.Node) *NodeOrigin {
|
func (index *SpecIndex) FindNodeOrigin(node *yaml.Node) *NodeOrigin {
|
||||||
|
|
||||||
// local search, then throw up to rolodex for a full search
|
|
||||||
if node != nil {
|
if node != nil {
|
||||||
if index.nodeMap[node.Line] != nil {
|
if index.nodeMap[node.Line] != nil {
|
||||||
if index.nodeMap[node.Line][node.Column] != nil {
|
if index.nodeMap[node.Line][node.Column] != nil {
|
||||||
foundNode := index.nodeMap[node.Line][node.Column]
|
foundNode := index.nodeMap[node.Line][node.Column]
|
||||||
|
if foundNode.Kind == yaml.DocumentNode {
|
||||||
|
foundNode = foundNode.Content[0]
|
||||||
|
}
|
||||||
match := true
|
match := true
|
||||||
if foundNode.Value != node.Value || foundNode.Kind != node.Kind || foundNode.Tag != node.Tag {
|
if foundNode.Value != node.Value || foundNode.Kind != node.Kind || foundNode.Tag != node.Tag {
|
||||||
match = false
|
match = false
|
||||||
|
|||||||
@@ -519,6 +519,10 @@ func TestSpecIndex_PetstoreV3(t *testing.T) {
|
|||||||
assert.Equal(t, 19, index.GetAllSummariesCount())
|
assert.Equal(t, 19, index.GetAllSummariesCount())
|
||||||
assert.Len(t, index.GetAllDescriptions(), 90)
|
assert.Len(t, index.GetAllDescriptions(), 90)
|
||||||
assert.Len(t, index.GetAllSummaries(), 19)
|
assert.Len(t, index.GetAllSummaries(), 19)
|
||||||
|
|
||||||
|
index.SetAbsolutePath("/rooty/rootster")
|
||||||
|
assert.Equal(t, "/rooty/rootster", index.GetSpecAbsolutePath())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var mappedRefs = 15
|
var mappedRefs = 15
|
||||||
|
|||||||
Reference in New Issue
Block a user