// Copyright 2023 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT

package utils

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestCreateBoolNode(t *testing.T) {
	b := CreateBoolNode("true")
	assert.Equal(t, "", b.Tag) // No explicit tag - let YAML infer type
	assert.Equal(t, "true", b.Value)
}

func TestCreateEmptyMapNode(t *testing.T) {
	m := CreateEmptyMapNode()
	assert.Equal(t, "!!map", m.Tag)
	assert.Len(t, m.Content, 0)
}

func TestCreateEmptySequenceNode(t *testing.T) {
	s := CreateEmptySequenceNode()
	assert.Equal(t, "!!seq", s.Tag)
	assert.Len(t, s.Content, 0)
}

func TestCreateEmptyScalarNode(t *testing.T) {
	s := CreateEmptyScalarNode()
	assert.Equal(t, "!!null", s.Tag)
	assert.Equal(t, "", s.Value)
}

func TestCreateFloatNode(t *testing.T) {
	f := CreateFloatNode("3.14")
	assert.Equal(t, "", f.Tag) // No explicit tag - let YAML infer type
	assert.Equal(t, "3.14", f.Value)
}

func TestCreateIntNode(t *testing.T) {
	i := CreateIntNode("42")
	assert.Equal(t, "", i.Tag) // No explicit tag - let YAML infer type
	assert.Equal(t, "42", i.Value)
}

func TestCreateRefNode(t *testing.T) {
	r := CreateRefNode("#/components/schemas/MySchema")
	assert.Equal(t, "!!map", r.Tag)
	assert.Len(t, r.Content, 2)
	assert.Equal(t, "!!str", r.Content[0].Tag)
	assert.Equal(t, "$ref", r.Content[0].Value)
	assert.Equal(t, "!!str", r.Content[1].Tag)
	assert.Equal(t, "#/components/schemas/MySchema", r.Content[1].Value)
}

func TestCreateYamlNode(t *testing.T) {
	y := CreateYamlNode("foo")
	assert.Equal(t, "!!str", y.Tag) // Encode() sets appropriate tag
	assert.Equal(t, "foo", y.Value)
}
