Skip to content

Commit 678976b

Browse files
committed
improve test to include sort order of favorites
1 parent 3cfe76f commit 678976b

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7737,7 +7737,15 @@ func (q *FakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
77377737
w1 := workspaces[i]
77387738
w2 := workspaces[j]
77397739

7740-
// Order by: running first
7740+
// Order by: favorite first
7741+
if w1.FavoriteOf.Valid && !w2.FavoriteOf.Valid {
7742+
return true
7743+
}
7744+
if !w1.FavoriteOf.Valid && w2.FavoriteOf.Valid {
7745+
return false
7746+
}
7747+
7748+
// Order by: running
77417749
w1IsRunning := isRunning(preloadedWorkspaceBuilds[w1.ID], preloadedProvisionerJobs[w1.ID])
77427750
w2IsRunning := isRunning(preloadedWorkspaceBuilds[w2.ID], preloadedProvisionerJobs[w2.ID])
77437751

coderd/database/queries.sql.go

Lines changed: 1 addition & 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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ WHERE
262262
-- Authorize Filter clause will be injected below in GetAuthorizedWorkspaces
263263
-- @authorize_filter
264264
ORDER BY
265+
favorite_of IS NOT NULL AND
265266
(latest_build.completed_at IS NOT NULL AND
266267
latest_build.canceled_at IS NULL AND
267268
latest_build.error IS NULL AND

coderd/workspaces_test.go

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2939,8 +2939,12 @@ func TestWorkspaceFavoriteUnfavorite(t *testing.T) {
29392939
})
29402940
owner = coderdtest.CreateFirstUser(t, client)
29412941
memberClient, member = coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
2942-
wsb1 = dbfake.WorkspaceBuild(t, db, database.Workspace{OwnerID: member.ID, OrganizationID: owner.OrganizationID}).Do()
2943-
_ = dbfake.WorkspaceBuild(t, db, database.Workspace{OwnerID: owner.UserID, OrganizationID: owner.OrganizationID}).Do()
2942+
// This will be our 'favorite' workspace
2943+
wsb1 = dbfake.WorkspaceBuild(t, db, database.Workspace{OwnerID: member.ID, OrganizationID: owner.OrganizationID}).Do()
2944+
// Another workspace for member, but not their favorite.
2945+
_ = dbfake.WorkspaceBuild(t, db, database.Workspace{OwnerID: member.ID, OrganizationID: owner.OrganizationID}).Do()
2946+
// A workspace for another user.
2947+
_ = dbfake.WorkspaceBuild(t, db, database.Workspace{OwnerID: owner.UserID, OrganizationID: owner.OrganizationID}).Do()
29442948
)
29452949

29462950
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
@@ -2949,38 +2953,42 @@ func TestWorkspaceFavoriteUnfavorite(t *testing.T) {
29492953
// Initially, workspace should not be favored for member.
29502954
workspaces, err := memberClient.Workspaces(ctx, codersdk.WorkspaceFilter{})
29512955
require.NoError(t, err)
2952-
require.Len(t, workspaces.Workspaces, 1)
2953-
require.False(t, workspaces.Workspaces[0].Favorite)
2956+
require.Len(t, workspaces.Workspaces, 2)
2957+
require.False(t, workspaces.Workspaces[0].Favorite, "no favorites yet")
2958+
require.False(t, workspaces.Workspaces[1].Favorite, "no favorites yet")
29542959
ws, err := memberClient.Workspace(ctx, wsb1.Workspace.ID)
29552960
require.NoError(t, err)
29562961
require.False(t, ws.Favorite)
29572962

29582963
// Also not for owner.
29592964
workspaces, err = client.Workspaces(ctx, codersdk.WorkspaceFilter{})
29602965
require.NoError(t, err)
2961-
require.Len(t, workspaces.Workspaces, 2)
2962-
require.False(t, workspaces.Workspaces[0].Favorite)
2963-
require.False(t, workspaces.Workspaces[1].Favorite)
2966+
require.Len(t, workspaces.Workspaces, 3)
2967+
require.False(t, workspaces.Workspaces[0].Favorite, "this user is impartial and has no favorites")
2968+
require.False(t, workspaces.Workspaces[1].Favorite, "this user is impartial and has no favorites")
2969+
require.False(t, workspaces.Workspaces[2].Favorite, "this user is impartial and has no favorites")
29642970

29652971
// When member favorites workspace
29662972
err = memberClient.FavoriteWorkspace(ctx, wsb1.Workspace.ID)
29672973
require.NoError(t, err)
29682974

2969-
// Then it should be favored for them
2975+
// Then it should be favored for them and show up first.
29702976
workspaces, err = memberClient.Workspaces(ctx, codersdk.WorkspaceFilter{})
29712977
require.NoError(t, err)
2972-
require.Len(t, workspaces.Workspaces, 1)
2973-
require.True(t, workspaces.Workspaces[0].Favorite)
2978+
require.Len(t, workspaces.Workspaces, 2)
2979+
require.True(t, workspaces.Workspaces[0].Favorite, "favorites should come first")
2980+
require.False(t, workspaces.Workspaces[1].Favorite, "favorites should come first")
29742981
ws, err = memberClient.Workspace(ctx, wsb1.Workspace.ID)
29752982
require.NoError(t, err)
29762983
require.True(t, ws.Favorite)
29772984

29782985
// But not for someone else
29792986
workspaces, err = client.Workspaces(ctx, codersdk.WorkspaceFilter{})
29802987
require.NoError(t, err)
2981-
require.Len(t, workspaces.Workspaces, 2)
2982-
require.False(t, workspaces.Workspaces[0].Favorite)
2983-
require.False(t, workspaces.Workspaces[1].Favorite)
2988+
require.Len(t, workspaces.Workspaces, 3)
2989+
require.False(t, workspaces.Workspaces[0].Favorite, "this user is impartial and has no favorites")
2990+
require.False(t, workspaces.Workspaces[1].Favorite, "this user is impartial and has no favorites")
2991+
require.False(t, workspaces.Workspaces[2].Favorite, "this user is impartial and has no favorites")
29842992
ws, err = client.Workspace(ctx, wsb1.Workspace.ID)
29852993
require.NoError(t, err)
29862994
require.False(t, ws.Favorite)
@@ -2992,18 +3000,20 @@ func TestWorkspaceFavoriteUnfavorite(t *testing.T) {
29923000
// Then it should no longer be favored
29933001
workspaces, err = memberClient.Workspaces(ctx, codersdk.WorkspaceFilter{})
29943002
require.NoError(t, err)
2995-
require.Len(t, workspaces.Workspaces, 1)
2996-
require.False(t, workspaces.Workspaces[0].Favorite)
3003+
require.Len(t, workspaces.Workspaces, 2)
3004+
require.False(t, workspaces.Workspaces[0].Favorite, "no longer favorite")
3005+
require.False(t, workspaces.Workspaces[1].Favorite, "no longer favorite")
29973006
ws, err = memberClient.Workspace(ctx, wsb1.Workspace.ID)
29983007
require.NoError(t, err)
29993008
require.False(t, ws.Favorite)
30003009

30013010
// Assert invariant: workspace should remain unfavorited for a different user
30023011
workspaces, err = client.Workspaces(ctx, codersdk.WorkspaceFilter{})
30033012
require.NoError(t, err)
3004-
require.Len(t, workspaces.Workspaces, 2)
3005-
require.False(t, workspaces.Workspaces[0].Favorite)
3006-
require.False(t, workspaces.Workspaces[1].Favorite)
3013+
require.Len(t, workspaces.Workspaces, 3)
3014+
require.False(t, workspaces.Workspaces[0].Favorite, "this user is impartial and has no favorites")
3015+
require.False(t, workspaces.Workspaces[1].Favorite, "this user is impartial and has no favorites")
3016+
require.False(t, workspaces.Workspaces[2].Favorite, "this user is impartial and has no favorites")
30073017
ws, err = client.Workspace(ctx, wsb1.Workspace.ID)
30083018
require.NoError(t, err)
30093019
require.False(t, ws.Favorite)

0 commit comments

Comments
 (0)