// Copyright 2023 Princess B33f Heavy Industries / Dave Shanley // SPDX-License-Identifier: MIT package v3 import ( "context" "strings" "testing" "github.com/pb33f/libopenapi/datamodel/low" v3low "github.com/pb33f/libopenapi/datamodel/low/v3" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v3" ) func TestPaths_MarshalYAML(t *testing.T) { yml := `/foo/bar/bizzle: get: description: get a bizzle /jim/jam/jizzle: post: description: post a jizzle /beer: get: description: get a beer now.` var rootNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &rootNode) var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) idx := index.NewSpecIndexWithConfig(&idxNode, index.CreateOpenAPIIndexConfig()) var n v3low.Paths err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) high := NewPaths(&n) assert.NotNil(t, high) rend, _ := high.Render() assert.Equal(t, yml, strings.TrimSpace(string(rend))) // mutate deprecated := true high.PathItems.GetOrZero("/beer").Get.Deprecated = &deprecated yml = `/foo/bar/bizzle: get: description: get a bizzle /jim/jam/jizzle: post: description: post a jizzle /beer: get: description: get a beer now. deprecated: true` rend, _ = high.Render() assert.Equal(t, yml, strings.TrimSpace(string(rend))) } func TestPaths_MarshalYAMLInline(t *testing.T) { yml := `/foo/bar/bizzle: get: description: get a bizzle /jim/jam/jizzle: post: description: post a jizzle /beer: get: description: get a beer now.` var rootNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &rootNode) var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) idx := index.NewSpecIndexWithConfig(&idxNode, index.CreateOpenAPIIndexConfig()) var n v3low.Paths err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) high := NewPaths(&n) assert.NotNil(t, high) rend, _ := high.RenderInline() assert.Equal(t, yml, strings.TrimSpace(string(rend))) // mutate deprecated := true high.PathItems.GetOrZero("/beer").Get.Deprecated = &deprecated yml = `/foo/bar/bizzle: get: description: get a bizzle /jim/jam/jizzle: post: description: post a jizzle /beer: get: description: get a beer now. deprecated: true` rend, _ = high.RenderInline() assert.Equal(t, yml, strings.TrimSpace(string(rend))) }