@@ -28,9 +28,11 @@ type paramAssert struct {
2828}
2929
3030type formTypeCheck struct {
31- formType provider.ParameterFormType
32- optionType provider.OptionType
33- options bool
31+ formType provider.ParameterFormType
32+ optionType provider.OptionType
33+ defValue string
34+ options bool
35+ customOptions []string
3436}
3537
3638func (c formTypeCheck ) String () string {
@@ -40,10 +42,12 @@ func (c formTypeCheck) String() string {
4042func TestValidateFormType (t * testing.T ) {
4143 t .Parallel ()
4244
43- //formTypesChecked := make(map[provider.ParameterFormType]map[provider.OptionType]map[bool]struct{})
45+ // formTypesChecked keeps track of all checks run. It will be used to
46+ // ensure all combinations of form_type and option_type are tested.
47+ // All untested options are assumed to throw an error.
4448 formTypesChecked := make (map [string ]struct {})
4549
46- obvious := func (expected provider.ParameterFormType , opts formTypeCheck ) formTypeTestCase {
50+ expectType := func (expected provider.ParameterFormType , opts formTypeCheck ) formTypeTestCase {
4751 ftname := opts .formType
4852 if ftname == "" {
4953 ftname = "default"
@@ -64,6 +68,12 @@ func TestValidateFormType(t *testing.T) {
6468 }
6569 }
6670
71+ // obvious just assumes the FormType in the check is the expected
72+ // FormType. Using `expectType` these fields can differ
73+ obvious := func (opts formTypeCheck ) formTypeTestCase {
74+ return expectType (opts .formType , opts )
75+ }
76+
6777 cases := []formTypeTestCase {
6878 {
6979 // When nothing is specified
@@ -75,77 +85,125 @@ func TestValidateFormType(t *testing.T) {
7585 Styling : "" ,
7686 },
7787 },
78- // String
79- obvious (provider .ParameterFormTypeRadio , formTypeCheck {
88+ // All default behaviors. Essentially legacy behavior.
89+ // String
90+ expectType (provider .ParameterFormTypeRadio , formTypeCheck {
8091 options : true ,
8192 optionType : provider .OptionTypeString ,
8293 }),
83- obvious (provider .ParameterFormTypeRadio , formTypeCheck {
84- options : true ,
94+ expectType (provider .ParameterFormTypeInput , formTypeCheck {
95+ options : false ,
8596 optionType : provider .OptionTypeString ,
86- formType : provider .ParameterFormTypeRadio ,
8797 }),
88- obvious (provider .ParameterFormTypeDropdown , formTypeCheck {
98+ // Number
99+ expectType (provider .ParameterFormTypeRadio , formTypeCheck {
100+ options : true ,
101+ optionType : provider .OptionTypeNumber ,
102+ }),
103+ expectType (provider .ParameterFormTypeInput , formTypeCheck {
104+ options : false ,
105+ optionType : provider .OptionTypeNumber ,
106+ }),
107+ // Boolean
108+ expectType (provider .ParameterFormTypeRadio , formTypeCheck {
109+ options : true ,
110+ optionType : provider .OptionTypeBoolean ,
111+ }),
112+ expectType (provider .ParameterFormTypeCheckbox , formTypeCheck {
113+ options : false ,
114+ optionType : provider .OptionTypeBoolean ,
115+ }),
116+ // List(string)
117+ expectType (provider .ParameterFormTypeRadio , formTypeCheck {
118+ options : true ,
119+ optionType : provider .OptionTypeListString ,
120+ }),
121+ expectType (provider .ParameterFormTypeTagSelect , formTypeCheck {
122+ options : false ,
123+ optionType : provider .OptionTypeListString ,
124+ }),
125+
126+ // ---- New Behavior
127+ // String
128+ obvious (formTypeCheck {
89129 options : true ,
90130 optionType : provider .OptionTypeString ,
91131 formType : provider .ParameterFormTypeDropdown ,
92132 }),
93- obvious (provider .ParameterFormTypeInput , formTypeCheck {
133+ obvious (formTypeCheck {
134+ options : true ,
135+ optionType : provider .OptionTypeString ,
136+ formType : provider .ParameterFormTypeRadio ,
137+ }),
138+ obvious (formTypeCheck {
94139 options : false ,
95140 optionType : provider .OptionTypeString ,
141+ formType : provider .ParameterFormTypeInput ,
96142 }),
97- obvious (provider . ParameterFormTypeTextArea , formTypeCheck {
143+ obvious (formTypeCheck {
98144 options : false ,
99145 optionType : provider .OptionTypeString ,
100146 formType : provider .ParameterFormTypeTextArea ,
101147 }),
102- // Numbers
103- obvious (provider . ParameterFormTypeRadio , formTypeCheck {
148+ // Number
149+ obvious (formTypeCheck {
104150 options : true ,
105151 optionType : provider .OptionTypeNumber ,
152+ formType : provider .ParameterFormTypeDropdown ,
106153 }),
107- obvious (provider . ParameterFormTypeRadio , formTypeCheck {
154+ obvious (formTypeCheck {
108155 options : true ,
109156 optionType : provider .OptionTypeNumber ,
110157 formType : provider .ParameterFormTypeRadio ,
111158 }),
112- obvious (provider .ParameterFormTypeDropdown , formTypeCheck {
113- options : true ,
114- optionType : provider .OptionTypeNumber ,
115- formType : provider .ParameterFormTypeDropdown ,
116- }),
117- obvious (provider .ParameterFormTypeInput , formTypeCheck {
159+ obvious (formTypeCheck {
118160 options : false ,
119161 optionType : provider .OptionTypeNumber ,
162+ formType : provider .ParameterFormTypeInput ,
120163 }),
121- obvious (provider . ParameterFormTypeSlider , formTypeCheck {
164+ obvious (formTypeCheck {
122165 options : false ,
123166 optionType : provider .OptionTypeNumber ,
124167 formType : provider .ParameterFormTypeSlider ,
125168 }),
126- // booleans
127- obvious (provider . ParameterFormTypeRadio , formTypeCheck {
169+ // Boolean
170+ obvious (formTypeCheck {
128171 options : true ,
129172 optionType : provider .OptionTypeBoolean ,
173+ formType : provider .ParameterFormTypeRadio ,
130174 }),
131- obvious (provider . ParameterFormTypeCheckbox , formTypeCheck {
175+ obvious (formTypeCheck {
132176 options : false ,
133177 optionType : provider .OptionTypeBoolean ,
178+ formType : provider .ParameterFormTypeSwitch ,
134179 }),
135- obvious (provider . ParameterFormTypeCheckbox , formTypeCheck {
180+ obvious (formTypeCheck {
136181 options : false ,
137182 optionType : provider .OptionTypeBoolean ,
138183 formType : provider .ParameterFormTypeCheckbox ,
139184 }),
140- obvious (provider .ParameterFormTypeSwitch , formTypeCheck {
185+ // List(string)
186+ obvious (formTypeCheck {
187+ options : true ,
188+ optionType : provider .OptionTypeListString ,
189+ formType : provider .ParameterFormTypeRadio ,
190+ }),
191+ obvious (formTypeCheck {
192+ options : true ,
193+ optionType : provider .OptionTypeListString ,
194+ formType : provider .ParameterFormTypeMultiSelect ,
195+ customOptions : []string {"red" , "blue" , "green" },
196+ defValue : `["red", "blue"]` ,
197+ }),
198+ obvious (formTypeCheck {
141199 options : false ,
142- optionType : provider .OptionTypeBoolean ,
143- formType : provider .ParameterFormTypeSwitch ,
200+ optionType : provider .OptionTypeListString ,
201+ formType : provider .ParameterFormTypeTagSelect ,
144202 }),
145203 }
146204
147- // TabledCases runs through all the manual test cases
148- t . Run ( " TabledCases" , func ( t * testing. T ) {
205+ t . Run ( "TabledTests" , func ( t * testing. T ) {
206+ // TabledCases runs through all the manual test cases
149207 for _ , c := range cases {
150208 t .Run (c .name , func (t * testing.T ) {
151209 t .Parallel ()
@@ -154,6 +212,10 @@ func TestValidateFormType(t *testing.T) {
154212 }
155213
156214 formTypeTest (t , c )
215+ if _ , ok := formTypesChecked [c .config .String ()]; ok {
216+ t .Log ("Duplicated form type check, delete this extra test case" )
217+ t .Fatalf ("form type %q already checked" , c .config .String ())
218+ }
157219 formTypesChecked [c .config .String ()] = struct {}{}
158220 })
159221 }
@@ -221,29 +283,33 @@ func TestValidateFormType(t *testing.T) {
221283 })
222284}
223285
224- func ezconfig (paramName string , cfg formTypeCheck ) string {
286+ func ezconfig (paramName string , cfg formTypeCheck ) ( defaultValue string , tf string ) {
225287 var body strings.Builder
226- // if cfg.Default != "" {
227- // body.WriteString(fmt.Sprintf("default = %q\n", cfg.Default ))
228- // }
288+ if cfg .defValue != "" {
289+ body .WriteString (fmt .Sprintf ("default = %q\n " , cfg .defValue ))
290+ }
229291 if cfg .formType != "" {
230292 body .WriteString (fmt .Sprintf ("form_type = %q\n " , cfg .formType ))
231293 }
232294 if cfg .optionType != "" {
233295 body .WriteString (fmt .Sprintf ("type = %q\n " , cfg .optionType ))
234296 }
235297
236- var options [] string
237- if cfg .options {
298+ options := cfg . customOptions
299+ if cfg .options && len ( cfg . customOptions ) == 0 {
238300 switch cfg .optionType {
239301 case provider .OptionTypeString :
240302 options = []string {"foo" }
303+ defaultValue = "foo"
241304 case provider .OptionTypeBoolean :
242305 options = []string {"true" , "false" }
306+ defaultValue = "true"
243307 case provider .OptionTypeNumber :
244308 options = []string {"1" }
309+ defaultValue = "1"
245310 case provider .OptionTypeListString :
246311 options = []string {`["red", "blue"]` }
312+ defaultValue = `["red"]`
247313 default :
248314 panic (fmt .Sprintf ("unknown option type %q when generating options" , cfg .optionType ))
249315 }
@@ -256,31 +322,33 @@ func ezconfig(paramName string, cfg formTypeCheck) string {
256322 body .WriteString ("}\n " )
257323 }
258324
259- return coderParamHCL (paramName , body .String ())
260- }
261-
262- func coderParamHCL (paramName string , body string ) string {
263- return fmt .Sprintf (`
325+ if cfg .defValue == "" {
326+ cfg .defValue = defaultValue
327+ }
328+ return cfg .defValue , fmt .Sprintf (`
264329 provider "coder" {
265330 }
266331 data "coder_parameter" "%s" {
267332 name = "%s"
268333 %s
269334 }
270- ` , paramName , paramName , body )
335+ ` , paramName , paramName , body . String () )
271336}
272337
273338func formTypeTest (t * testing.T , c formTypeTestCase ) {
339+ t .Helper ()
274340 const paramName = "test_param"
275341
342+ def , tf := ezconfig (paramName , c .config )
343+ t .Logf ("Terraform config:\n %s" , tf )
276344 checkFn := func (state * terraform.State ) error {
277345 require .Len (t , state .Modules , 1 )
278346 require .Len (t , state .Modules [0 ].Resources , 1 )
279347
280348 key := strings .Join ([]string {"data" , "coder_parameter" , paramName }, "." )
281349 param := state .Modules [0 ].Resources [key ]
282350
283- // assert.Equal(t, c.assert.Default , param.Primary.Attributes["default"], "default value")
351+ assert .Equal (t , def , param .Primary .Attributes ["default" ], "default value" )
284352 assert .Equal (t , string (c .assert .FormType ), param .Primary .Attributes ["form_type" ], "form_type" )
285353 assert .Equal (t , string (c .assert .Type ), param .Primary .Attributes ["type" ], "type" )
286354 assert .JSONEq (t , c .assert .Styling , param .Primary .Attributes ["styling" ], "styling" )
@@ -303,7 +371,7 @@ func formTypeTest(t *testing.T, c formTypeTestCase) {
303371 ProviderFactories : coderFactory (),
304372 Steps : []resource.TestStep {
305373 {
306- Config : ezconfig ( paramName , c . config ) ,
374+ Config : tf ,
307375 Check : checkFn ,
308376 ExpectError : c .expectError ,
309377 },
0 commit comments