// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//	https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package policy

// TestSuite describes a set of tests divided by section.
//
// Deprecated: Use google3/third_party/cel/go/test/suite.go instead.
type TestSuite struct {
	Description string         `yaml:"description"`
	Sections    []*TestSection `yaml:"section"`
}

// TestSection describes a related set of tests associated with a behavior.
type TestSection struct {
	Name  string      `yaml:"name"`
	Tests []*TestCase `yaml:"tests"`
}

// TestCase describes a named test scenario with a set of inputs and expected outputs.
//
// Note, when a test requires additional functions to be provided to execute, the test harness
// must supply these functions.
type TestCase struct {
	Name   string               `yaml:"name"`
	Input  map[string]TestInput `yaml:"input"`
	Output string               `yaml:"output"`
}

// TestInput represents an input literal value or expression.
type TestInput struct {
	// Value is a simple literal value.
	Value any `yaml:"value"`

	// Expr is a CEL expression based input.
	Expr string `yaml:"expr"`

	// ContextExpr is a CEL expression which is used as cel.ContextProtoVars
	ContextExpr string `yaml:"context_expr"`
}
