codersdk/richparameters_internal_test.go
Rama main · réplica de lectura del repositorio original.
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)
})
}
}