1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
package openapi3
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestLoaderSupportsRecursiveReference(t *testing.T) {
loader := NewLoader()
loader.IsExternalRefsAllowed = true
doc, err := loader.LoadFromFile("testdata/recursiveRef/openapi.yml")
require.NoError(t, err)
err = doc.Validate(loader.Context)
require.NoError(t, err)
require.Equal(t, "bar", doc.
Paths.Value("/foo").
Get.Responses.Status(200).Value.
Content.Get("application/json").
Schema.Value.Properties["foo2"].Value.Properties["foo"].Value.Properties["bar"].Value.Example)
require.Equal(t, "ErrorDetails", doc.
Paths.Value("/foo").
Get.Responses.Status(400).Value.
Content.Get("application/json").
Schema.Value.Title)
require.Equal(t, "ErrorDetails", doc.
Paths.Value("/double-ref-foo").
Get.Responses.Status(400).Value.
Content.Get("application/json").
Schema.Value.Title)
}
func TestIssue447(t *testing.T) {
loader := NewLoader()
doc, err := loader.LoadFromData([]byte(`
openapi: 3.0.1
info:
title: Recursive refs example
version: "1.0"
paths: {}
components:
schemas:
Complex:
type: object
properties:
parent:
$ref: '#/components/schemas/Complex'
`))
require.NoError(t, err)
err = doc.Validate(loader.Context)
require.NoError(t, err)
require.Equal(t, &Types{"object"}, doc.Components.
Schemas["Complex"].
Value.Properties["parent"].
Value.Properties["parent"].
Value.Properties["parent"].
Value.Type)
}
|