Ctrl K
ComunidadGuías…

codersdk/richparameters_internal_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package codersdk

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/coder/terraform-provider-coder/v2/provider"
)

func Test_inOptionSet(t *testing.T) {
	t.Parallel()

	options := func(vals ...string) []TemplateVersionParameterOption {
		opts := make([]TemplateVersionParameterOption, 0, len(vals))
		for _, val := range vals {
			opts = append(opts, TemplateVersionParameterOption{
				Name:  val,
				Value: val,
			})
		}
		return opts
	}

	tests := []struct {
		name  string
		param TemplateVersionParameter
		value string
		want  bool
	}{
		// The function should never be called with 0 options, but if it is,
		// it should always return false.
		{
			name: "empty",
			want: false,
		},
		{
			name: "no-options",
			param: TemplateVersionParameter{
				Options: make([]TemplateVersionParameterOption, 0),
			},
		},
		{
			name: "no-options-multi",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: string(provider.ParameterFormTypeMultiSelect),
				Options:  make([]TemplateVersionParameterOption, 0),
			},
			want: false,
		},
		{
			name: "no-options-list(string)",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: "",
				Options:  make([]TemplateVersionParameterOption, 0),
			},
			want: false,
		},
		{
			name: "list(string)-no-form",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: "",
				Options:  options("red", "green", "blue"),
			},
			want:  false,
			value: `["red", "blue", "green"]`,
		},
		// now for some reasonable values
		{
			name: "list(string)-multi",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: string(provider.ParameterFormTypeMultiSelect),
				Options:  options("red", "green", "blue"),
			},
			want:  true,
			value: `["red", "blue", "green"]`,
		},
		{
			name: "string with json",
			param: TemplateVersionParameter{
				Type:    provider.OptionTypeString,
				Options: options(`["red","blue","green"]`, `["red","orange"]`),
			},
			want:  true,
			value: `["red","blue","green"]`,
		},
		{
			name: "string",
			param: TemplateVersionParameter{
				Type:    provider.OptionTypeString,
				Options: options("red", "green", "blue"),
			},
			want:  true,
			value: "red",
		},
		// False values
		{
			name: "list(string)-multi",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: string(provider.ParameterFormTypeMultiSelect),
				Options:  options("red", "green", "blue"),
			},
			want:  false,
			value: `["red", "blue", "purple"]`,
		},
		{
			name: "string with json",
			param: TemplateVersionParameter{
				Type:    provider.OptionTypeString,
				Options: options(`["red","blue"]`, `["red","orange"]`),
			},
			want:  false,
			value: `["red","blue","green"]`,
		},
		{
			name: "string",
			param: TemplateVersionParameter{
				Type:    provider.OptionTypeString,
				Options: options("red", "green", "blue"),
			},
			want:  false,
			value: "purple",
		},
		{
			name: "list(string)-multi-scalar-value",
			param: TemplateVersionParameter{
				Type:     provider.OptionTypeListString,
				FormType: string(provider.ParameterFormTypeMultiSelect),
				Options:  options("red", "green", "blue"),
			},
			want:  false,
			value: "green",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()

			got := inOptionSet(tt.param, tt.value)
			require.Equal(t, tt.want, got)
		})
	}
}