Skip to content

Commit e9a218c

Browse files
committed
feat: full implementation
Signed-off-by: Danny Kopping <dannykopping@gmail.com>
1 parent 0fb3743 commit e9a218c

File tree

15 files changed

+153
-14
lines changed

15 files changed

+153
-14
lines changed

coderd/apidoc/docs.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmem/dbmem.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9135,6 +9135,7 @@ func (q *FakeQuerier) InsertPreset(_ context.Context, arg database.InsertPresetP
91359135
Valid: true,
91369136
},
91379137
PrebuildStatus: database.PrebuildStatusHealthy,
9138+
IsDefault: arg.IsDefault,
91389139
}
91399140
q.presets = append(q.presets, preset)
91409141
return preset, nil

coderd/presets.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ func (api *API) templateVersionPresets(rw http.ResponseWriter, r *http.Request)
4141
var res []codersdk.Preset
4242
for _, preset := range presets {
4343
sdkPreset := codersdk.Preset{
44-
ID: preset.ID,
45-
Name: preset.Name,
44+
ID: preset.ID,
45+
Name: preset.Name,
46+
Default: preset.IsDefault,
4647
}
4748
for _, presetParam := range presetParams {
4849
if presetParam.TemplateVersionPresetID != preset.ID {

coderd/presets_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package coderd_test
22

33
import (
4+
"slices"
45
"testing"
56

7+
"github.com/stretchr/testify/assert"
68
"github.com/stretchr/testify/require"
79

810
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -138,3 +140,93 @@ func TestTemplateVersionPresets(t *testing.T) {
138140
})
139141
}
140142
}
143+
144+
func TestTemplateVersionPresetsDefault(t *testing.T) {
145+
t.Parallel()
146+
147+
type expectedPreset struct {
148+
name string
149+
isDefault bool
150+
}
151+
152+
cases := []struct {
153+
name string
154+
presets []database.InsertPresetParams
155+
expected []expectedPreset
156+
}{
157+
{
158+
name: "no presets",
159+
presets: nil,
160+
expected: nil,
161+
},
162+
{
163+
name: "single default preset",
164+
presets: []database.InsertPresetParams{
165+
{Name: "Default Preset", IsDefault: true},
166+
},
167+
expected: []expectedPreset{
168+
{name: "Default Preset", isDefault: true},
169+
},
170+
},
171+
{
172+
name: "single non-default preset",
173+
presets: []database.InsertPresetParams{
174+
{Name: "Regular Preset", IsDefault: false},
175+
},
176+
expected: []expectedPreset{
177+
{name: "Regular Preset", isDefault: false},
178+
},
179+
},
180+
{
181+
name: "mixed presets",
182+
presets: []database.InsertPresetParams{
183+
{Name: "Default Preset", IsDefault: true},
184+
{Name: "Regular Preset", IsDefault: false},
185+
},
186+
expected: []expectedPreset{
187+
{name: "Default Preset", isDefault: true},
188+
{name: "Regular Preset", isDefault: false},
189+
},
190+
},
191+
}
192+
193+
for _, tc := range cases {
194+
tc := tc
195+
t.Run(tc.name, func(t *testing.T) {
196+
t.Parallel()
197+
ctx := testutil.Context(t, testutil.WaitShort)
198+
199+
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
200+
user := coderdtest.CreateFirstUser(t, client)
201+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
202+
203+
// Create presets
204+
for _, preset := range tc.presets {
205+
preset.TemplateVersionID = version.ID
206+
_ = dbgen.Preset(t, db, preset)
207+
}
208+
209+
// Get presets via API
210+
userSubject, _, err := httpmw.UserRBACSubject(ctx, db, user.UserID, rbac.ScopeAll)
211+
require.NoError(t, err)
212+
userCtx := dbauthz.As(ctx, userSubject)
213+
214+
gotPresets, err := client.TemplateVersionPresets(userCtx, version.ID)
215+
require.NoError(t, err)
216+
217+
// Verify results
218+
require.Len(t, gotPresets, len(tc.expected))
219+
220+
for _, expected := range tc.expected {
221+
found := slices.ContainsFunc(gotPresets, func(preset codersdk.Preset) bool {
222+
if preset.Name != expected.name {
223+
return false
224+
}
225+
226+
return assert.Equal(t, expected.isDefault, preset.Default)
227+
})
228+
require.True(t, found, "Expected preset %s not found", expected.name)
229+
}
230+
})
231+
}
232+
}

codersdk/presets.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type Preset struct {
1414
ID uuid.UUID
1515
Name string
1616
Parameters []PresetParameter
17+
Default bool
1718
}
1819

1920
type PresetParameter struct {

docs/reference/api/schemas.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/api/templates.md

Lines changed: 10 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ replace github.com/aquasecurity/trivy => github.com/coder/trivy v0.0.0-202505271
7272
// https://github.com/spf13/afero/pull/487
7373
replace github.com/spf13/afero => github.com/aslilac/afero v0.0.0-20250403163713-f06e86036696
7474

75+
// TODO: replace once we cut release.
76+
replace github.com/coder/terraform-provider-coder/v2 => github.com/coder/terraform-provider-coder/v2 v2.5.4-0.20250618121935-71097ea9c886
77+
7578
require (
7679
cdr.dev/slog v1.6.2-0.20241112041820-0ec81e6e67bb
7780
cloud.google.com/go/compute/metadata v0.7.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -928,8 +928,8 @@ github.com/coder/tailscale v1.1.1-0.20250611020837-f14d20d23d8c h1:d/qBIi3Ez7Kko
928928
github.com/coder/tailscale v1.1.1-0.20250611020837-f14d20d23d8c/go.mod h1:l7ml5uu7lFh5hY28lGYM4b/oFSmuPHYX6uk4RAu23Lc=
929929
github.com/coder/terraform-config-inspect v0.0.0-20250107175719-6d06d90c630e h1:JNLPDi2P73laR1oAclY6jWzAbucf70ASAvf5mh2cME0=
930930
github.com/coder/terraform-config-inspect v0.0.0-20250107175719-6d06d90c630e/go.mod h1:Gz/z9Hbn+4KSp8A2FBtNszfLSdT2Tn/uAKGuVqqWmDI=
931-
github.com/coder/terraform-provider-coder/v2 v2.5.3 h1:EwqIIQKe/j8bsR4WyDJ3bD0dVdkfVqJ43TwClyGneUU=
932-
github.com/coder/terraform-provider-coder/v2 v2.5.3/go.mod h1:kqP2MW/OF5u3QBRPDt84vn1izKjncICFfv26nSb781I=
931+
github.com/coder/terraform-provider-coder/v2 v2.5.4-0.20250618121935-71097ea9c886 h1:Oo9rlMzBaI+dCr/LQhTQF0H4IJes24tGb+7XRN2aiD4=
932+
github.com/coder/terraform-provider-coder/v2 v2.5.4-0.20250618121935-71097ea9c886/go.mod h1:WrdLSbihuzH1RZhwrU+qmkqEhUbdZT/sjHHdarm5b5g=
933933
github.com/coder/trivy v0.0.0-20250527170238-9416a59d7019 h1:MHkv/W7l9eRAN9gOG0qZ1TLRGWIIfNi92273vPAQ8Fs=
934934
github.com/coder/trivy v0.0.0-20250527170238-9416a59d7019/go.mod h1:eqk+w9RLBmbd/cB5XfPZFuVn77cf/A6fB7qmEVeSmXk=
935935
github.com/coder/websocket v1.8.13 h1:f3QZdXy7uGVz+4uCJy2nTZyM0yTBj8yANEHhqlXZ9FE=

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy