@@ -17,58 +17,128 @@ import (
1717func TestTemplateVersionPresets (t * testing.T ) {
1818 t .Parallel ()
1919
20- givenPreset := codersdk.Preset {
21- Name : "My Preset" ,
22- Parameters : []codersdk.PresetParameter {
23- {
24- Name : "preset_param1" ,
25- Value : "A1B2C3" ,
20+ testCases := []struct {
21+ name string
22+ presets []codersdk.Preset
23+ }{
24+ {
25+ name : "no presets" ,
26+ presets : []codersdk.Preset {},
27+ },
28+ {
29+ name : "single preset with parameters" ,
30+ presets : []codersdk.Preset {
31+ {
32+ Name : "My Preset" ,
33+ Parameters : []codersdk.PresetParameter {
34+ {
35+ Name : "preset_param1" ,
36+ Value : "A1B2C3" ,
37+ },
38+ {
39+ Name : "preset_param2" ,
40+ Value : "D4E5F6" ,
41+ },
42+ },
43+ },
2644 },
27- {
28- Name : "preset_param2" ,
29- Value : "D4E5F6" ,
45+ },
46+ {
47+ name : "multiple presets with overlapping parameters" ,
48+ presets : []codersdk.Preset {
49+ {
50+ Name : "Preset 1" ,
51+ Parameters : []codersdk.PresetParameter {
52+ {
53+ Name : "shared_param" ,
54+ Value : "value1" ,
55+ },
56+ {
57+ Name : "unique_param1" ,
58+ Value : "unique1" ,
59+ },
60+ },
61+ },
62+ {
63+ Name : "Preset 2" ,
64+ Parameters : []codersdk.PresetParameter {
65+ {
66+ Name : "shared_param" ,
67+ Value : "value2" ,
68+ },
69+ {
70+ Name : "unique_param2" ,
71+ Value : "unique2" ,
72+ },
73+ },
74+ },
3075 },
3176 },
3277 }
33- ctx := testutil .Context (t , testutil .WaitShort )
3478
35- client , db := coderdtest .NewWithDatabase (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
36- user := coderdtest .CreateFirstUser (t , client )
37- version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
79+ for _ , tc := range testCases {
80+ tc := tc
81+ t .Run (tc .name , func (t * testing.T ) {
82+ t .Parallel ()
83+ ctx := testutil .Context (t , testutil .WaitShort )
3884
39- // nolint:gocritic // This is a test
40- provisionerCtx := dbauthz .AsProvisionerd (ctx )
85+ client , db := coderdtest .NewWithDatabase (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
86+ user := coderdtest .CreateFirstUser (t , client )
87+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
4188
42- dbPreset , err := db .InsertPreset (provisionerCtx , database.InsertPresetParams {
43- Name : givenPreset .Name ,
44- TemplateVersionID : version .ID ,
45- })
46- require .NoError (t , err )
89+ // nolint:gocritic // This is a test
90+ provisionerCtx := dbauthz .AsProvisionerd (ctx )
4791
48- var presetParameterNames []string
49- var presetParameterValues []string
50- for _ , presetParameter := range givenPreset .Parameters {
51- presetParameterNames = append (presetParameterNames , presetParameter .Name )
52- presetParameterValues = append (presetParameterValues , presetParameter .Value )
53- }
54- _ , err = db .InsertPresetParameters (provisionerCtx , database.InsertPresetParametersParams {
55- TemplateVersionPresetID : dbPreset .ID ,
56- Names : presetParameterNames ,
57- Values : presetParameterValues ,
58- })
59- require .NoError (t , err )
92+ // Insert all presets for this test case
93+ for _ , givenPreset := range tc .presets {
94+ dbPreset , err := db .InsertPreset (provisionerCtx , database.InsertPresetParams {
95+ Name : givenPreset .Name ,
96+ TemplateVersionID : version .ID ,
97+ })
98+ require .NoError (t , err )
99+
100+ if len (givenPreset .Parameters ) > 0 {
101+ var presetParameterNames []string
102+ var presetParameterValues []string
103+ for _ , presetParameter := range givenPreset .Parameters {
104+ presetParameterNames = append (presetParameterNames , presetParameter .Name )
105+ presetParameterValues = append (presetParameterValues , presetParameter .Value )
106+ }
107+ _ , err = db .InsertPresetParameters (provisionerCtx , database.InsertPresetParametersParams {
108+ TemplateVersionPresetID : dbPreset .ID ,
109+ Names : presetParameterNames ,
110+ Values : presetParameterValues ,
111+ })
112+ require .NoError (t , err )
113+ }
114+ }
115+
116+ userSubject , _ , err := httpmw .UserRBACSubject (ctx , db , user .UserID , rbac .ScopeAll )
117+ require .NoError (t , err )
118+ userCtx := dbauthz .As (ctx , userSubject )
60119
61- userSubject , _ , err := httpmw .UserRBACSubject (ctx , db , user .UserID , rbac .ScopeAll )
62- require .NoError (t , err )
63- userCtx := dbauthz .As (ctx , userSubject )
120+ gotPresets , err := client .TemplateVersionPresets (userCtx , version .ID )
121+ require .NoError (t , err )
64122
65- gotPresets , err := client .TemplateVersionPresets (userCtx , version .ID )
66- require .NoError (t , err )
123+ require .Equal (t , len (tc .presets ), len (gotPresets ))
67124
68- require .Equal (t , 1 , len (gotPresets ))
69- require .Equal (t , givenPreset .Name , gotPresets [0 ].Name )
125+ for _ , expectedPreset := range tc .presets {
126+ found := false
127+ for _ , gotPreset := range gotPresets {
128+ if gotPreset .Name == expectedPreset .Name {
129+ found = true
70130
71- for _ , presetParameter := range givenPreset .Parameters {
72- require .Contains (t , gotPresets [0 ].Parameters , presetParameter )
131+ // verify not only that we get the right number of parameters, but that we get the right parameters
132+ // This ensures that we don't get extra parameters from other presets
133+ require .Equal (t , len (expectedPreset .Parameters ), len (gotPreset .Parameters ))
134+ for _ , expectedParam := range expectedPreset .Parameters {
135+ require .Contains (t , gotPreset .Parameters , expectedParam )
136+ }
137+ break
138+ }
139+ }
140+ require .True (t , found , "Expected preset %s not found in results" , expectedPreset .Name )
141+ }
142+ })
73143 }
74144}
0 commit comments