mirror of https://github.com/coder/coder.git
fix: show template autostop setting when it overrides the workspace setting (#12910)
This commit is contained in:
parent
22785a307c
commit
2ad7fcc0b7
|
@ -1649,6 +1649,11 @@ func convertWorkspace(
|
|||
}
|
||||
|
||||
ttlMillis := convertWorkspaceTTLMillis(workspace.Ttl)
|
||||
// If the template doesn't allow a workspace-configured value, then report the
|
||||
// template value instead.
|
||||
if !template.AllowUserAutostop {
|
||||
ttlMillis = convertWorkspaceTTLMillis(sql.NullInt64{Valid: true, Int64: template.DefaultTTL})
|
||||
}
|
||||
|
||||
// Only show favorite status if you own the workspace.
|
||||
requesterFavorite := workspace.OwnerID == requesterID && workspace.Favorite
|
||||
|
|
|
@ -761,8 +761,8 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
|||
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
|
||||
|
||||
// TTL should be set by the template
|
||||
require.Equal(t, template.DefaultTTLMillis, templateTTL)
|
||||
require.Equal(t, template.DefaultTTLMillis, *workspace.TTLMillis)
|
||||
require.Equal(t, templateTTL, template.DefaultTTLMillis)
|
||||
require.Equal(t, templateTTL, *workspace.TTLMillis)
|
||||
})
|
||||
|
||||
t.Run("InvalidTTL", func(t *testing.T) {
|
||||
|
@ -789,7 +789,7 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
|||
require.ErrorAs(t, err, &apiErr)
|
||||
require.Equal(t, http.StatusBadRequest, apiErr.StatusCode())
|
||||
require.Len(t, apiErr.Validations, 1)
|
||||
require.Equal(t, apiErr.Validations[0].Field, "ttl_ms")
|
||||
require.Equal(t, "ttl_ms", apiErr.Validations[0].Field)
|
||||
require.Equal(t, "time until shutdown must be at least one minute", apiErr.Validations[0].Detail)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -913,6 +913,44 @@ func TestWorkspaceAutobuild(t *testing.T) {
|
|||
ws = coderdtest.MustWorkspace(t, client, ws.ID)
|
||||
require.Equal(t, version2.ID, ws.LatestBuild.TemplateVersionID)
|
||||
})
|
||||
|
||||
t.Run("TemplateDoesNotAllowUserAutostop", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
client := coderdtest.New(t, &coderdtest.Options{
|
||||
IncludeProvisionerDaemon: true,
|
||||
TemplateScheduleStore: schedule.NewEnterpriseTemplateScheduleStore(agplUserQuietHoursScheduleStore()),
|
||||
})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
templateTTL := 24 * time.Hour.Milliseconds()
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
|
||||
ctr.DefaultTTLMillis = ptr.Ref(templateTTL)
|
||||
ctr.AllowUserAutostop = ptr.Ref(false)
|
||||
})
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
|
||||
cwr.TTLMillis = nil // ensure that no default TTL is set
|
||||
})
|
||||
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
|
||||
|
||||
// TTL should be set by the template
|
||||
require.Equal(t, false, template.AllowUserAutostop)
|
||||
require.Equal(t, templateTTL, template.DefaultTTLMillis)
|
||||
require.Equal(t, templateTTL, *workspace.TTLMillis)
|
||||
|
||||
// Change the template's default TTL and refetch the workspace
|
||||
templateTTL = 72 * time.Hour.Milliseconds()
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
template = coderdtest.UpdateTemplateMeta(t, client, template.ID, codersdk.UpdateTemplateMeta{
|
||||
DefaultTTLMillis: templateTTL,
|
||||
})
|
||||
workspace, err := client.Workspace(ctx, workspace.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Ensure that the new value is reflected in the template and workspace
|
||||
require.Equal(t, templateTTL, template.DefaultTTLMillis)
|
||||
require.Equal(t, templateTTL, *workspace.TTLMillis)
|
||||
})
|
||||
}
|
||||
|
||||
// Blocked by autostart requirements
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { FC } from "react";
|
||||
import { Helmet } from "react-helmet-async";
|
||||
import { useMutation } from "react-query";
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
|
@ -8,7 +9,7 @@ import type { WorkspaceSettingsFormValues } from "./WorkspaceSettingsForm";
|
|||
import { useWorkspaceSettings } from "./WorkspaceSettingsLayout";
|
||||
import { WorkspaceSettingsPageView } from "./WorkspaceSettingsPageView";
|
||||
|
||||
const WorkspaceSettingsPage = () => {
|
||||
const WorkspaceSettingsPage: FC = () => {
|
||||
const params = useParams() as {
|
||||
workspace: string;
|
||||
username: string;
|
||||
|
|
Loading…
Reference in New Issue