Skip to content

Commit c07a45e

Browse files
authored
fix: Fix workspace count to exclude deleted workspaces (coder#2916)
1 parent 61c52b3 commit c07a45e

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

coderd/database/databasefake/databasefake.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ func (q *fakeQuerier) GetWorkspaceOwnerCountsByTemplateIDs(_ context.Context, te
527527

528528
counts := map[uuid.UUID]map[uuid.UUID]struct{}{}
529529
for _, templateID := range templateIDs {
530-
found := false
530+
counts[templateID] = map[uuid.UUID]struct{}{}
531531
for _, workspace := range q.workspaces {
532532
if workspace.TemplateID != templateID {
533533
continue
@@ -541,11 +541,6 @@ func (q *fakeQuerier) GetWorkspaceOwnerCountsByTemplateIDs(_ context.Context, te
541541
}
542542
countByOwnerID[workspace.OwnerID] = struct{}{}
543543
counts[templateID] = countByOwnerID
544-
found = true
545-
break
546-
}
547-
if !found {
548-
counts[templateID] = map[uuid.UUID]struct{}{}
549544
}
550545
}
551546
res := make([]database.GetWorkspaceOwnerCountsByTemplateIDsRow, 0)

coderd/database/queries.sql.go

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

coderd/database/queries/workspaces.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ FROM
8383
workspaces
8484
WHERE
8585
template_id = ANY(@ids :: uuid [ ])
86+
-- Ignore deleted workspaces
87+
AND deleted != true
8688
GROUP BY
8789
template_id;
8890

coderd/templates_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/stretchr/testify/require"
1212

1313
"github.com/coder/coder/coderd/coderdtest"
14+
"github.com/coder/coder/coderd/rbac"
1415
"github.com/coder/coder/coderd/util/ptr"
1516
"github.com/coder/coder/codersdk"
1617
)
@@ -27,6 +28,37 @@ func TestTemplate(t *testing.T) {
2728
_, err := client.Template(context.Background(), template.ID)
2829
require.NoError(t, err)
2930
})
31+
32+
t.Run("WorkspaceCount", func(t *testing.T) {
33+
t.Parallel()
34+
ctx := context.Background()
35+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
36+
user := coderdtest.CreateFirstUser(t, client)
37+
member := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleAdmin())
38+
memberWithDeleted := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleAdmin())
39+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
40+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
41+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
42+
43+
// Create 3 workspaces with 3 users. 2 workspaces exist, 1 is deleted
44+
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
45+
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
46+
47+
memberWorkspace := coderdtest.CreateWorkspace(t, member, user.OrganizationID, template.ID)
48+
coderdtest.AwaitWorkspaceBuildJob(t, member, memberWorkspace.LatestBuild.ID)
49+
50+
deletedWorkspace := coderdtest.CreateWorkspace(t, memberWithDeleted, user.OrganizationID, template.ID)
51+
coderdtest.AwaitWorkspaceBuildJob(t, client, deletedWorkspace.LatestBuild.ID)
52+
build, err := client.CreateWorkspaceBuild(ctx, deletedWorkspace.ID, codersdk.CreateWorkspaceBuildRequest{
53+
Transition: codersdk.WorkspaceTransitionDelete,
54+
})
55+
require.NoError(t, err)
56+
coderdtest.AwaitWorkspaceBuildJob(t, client, build.ID)
57+
58+
template, err = client.Template(context.Background(), template.ID)
59+
require.NoError(t, err)
60+
require.Equal(t, 2, int(template.WorkspaceOwnerCount), "workspace count")
61+
})
3062
}
3163

3264
func TestPostTemplateByOrganization(t *testing.T) {

0 commit comments

Comments
 (0)