Skip to content

Commit c1c3040

Browse files
committed
added test
1 parent 39c1435 commit c1c3040

File tree

3 files changed

+91
-44
lines changed

3 files changed

+91
-44
lines changed

coderd/workspaces_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net/http"
77
"strings"
8+
"sync/atomic"
89
"testing"
910
"time"
1011

@@ -1007,6 +1008,61 @@ func TestWorkspaceFilterManual(t *testing.T) {
10071008
return workspaces.Count == 1
10081009
}, testutil.IntervalMedium, "agent status timeout")
10091010
})
1011+
1012+
t.Run("FilterQueryHasDeletingBy", func(t *testing.T) {
1013+
t.Parallel()
1014+
inactivityTTL := 1 * 24 * time.Hour
1015+
var setCalled int64
1016+
1017+
client := coderdtest.New(t, &coderdtest.Options{
1018+
IncludeProvisionerDaemon: true,
1019+
TemplateScheduleStore: schedule.MockTemplateScheduleStore{
1020+
SetFn: func(ctx context.Context, db database.Store, template database.Template, options schedule.TemplateScheduleOptions) (database.Template, error) {
1021+
if atomic.AddInt64(&setCalled, 1) == 2 {
1022+
require.Equal(t, inactivityTTL, options.InactivityTTL)
1023+
}
1024+
template.InactivityTTL = int64(options.InactivityTTL)
1025+
return template, nil
1026+
},
1027+
},
1028+
})
1029+
user := coderdtest.CreateFirstUser(t, client)
1030+
authToken := uuid.NewString()
1031+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
1032+
Parse: echo.ParseComplete,
1033+
ProvisionPlan: echo.ProvisionComplete,
1034+
ProvisionApply: echo.ProvisionApplyWithAgent(authToken),
1035+
})
1036+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
1037+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1038+
1039+
// update template with inactivity ttl
1040+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1041+
defer cancel()
1042+
1043+
template, err := client.UpdateTemplateMeta(ctx, template.ID, codersdk.UpdateTemplateMeta{
1044+
InactivityTTLMillis: inactivityTTL.Milliseconds(),
1045+
})
1046+
1047+
require.NoError(t, err)
1048+
require.Equal(t, inactivityTTL.Milliseconds(), template.InactivityTTLMillis)
1049+
1050+
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
1051+
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
1052+
1053+
// stop build so workspace is inactive
1054+
stopBuild := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStop)
1055+
coderdtest.AwaitWorkspaceBuildJob(t, client, stopBuild.ID)
1056+
1057+
res, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{
1058+
FilterQuery: fmt.Sprintf("deleting_by:%s", time.Now().Add(inactivityTTL).Format("2006-01-02")),
1059+
})
1060+
1061+
require.NoError(t, err)
1062+
require.Len(t, res.Workspaces, 1)
1063+
require.Equal(t, workspace.ID, res.Workspaces[0].ID)
1064+
})
1065+
10101066
}
10111067

10121068
func TestOffsetLimit(t *testing.T) {

site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Checkbox from "@mui/material/Checkbox"
2020
import FormControlLabel from "@mui/material/FormControlLabel"
2121
import Switch from "@mui/material/Switch"
2222
import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog"
23+
import { useWorkspacesData } from "pages/WorkspacesPage/data"
2324

2425
const TTLHelperText = ({
2526
ttl,
@@ -149,25 +150,7 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
149150
if (form.values.inactivity_cleanup_enabled) {
150151
setIsInactivityDialogOpen(true)
151152
} else {
152-
actuallySubmit(formData)
153-
// on submit, convert from hours => ms
154-
// onSubmit({
155-
// default_ttl_ms: formData.default_ttl_ms
156-
// ? formData.default_ttl_ms * MS_HOUR_CONVERSION
157-
// : undefined,
158-
// max_ttl_ms: formData.max_ttl_ms
159-
// ? formData.max_ttl_ms * MS_HOUR_CONVERSION
160-
// : undefined,
161-
// failure_ttl_ms: formData.failure_ttl_ms
162-
// ? formData.failure_ttl_ms * MS_DAY_CONVERSION
163-
// : undefined,
164-
// inactivity_ttl_ms: formData.inactivity_ttl_ms
165-
// ? formData.inactivity_ttl_ms * MS_DAY_CONVERSION
166-
// : undefined,
167-
168-
// allow_user_autostart: formData.allow_user_autostart,
169-
// allow_user_autostop: formData.allow_user_autostop,
170-
// })
153+
submitValues(formData)
171154
}
172155
},
173156
initialTouched,
@@ -181,6 +164,35 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
181164
const [isInactivityDialogOpen, setIsInactivityDialogOpen] =
182165
useState<boolean>(false)
183166

167+
const submitValues = (formData: TemplateScheduleFormValues) => {
168+
// on submit, convert from hours => ms
169+
onSubmit({
170+
default_ttl_ms: formData.default_ttl_ms
171+
? formData.default_ttl_ms * MS_HOUR_CONVERSION
172+
: undefined,
173+
max_ttl_ms: formData.max_ttl_ms
174+
? formData.max_ttl_ms * MS_HOUR_CONVERSION
175+
: undefined,
176+
failure_ttl_ms: formData.failure_ttl_ms
177+
? formData.failure_ttl_ms * MS_DAY_CONVERSION
178+
: undefined,
179+
inactivity_ttl_ms: formData.inactivity_ttl_ms
180+
? formData.inactivity_ttl_ms * MS_DAY_CONVERSION
181+
: undefined,
182+
183+
allow_user_autostart: formData.allow_user_autostart,
184+
allow_user_autostop: formData.allow_user_autostop,
185+
})
186+
}
187+
188+
const { data: workspacesData, error: getWorkspacesError } = useWorkspacesData(
189+
{
190+
query: "deleting_by:2023-05-12",
191+
},
192+
)
193+
194+
console.log("workspacesData", workspacesData)
195+
184196
const handleToggleFailureCleanup = async (e: ChangeEvent) => {
185197
form.handleChange(e)
186198
if (!form.values.failure_cleanup_enabled) {
@@ -219,27 +231,6 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
219231
}
220232
}
221233

222-
const actuallySubmit = (formData: any) => {
223-
// on submit, convert from hours => ms
224-
onSubmit({
225-
default_ttl_ms: formData.default_ttl_ms
226-
? formData.default_ttl_ms * MS_HOUR_CONVERSION
227-
: undefined,
228-
max_ttl_ms: formData.max_ttl_ms
229-
? formData.max_ttl_ms * MS_HOUR_CONVERSION
230-
: undefined,
231-
failure_ttl_ms: formData.failure_ttl_ms
232-
? formData.failure_ttl_ms * MS_DAY_CONVERSION
233-
: undefined,
234-
inactivity_ttl_ms: formData.inactivity_ttl_ms
235-
? formData.inactivity_ttl_ms * MS_DAY_CONVERSION
236-
: undefined,
237-
238-
allow_user_autostart: formData.allow_user_autostart,
239-
allow_user_autostop: formData.allow_user_autostop,
240-
})
241-
}
242-
243234
return (
244235
<HorizontalForm
245236
onSubmit={form.handleSubmit}
@@ -422,7 +413,7 @@ export const TemplateScheduleForm: FC<TemplateScheduleForm> = ({
422413
<ConfirmDialog
423414
type="delete"
424415
open={isInactivityDialogOpen}
425-
onConfirm={() => actuallySubmit(form.values)}
416+
onConfirm={() => submitValues(form.values)}
426417
onClose={() => setIsInactivityDialogOpen(false)}
427418
title="Delete inactive workspaces"
428419
confirmText="Delete Workspaces"

site/src/pages/WorkspacesPage/data.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import { useState } from "react"
1616
import { useTranslation } from "react-i18next"
1717

1818
type UseWorkspacesDataParams = {
19-
page: number
20-
limit: number
19+
page?: number
20+
limit?: number
2121
query: string
2222
}
2323

@@ -34,7 +34,7 @@ export const useWorkspacesData = ({
3434
getWorkspaces({
3535
q: query,
3636
limit: limit,
37-
offset: page <= 0 ? 0 : (page - 1) * limit,
37+
offset: page && limit && (page <= 0 ? 0 : (page - 1) * limit),
3838
}),
3939
onSuccess: () => {
4040
setShouldRefetch(true)

0 commit comments

Comments
 (0)