@@ -43,6 +43,7 @@ func Test_Extract(t *testing.T) {
4343 expTags map [string ]string
4444 unknownTags []string
4545 params map [string ]assertParam
46+ presets func (t * testing.T , presets []types.Preset )
4647 warnings []* regexp.Regexp
4748 }{
4849 {
@@ -243,6 +244,62 @@ func Test_Extract(t *testing.T) {
243244 errorDiagnostics ("Required" ),
244245 },
245246 },
247+ {
248+ name : "invalid presets" ,
249+ dir : "invalidpresets" ,
250+ expTags : map [string ]string {},
251+ input : preview.Input {},
252+ unknownTags : []string {},
253+ params : map [string ]assertParam {
254+ "valid_parameter_name" : ap ().
255+ optVals ("valid_option_value" ),
256+ },
257+ presets : func (t * testing.T , presets []types.Preset ) {
258+ presetMap := map [string ]func (t * testing.T , preset types.Preset ){
259+ "empty_parameters" : func (t * testing.T , preset types.Preset ) {
260+ require .Len (t , preset .Diagnostics , 0 )
261+ },
262+ "no_parameters" : func (t * testing.T , preset types.Preset ) {
263+ require .Len (t , preset .Diagnostics , 0 )
264+ },
265+ "invalid_parameter_name" : func (t * testing.T , preset types.Preset ) {
266+ require .Len (t , preset .Diagnostics , 1 )
267+ require .Equal (t , preset .Diagnostics [0 ].Summary , "Undefined Parameter" )
268+ require .Equal (t , preset .Diagnostics [0 ].Detail , "Preset parameter \" invalid_parameter_name\" is not defined by the template." )
269+ },
270+ "invalid_parameter_value" : func (t * testing.T , preset types.Preset ) {
271+ require .Len (t , preset .Diagnostics , 1 )
272+ require .Equal (t , preset .Diagnostics [0 ].Summary , "Value must be a valid option" )
273+ require .Equal (t , preset .Diagnostics [0 ].Detail , "the value \" invalid_value\" must be defined as one of options" )
274+ },
275+ "valid_preset" : func (t * testing.T , preset types.Preset ) {
276+ require .Len (t , preset .Diagnostics , 0 )
277+ require .Equal (t , preset .Parameters , map [string ]string {
278+ "valid_parameter_name" : "valid_option_value" ,
279+ })
280+ },
281+ }
282+
283+ for _ , preset := range presets {
284+ if fn , ok := presetMap [preset .Name ]; ok {
285+ fn (t , preset )
286+ }
287+ }
288+
289+ var defaultPresetsWithError int
290+ for _ , preset := range presets {
291+ if preset .Name == "default_preset" || preset .Name == "another_default_preset" {
292+ for _ , diag := range preset .Diagnostics {
293+ if diag .Summary == "Multiple default presets" {
294+ defaultPresetsWithError ++
295+ break
296+ }
297+ }
298+ }
299+ }
300+ require .Equal (t , 1 , defaultPresetsWithError , "exactly one default preset should have the multiple defaults error" )
301+ },
302+ },
246303 {
247304 name : "required" ,
248305 dir : "required" ,
@@ -575,6 +632,11 @@ func Test_Extract(t *testing.T) {
575632 require .True (t , ok , "unknown parameter %s" , param .Name )
576633 check (t , param )
577634 }
635+
636+ // Assert presets
637+ if tc .presets != nil {
638+ tc .presets (t , output .Presets )
639+ }
578640 })
579641 }
580642}
0 commit comments