Files
libopenapi/datamodel/low/v2/parameter_test.go
quobix 6e9db7f838 A massive test update to bring everything inlne with the new Buildable signature.
All tests in index and datamodel now pass. The rolodex fixes all the things.

Signed-off-by: quobix <dave@quobix.com>
2023-10-23 18:18:44 -04:00

214 lines
4.8 KiB
Go

// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package v2
import (
"context"
"github.com/pb33f/libopenapi/datamodel/low"
"github.com/pb33f/libopenapi/datamodel/low/base"
"github.com/pb33f/libopenapi/index"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"testing"
)
func TestParameter_Build(t *testing.T) {
yml := `$ref: break`
var idxNode yaml.Node
mErr := yaml.Unmarshal([]byte(yml), &idxNode)
assert.NoError(t, mErr)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
err := low.BuildModel(&idxNode, &n)
assert.NoError(t, err)
err = n.Build(context.Background(), nil, idxNode.Content[0], idx)
assert.Error(t, err)
}
func TestParameter_Build_Items(t *testing.T) {
yml := `items:
$ref: break`
var idxNode yaml.Node
mErr := yaml.Unmarshal([]byte(yml), &idxNode)
assert.NoError(t, mErr)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
err := low.BuildModel(&idxNode, &n)
assert.NoError(t, err)
err = n.Build(context.Background(), nil, idxNode.Content[0], idx)
assert.Error(t, err)
}
func TestParameter_DefaultSlice(t *testing.T) {
yml := `default:
- things
- junk
- stuff`
var idxNode yaml.Node
_ = yaml.Unmarshal([]byte(yml), &idxNode)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
_ = low.BuildModel(&idxNode, &n)
_ = n.Build(context.Background(), nil, idxNode.Content[0], idx)
assert.Len(t, n.Default.Value.([]any), 3)
}
func TestParameter_DefaultMap(t *testing.T) {
yml := `default:
things: junk
stuff: more junk`
var idxNode yaml.Node
_ = yaml.Unmarshal([]byte(yml), &idxNode)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
_ = low.BuildModel(&idxNode, &n)
_ = n.Build(context.Background(), nil, idxNode.Content[0], idx)
assert.Len(t, n.Default.Value.(map[string]any), 2)
}
func TestParameter_NoDefaultNoError(t *testing.T) {
yml := `name: pizza-pie`
var idxNode yaml.Node
_ = yaml.Unmarshal([]byte(yml), &idxNode)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
_ = low.BuildModel(&idxNode, &n)
err := n.Build(context.Background(), nil, idxNode.Content[0], idx)
assert.NoError(t, err)
}
func TestParameter_Hash_n_Grab(t *testing.T) {
yml := `name: mcmuffin
in: my-belly
description: tasty!
type: string
format: left
collectionFormat: nice
default: shut that door!
pattern: wow
schema:
type: int
enum:
- one
- 123
x-belly: large
items:
type: int
maximum: 10
minimum: 1
allowEmptyValue: true
exclusiveMinimum: true
exclusiveMaximum: true
maxLength: 10
minLength: 1
maxItems: 10
minItems: 1
uniqueItems: true
multipleOf: 12
required: true`
var idxNode yaml.Node
_ = yaml.Unmarshal([]byte(yml), &idxNode)
idx := index.NewSpecIndex(&idxNode)
var n Parameter
_ = low.BuildModel(idxNode.Content[0], &n)
_ = n.Build(context.Background(), nil, idxNode.Content[0], idx)
yml2 := `items:
type: int
format: left
collectionFormat: nice
type: string
maximum: 10
required: true
minimum: 1
name: mcmuffin
in: my-belly
description: tasty!
exclusiveMinimum: true
exclusiveMaximum: true
maxLength: 10
minLength: 1
maxItems: 10
minItems: 1
uniqueItems: true
multipleOf: 12
default: shut that door!
schema:
type: int
enum:
- one
- 123
x-belly: large
pattern: wow
allowEmptyValue: true
`
var idxNode2 yaml.Node
_ = yaml.Unmarshal([]byte(yml2), &idxNode2)
idx2 := index.NewSpecIndex(&idxNode2)
var n2 Parameter
_ = low.BuildModel(idxNode2.Content[0], &n2)
_ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2)
// hash
assert.Equal(t, n.Hash(), n2.Hash())
// and grab
assert.Equal(t, "string", n.GetType().Value)
assert.Equal(t, "left", n.GetFormat().Value)
assert.Equal(t, "left", n.GetFormat().Value)
assert.Equal(t, "nice", n.GetCollectionFormat().Value)
assert.Equal(t, "shut that door!", n.GetDefault().Value)
assert.Equal(t, 10, n.GetMaximum().Value)
assert.Equal(t, 1, n.GetMinimum().Value)
assert.True(t, n.GetExclusiveMinimum().Value)
assert.True(t, n.GetExclusiveMaximum().Value)
assert.Equal(t, 10, n.GetMaxLength().Value)
assert.Equal(t, 1, n.GetMinLength().Value)
assert.Equal(t, 10, n.GetMaxItems().Value)
assert.Equal(t, 1, n.GetMinItems().Value)
assert.True(t, n.GetUniqueItems().Value)
assert.Equal(t, 12, n.GetMultipleOf().Value)
assert.Equal(t, "wow", n.GetPattern().Value)
assert.Equal(t, "int", n.GetItems().Value.(*Items).Type.Value)
assert.Len(t, n.GetEnum().Value, 2)
assert.Equal(t, "large", n.FindExtension("x-belly").Value)
assert.Equal(t, "tasty!", n.GetDescription().Value)
assert.Equal(t, "mcmuffin", n.GetName().Value)
assert.Equal(t, "my-belly", n.GetIn().Value)
v := n.GetSchema().Value.(*base.SchemaProxy).Schema().Type // this is a dynamic value that has multiple choices
assert.Equal(t, "int", v.Value.A) // A is v2
assert.True(t, n.GetRequired().Value)
assert.True(t, n.GetAllowEmptyValue().Value)
assert.Len(t, n.GetExtensions(), 1)
}