Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite9a218c

Browse files
committed
feat: full implementation
Signed-off-by: Danny Kopping <dannykopping@gmail.com>
1 parent0fb3743 commite9a218c

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 aboutcustomizing 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 aboutcustomizing 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
returnpreset,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
varres []codersdk.Preset
4242
for_,preset:=rangepresets {
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:=rangepresetParams {
4849
ifpresetParam.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+
funcTestTemplateVersionPresetsDefault(t*testing.T) {
145+
t.Parallel()
146+
147+
typeexpectedPresetstruct {
148+
namestring
149+
isDefaultbool
150+
}
151+
152+
cases:= []struct {
153+
namestring
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:=rangecases {
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:=rangetc.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:=rangetc.expected {
221+
found:=slices.ContainsFunc(gotPresets,func(preset codersdk.Preset)bool {
222+
ifpreset.Name!=expected.name {
223+
returnfalse
224+
}
225+
226+
returnassert.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
Namestring
1616
Parameters []PresetParameter
17+
Defaultbool
1718
}
1819

1920
typePresetParameterstruct {

‎docs/reference/api/schemas.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing 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 aboutcustomizing 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
replacegithub.com/spf13/afero =>github.com/aslilac/aferov0.0.0-20250403163713-f06e86036696
7474

75+
// TODO: replace once we cut release.
76+
replacegithub.com/coder/terraform-provider-coder/v2 =>github.com/coder/terraform-provider-coder/v2v2.5.4-0.20250618121935-71097ea9c886
77+
7578
require (
7679
cdr.dev/slogv1.6.2-0.20241112041820-0ec81e6e67bb
7780
cloud.google.com/go/compute/metadatav0.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/tailscalev1.1.1-0.20250611020837-f14d20d23d8c/go.mod h1:l7ml5uu7lFh5hY28lGYM4b/oFSmuPHYX6uk4RAu23Lc=
929929
github.com/coder/terraform-config-inspectv0.0.0-20250107175719-6d06d90c630e h1:JNLPDi2P73laR1oAclY6jWzAbucf70ASAvf5mh2cME0=
930930
github.com/coder/terraform-config-inspectv0.0.0-20250107175719-6d06d90c630e/go.mod h1:Gz/z9Hbn+4KSp8A2FBtNszfLSdT2Tn/uAKGuVqqWmDI=
931-
github.com/coder/terraform-provider-coder/v2v2.5.3 h1:EwqIIQKe/j8bsR4WyDJ3bD0dVdkfVqJ43TwClyGneUU=
932-
github.com/coder/terraform-provider-coder/v2v2.5.3/go.mod h1:kqP2MW/OF5u3QBRPDt84vn1izKjncICFfv26nSb781I=
931+
github.com/coder/terraform-provider-coder/v2v2.5.4-0.20250618121935-71097ea9c886 h1:Oo9rlMzBaI+dCr/LQhTQF0H4IJes24tGb+7XRN2aiD4=
932+
github.com/coder/terraform-provider-coder/v2v2.5.4-0.20250618121935-71097ea9c886/go.mod h1:WrdLSbihuzH1RZhwrU+qmkqEhUbdZT/sjHHdarm5b5g=
933933
github.com/coder/trivyv0.0.0-20250527170238-9416a59d7019 h1:MHkv/W7l9eRAN9gOG0qZ1TLRGWIIfNi92273vPAQ8Fs=
934934
github.com/coder/trivyv0.0.0-20250527170238-9416a59d7019/go.mod h1:eqk+w9RLBmbd/cB5XfPZFuVn77cf/A6fB7qmEVeSmXk=
935935
github.com/coder/websocketv1.8.13 h1:f3QZdXy7uGVz+4uCJy2nTZyM0yTBj8yANEHhqlXZ9FE=

‎site/e2e/provisionerGenerated.ts

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

‎site/src/api/typesGenerated.ts

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ export const PresetsButNoneSelected: Story = {
125125
{
126126
ID:"preset-1",
127127
Name:"Preset 1",
128+
Default:false,
128129
Parameters:[
129130
{
130131
Name:MockTemplateVersionParameter1.name,
@@ -135,6 +136,7 @@ export const PresetsButNoneSelected: Story = {
135136
{
136137
ID:"preset-2",
137138
Name:"Preset 2",
139+
Default:true,
138140
Parameters:[
139141
{
140142
Name:MockTemplateVersionParameter2.name,

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,24 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
156156
setPresetOptions([
157157
{label:"None",value:""},
158158
...presets.map((preset)=>({
159-
label:preset.Name,
159+
label:preset.Default ?`${preset.Name} (Default)` :preset.Name,
160160
value:preset.ID,
161161
})),
162162
]);
163163
},[presets]);
164164

165165
const[selectedPresetIndex,setSelectedPresetIndex]=useState(0);
166+
167+
// Set default preset when presets are loaded
168+
useEffect(()=>{
169+
constdefaultPreset=presets.find((preset)=>preset.Default);
170+
if(defaultPreset){
171+
// +1 because "None" is at index 0
172+
constdefaultIndex=
173+
presets.findIndex((preset)=>preset.ID===defaultPreset.ID)+1;
174+
setSelectedPresetIndex(defaultIndex);
175+
}
176+
},[presets]);
166177
const[presetParameterNames,setPresetParameterNames]=useState<string[]>(
167178
[],
168179
);

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,25 @@ export const CreateWorkspacePageViewExperimental: FC<
190190
setPresetOptions([
191191
{label:"None",value:"None"},
192192
...presets.map((preset)=>({
193-
label:preset.Name,
193+
label:preset.Default ?`${preset.Name} (Default)` :preset.Name,
194194
value:preset.ID,
195195
})),
196196
]);
197197
},[presets]);
198198

199199
const[selectedPresetIndex,setSelectedPresetIndex]=useState(0);
200+
201+
// Set default preset when presets are loaded
202+
useEffect(()=>{
203+
constdefaultPreset=presets.find((preset)=>preset.Default);
204+
if(defaultPreset){
205+
// +1 because "None" is at index 0
206+
constdefaultIndex=
207+
presets.findIndex((preset)=>preset.ID===defaultPreset.ID)+1;
208+
setSelectedPresetIndex(defaultIndex);
209+
}
210+
},[presets]);
211+
200212
const[presetParameterNames,setPresetParameterNames]=useState<string[]>(
201213
[],
202214
);
@@ -555,6 +567,7 @@ export const CreateWorkspacePageViewExperimental: FC<
555567
<divclassName="flex flex-col gap-4">
556568
<divclassName="max-w-lg">
557569
<Select
570+
value={presetOptions[selectedPresetIndex]?.value}
558571
onValueChange={(option)=>{
559572
constindex=presetOptions.findIndex(
560573
(preset)=>preset.value===option,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp