package yqlib

import (
	"testing"
)

var hasOperatorScenarios = []expressionScenario{
	{
		skipDoc:    true,
		document:   `a: hello`,
		expression: `has("a")`,
		expected: []string{
			"D0, P[], (!!bool)::true\n",
		},
	},
	{
		description: "Has map key",
		document: `- a: "yes"
- a: ~
- a: 
- b: nope
`,
		expression: `.[] | has("a")`,
		expected: []string{
			"D0, P[0], (!!bool)::true\n",
			"D0, P[1], (!!bool)::true\n",
			"D0, P[2], (!!bool)::true\n",
			"D0, P[3], (!!bool)::false\n",
		},
	},
	{
		dontFormatInputForDoc: true,
		description:           "Has array index",
		document: `- []
- [1]
- [1, 2]
- [1, null]
- [1, 2, 3]
`,
		expression: `.[] | has(1)`,
		expected: []string{
			"D0, P[0], (!!bool)::false\n",
			"D0, P[1], (!!bool)::false\n",
			"D0, P[2], (!!bool)::true\n",
			"D0, P[3], (!!bool)::true\n",
			"D0, P[4], (!!bool)::true\n",
		},
	},
}

func TestHasOperatorScenarios(t *testing.T) {
	for _, tt := range hasOperatorScenarios {
		testScenario(t, &tt)
	}
	documentScenarios(t, "Has", hasOperatorScenarios)
}
