@@ -89,28 +89,86 @@ func TestWorkspaceToK8s(t *testing.T) {
8989 }
9090}
9191
92- func TestWorkspaceToK8sInfersRunningFromBuildStatus (t * testing.T ) {
92+ func TestWorkspaceToK8sRunningStateFromTransitionAndStatus (t * testing.T ) {
9393 t .Parallel ()
9494
95- workspace := codersdk.Workspace {
96- ID : uuid .New (),
97- CreatedAt : time .Now ().UTC (),
98- UpdatedAt : time .Now ().UTC (),
99- OwnerName : "alice" ,
100- OrganizationName : "acme" ,
101- TemplateName : "starter-template" ,
102- Name : "dev-workspace" ,
103- LastUsedAt : time .Now ().UTC (),
104- LatestBuild : codersdk.WorkspaceBuild {
105- ID : uuid .New (),
106- Transition : codersdk .WorkspaceTransitionStop ,
107- Status : codersdk .WorkspaceStatusRunning ,
95+ testCases := []struct {
96+ name string
97+ transition codersdk.WorkspaceTransition
98+ status codersdk.WorkspaceStatus
99+ running bool
100+ }{
101+ {
102+ name : "start pending" ,
103+ transition : codersdk .WorkspaceTransitionStart ,
104+ status : codersdk .WorkspaceStatusPending ,
105+ running : true ,
106+ },
107+ {
108+ name : "start starting" ,
109+ transition : codersdk .WorkspaceTransitionStart ,
110+ status : codersdk .WorkspaceStatusStarting ,
111+ running : true ,
112+ },
113+ {
114+ name : "start running" ,
115+ transition : codersdk .WorkspaceTransitionStart ,
116+ status : codersdk .WorkspaceStatusRunning ,
117+ running : true ,
118+ },
119+ {
120+ name : "start failed" ,
121+ transition : codersdk .WorkspaceTransitionStart ,
122+ status : codersdk .WorkspaceStatusFailed ,
123+ running : false ,
124+ },
125+ {
126+ name : "start canceled" ,
127+ transition : codersdk .WorkspaceTransitionStart ,
128+ status : codersdk .WorkspaceStatusCanceled ,
129+ running : false ,
130+ },
131+ {
132+ name : "stop running" ,
133+ transition : codersdk .WorkspaceTransitionStop ,
134+ status : codersdk .WorkspaceStatusRunning ,
135+ running : false ,
108136 },
109137 }
110138
111- converted := WorkspaceToK8s ("control-plane" , workspace )
112- if ! converted .Spec .Running {
113- t .Fatal ("expected running=true when latest build status is running" )
139+ for _ , testCase := range testCases {
140+ testCase := testCase
141+ t .Run (testCase .name , func (t * testing.T ) {
142+ t .Parallel ()
143+
144+ now := time .Date (2025 , time .February , 2 , 3 , 4 , 5 , 0 , time .UTC )
145+ workspace := codersdk.Workspace {
146+ ID : uuid .New (),
147+ CreatedAt : now ,
148+ UpdatedAt : now ,
149+ OwnerName : "alice" ,
150+ OrganizationName : "acme" ,
151+ TemplateName : "starter-template" ,
152+ Name : "dev-workspace" ,
153+ LastUsedAt : now ,
154+ LatestBuild : codersdk.WorkspaceBuild {
155+ ID : uuid .New (),
156+ Transition : testCase .transition ,
157+ Status : testCase .status ,
158+ },
159+ }
160+
161+ converted := WorkspaceToK8s ("control-plane" , workspace )
162+ if converted .Spec .Running != testCase .running {
163+ t .Fatalf (
164+ "expected running=%t for transition=%q status=%q, got %t" ,
165+ testCase .running ,
166+ testCase .transition ,
167+ testCase .status ,
168+ converted .Spec .Running ,
169+ )
170+ }
171+ })
114172 }
115173}
116174
@@ -135,10 +193,54 @@ func TestWorkspaceCreateRequestFromK8s(t *testing.T) {
135193 if request .TemplateID != templateID {
136194 t .Fatalf ("expected request template ID %q, got %q" , templateID , request .TemplateID )
137195 }
196+ if request .TemplateVersionID != uuid .Nil {
197+ t .Fatalf ("expected request template version ID %q, got %q" , uuid .Nil , request .TemplateVersionID )
198+ }
138199 if request .TTLMillis == nil || * request .TTLMillis != ttlMillis {
139200 t .Fatalf ("expected request TTL millis %d, got %+v" , ttlMillis , request .TTLMillis )
140201 }
141202 if request .AutostartSchedule == nil || * request .AutostartSchedule != autostartSchedule {
142203 t .Fatalf ("expected request autostart schedule %q, got %+v" , autostartSchedule , request .AutostartSchedule )
143204 }
144205}
206+
207+ func TestWorkspaceCreateRequestFromK8sUsesTemplateVersionID (t * testing.T ) {
208+ t .Parallel ()
209+
210+ templateID := uuid .New ()
211+ templateVersionID := uuid .New ()
212+
213+ obj := & aggregationv1alpha1.CoderWorkspace {
214+ Spec : aggregationv1alpha1.CoderWorkspaceSpec {
215+ TemplateVersionID : templateVersionID .String (),
216+ },
217+ }
218+
219+ request := WorkspaceCreateRequestFromK8s (obj , "dev-workspace" , templateID )
220+ if request .TemplateVersionID != templateVersionID {
221+ t .Fatalf ("expected request template version ID %q, got %q" , templateVersionID , request .TemplateVersionID )
222+ }
223+ if request .TemplateID != uuid .Nil {
224+ t .Fatalf ("expected request template ID %q, got %q" , uuid .Nil , request .TemplateID )
225+ }
226+ }
227+
228+ func TestWorkspaceCreateRequestFromK8sFallsBackToTemplateIDForInvalidTemplateVersionID (t * testing.T ) {
229+ t .Parallel ()
230+
231+ templateID := uuid .New ()
232+
233+ obj := & aggregationv1alpha1.CoderWorkspace {
234+ Spec : aggregationv1alpha1.CoderWorkspaceSpec {
235+ TemplateVersionID : "not-a-uuid" ,
236+ },
237+ }
238+
239+ request := WorkspaceCreateRequestFromK8s (obj , "dev-workspace" , templateID )
240+ if request .TemplateID != templateID {
241+ t .Fatalf ("expected request template ID %q, got %q" , templateID , request .TemplateID )
242+ }
243+ if request .TemplateVersionID != uuid .Nil {
244+ t .Fatalf ("expected request template version ID %q, got %q" , uuid .Nil , request .TemplateVersionID )
245+ }
246+ }
0 commit comments