@@ -17,58 +17,128 @@ import (
17
17
func TestTemplateVersionPresets (t * testing.T ) {
18
18
t .Parallel ()
19
19
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
+ },
26
44
},
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
+ },
30
75
},
31
76
},
32
77
}
33
- ctx := testutil .Context (t ,testutil .WaitShort )
34
78
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 )
38
84
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 )
41
88
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 )
47
91
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 )
60
119
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 )
64
122
65
- gotPresets ,err := client .TemplateVersionPresets (userCtx ,version .ID )
66
- require .NoError (t ,err )
123
+ require .Equal (t ,len (tc .presets ),len (gotPresets ))
67
124
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
70
130
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
+ })
73
143
}
74
144
}