Files
libopenapi/json/json_test.go
2024-08-07 14:45:34 -04:00

147 lines
2.4 KiB
Go

package json_test
import (
"testing"
"github.com/pb33f/libopenapi/json"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v3"
)
func TestYAMLNodeToJSON(t *testing.T) {
y := `root:
key1: scalar1
key2:
- scalar2
- subkey1: scalar3
subkey2:
- 1
- 2
-
- scalar4
- scalar5
key3: true`
var v yaml.Node
err := yaml.Unmarshal([]byte(y), &v)
require.NoError(t, err)
j, err := json.YAMLNodeToJSON(&v, " ")
require.NoError(t, err)
assert.Equal(t, `{
"root": {
"key1": "scalar1",
"key2": [
"scalar2",
{
"subkey1": "scalar3",
"subkey2": [
1,
2
]
},
[
"scalar4",
"scalar5"
]
],
"key3": true
}
}`, string(j))
}
func TestYAMLNodeToJSON_FromJSON(t *testing.T) {
j := `{
"root": {
"key1": "scalar1",
"key2": [
"scalar2",
{
"subkey1": "scalar3",
"subkey2": [
1,
2
]
},
[
"scalar4",
"scalar5"
]
],
"key3": true
}
}`
var v yaml.Node
err := yaml.Unmarshal([]byte(j), &v)
require.NoError(t, err)
o, err := json.YAMLNodeToJSON(&v, " ")
require.NoError(t, err)
assert.Equal(t, j, string(o))
}
func TestYAMLNodeWithAnchorsToJSON(t *testing.T) {
y := `examples:
someExample: &someExample
key1: scalar1
key2: scalar2
someValue: *someExample`
var v yaml.Node
err := yaml.Unmarshal([]byte(y), &v)
require.NoError(t, err)
j, err := json.YAMLNodeToJSON(&v, " ")
require.NoError(t, err)
assert.Equal(t, `{
"examples": {
"someExample": {
"key1": "scalar1",
"key2": "scalar2"
}
},
"someValue": {
"key1": "scalar1",
"key2": "scalar2"
}
}`, string(j))
}
func TestYAMLNodeWithComplexKeysToJSON(t *testing.T) {
y := `someMapWithComplexKeys:
{key1: scalar1, key2: scalar2}: {key1: scalar1, key2: scalar2}`
var v yaml.Node
err := yaml.Unmarshal([]byte(y), &v)
require.NoError(t, err)
j, err := json.YAMLNodeToJSON(&v, " ")
require.NoError(t, err)
assert.Equal(t, `{
"someMapWithComplexKeys": {
"{\"key1\":\"scalar1\",\"key2\":\"scalar2\"}": {
"key1": "scalar1",
"key2": "scalar2"
}
}
}`, string(j))
}
func TestYAMLNodeToJSONInvalidNode(t *testing.T) {
var v yaml.Node
j, err := json.YAMLNodeToJSON(&v, " ")
assert.Nil(t, j)
assert.Error(t, err)
}