@@ -42,7 +42,7 @@ func Test_Extract(t *testing.T) {
4242 expTags map [string ]string
4343 unknownTags []string
4444 params map [string ]assertParam
45- presets []types.Preset
45+ presets func ( t * testing. T , presets []types.Preset )
4646 warnings []* regexp.Regexp
4747 }{
4848 {
@@ -243,6 +243,80 @@ func Test_Extract(t *testing.T) {
243243 errorDiagnostics ("Required" ),
244244 },
245245 },
246+ {
247+ name : "empty preset" ,
248+ dir : "emptypreset" ,
249+ expTags : map [string ]string {},
250+ input : preview.Input {},
251+ unknownTags : []string {},
252+ presets : func (t * testing.T , presets []types.Preset ) {
253+ require .Len (t , presets , 1 )
254+ preset := presets [0 ]
255+ require .Len (t , preset .Diagnostics , 1 )
256+ require .Equal (t , preset .Diagnostics [0 ].Summary , "Invalid \" name\" attribute for block coder_workspace_preset.test" )
257+ require .Equal (t , preset .Diagnostics [0 ].Detail , "Expected a string, got \" <nil>\" " )
258+ },
259+ failPreview : false ,
260+ },
261+ {
262+ name : "invalid presets" ,
263+ dir : "invalidpresets" ,
264+ expTags : map [string ]string {},
265+ input : preview.Input {},
266+ unknownTags : []string {},
267+ params : map [string ]assertParam {
268+ "valid_parameter_name" : ap ().
269+ optVals ("valid_option_value" ),
270+ },
271+ presets : func (t * testing.T , presets []types.Preset ) {
272+ presetMap := map [string ]func (t * testing.T , preset types.Preset ){
273+ "" : func (t * testing.T , preset types.Preset ) {
274+ require .Len (t , preset .Diagnostics , 0 )
275+ },
276+ "empty_parameters" : func (t * testing.T , preset types.Preset ) {
277+ require .Len (t , preset .Diagnostics , 0 )
278+ },
279+ "no_parameters" : func (t * testing.T , preset types.Preset ) {
280+ require .Len (t , preset .Diagnostics , 0 )
281+ },
282+ "invalid_parameter_name" : func (t * testing.T , preset types.Preset ) {
283+ require .Len (t , preset .Diagnostics , 1 )
284+ require .Equal (t , preset .Diagnostics [0 ].Summary , "Undefined Parameter" )
285+ require .Equal (t , preset .Diagnostics [0 ].Detail , "Preset parameter \" invalid_parameter_name\" is not defined by the template." )
286+ },
287+ "invalid_parameter_value" : func (t * testing.T , preset types.Preset ) {
288+ require .Len (t , preset .Diagnostics , 1 )
289+ require .Equal (t , preset .Diagnostics [0 ].Summary , "Value must be a valid option" )
290+ require .Equal (t , preset .Diagnostics [0 ].Detail , "the value \" invalid_value\" must be defined as one of options" )
291+ },
292+ "valid_preset" : func (t * testing.T , preset types.Preset ) {
293+ require .Len (t , preset .Diagnostics , 0 )
294+ require .Equal (t , preset .Parameters , map [string ]string {
295+ "valid_parameter_name" : "valid_option_value" ,
296+ })
297+ },
298+ }
299+
300+ for _ , preset := range presets {
301+ if fn , ok := presetMap [preset .Name ]; ok {
302+ fn (t , preset )
303+ }
304+ }
305+
306+ var defaultPresetsWithError int
307+ for _ , preset := range presets {
308+ if preset .Name == "default_preset" || preset .Name == "another_default_preset" {
309+ for _ , diag := range preset .Diagnostics {
310+ if diag .Summary == "Multiple default presets" {
311+ defaultPresetsWithError ++
312+ break
313+ }
314+ }
315+ }
316+ }
317+ require .Equal (t , 1 , defaultPresetsWithError , "exactly one default preset should have the multiple defaults error" )
318+ },
319+ },
246320 {
247321 name : "required" ,
248322 dir : "required" ,
@@ -545,8 +619,10 @@ func Test_Extract(t *testing.T) {
545619 check (t , param )
546620 }
547621
548- presets , diags := preview .PreviewPresets (context .Background (), dirFs )
549- assert .ElementsMatch (t , tc .presets , presets )
622+ // Assert presets
623+ if tc .presets != nil {
624+ tc .presets (t , output .Presets )
625+ }
550626 })
551627 }
552628}
0 commit comments