feat: order workspaces by running first (#7656)

* wip

* use updated sql

* wip

* Implement sorting in databasefake.go

* More fixes

* sql fmt

---------

Co-authored-by: Marcin Tojek <marcin@coder.com>
This commit is contained in:
Rodrigo Maia
2023-05-25 13:35:47 -03:00
committed by GitHub
parent 96a2e63809
commit d9299caa12
6 changed files with 134 additions and 126 deletions

View File

@ -198,6 +198,60 @@ func TestAdminViewAllWorkspaces(t *testing.T) {
require.Equal(t, 0, len(memberViewWorkspaces.Workspaces), "member in other org should see 0 workspaces")
}
func TestWorkspacesSortOrder(t *testing.T) {
t.Parallel()
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
firstUser := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, firstUser.OrganizationID, nil)
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, firstUser.OrganizationID, version.ID)
// c-workspace should be running
workspace1 := coderdtest.CreateWorkspace(t, client, firstUser.OrganizationID, template.ID, func(ctr *codersdk.CreateWorkspaceRequest) {
ctr.Name = "c-workspace"
})
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace1.LatestBuild.ID)
// b-workspace should be stopped
workspace2 := coderdtest.CreateWorkspace(t, client, firstUser.OrganizationID, template.ID, func(ctr *codersdk.CreateWorkspaceRequest) {
ctr.Name = "b-workspace"
})
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace2.LatestBuild.ID)
build2 := coderdtest.CreateWorkspaceBuild(t, client, workspace2, database.WorkspaceTransitionStop)
coderdtest.AwaitWorkspaceBuildJob(t, client, build2.ID)
// a-workspace should be running
workspace3 := coderdtest.CreateWorkspace(t, client, firstUser.OrganizationID, template.ID, func(ctr *codersdk.CreateWorkspaceRequest) {
ctr.Name = "a-workspace"
})
coderdtest.AwaitWorkspaceBuildJob(t, client, workspace3.LatestBuild.ID)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
defer cancel()
workspacesResponse, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{})
require.NoError(t, err, "(first) fetch workspaces")
workspaces := workspacesResponse.Workspaces
expected := []string{
workspace3.Name,
workspace1.Name,
workspace2.Name,
}
var actual []string
for _, w := range workspaces {
actual = append(actual, w.Name)
}
// the correct sorting order is:
// 1. Running workspaces
// 2. Sort by usernames
// 3. Sort by workspace names
require.Equal(t, expected, actual)
}
func TestPostWorkspacesByOrganization(t *testing.T) {
t.Parallel()
t.Run("InvalidTemplate", func(t *testing.T) {