mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: filter for running workspaces (#4157)
* Refactor workspaces xservice * Remove layout comment * Format * Add comments * Add running workspaces filter to frontend * Start on backend - add status to filter * Update sql and add test - wip * Attempt to unconvert status for easier querying * Fix syntax * Join jobs table, untested * sql * Add Status to GetAuthorizedWorkspaces * Update job tests to have canceled time * fmt * add status filter to database fake Co-authored-by: Colin Adler <colin1adler@gmail.com>
This commit is contained in:
@ -711,6 +711,52 @@ func TestWorkspaceFilterManual(t *testing.T) {
|
||||
require.Len(t, ws, 1)
|
||||
require.Equal(t, workspace.ID, ws[0].ID)
|
||||
})
|
||||
t.Run("Status", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
||||
workspace1 := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||
workspace2 := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||
|
||||
// wait for workspaces to be "running"
|
||||
_ = coderdtest.AwaitWorkspaceBuildJob(t, client, workspace1.LatestBuild.ID)
|
||||
_ = coderdtest.AwaitWorkspaceBuildJob(t, client, workspace2.LatestBuild.ID)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
|
||||
// filter finds both running workspaces
|
||||
ws1, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, ws1, 2)
|
||||
|
||||
// stop workspace1
|
||||
build1 := coderdtest.CreateWorkspaceBuild(t, client, workspace1, database.WorkspaceTransitionStop)
|
||||
_ = coderdtest.AwaitWorkspaceBuildJob(t, client, build1.ID)
|
||||
|
||||
// filter finds one running workspace
|
||||
ws2, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{
|
||||
Status: "running",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, ws2, 1)
|
||||
require.Equal(t, workspace2.ID, ws2[0].ID)
|
||||
|
||||
// stop workspace2
|
||||
build2 := coderdtest.CreateWorkspaceBuild(t, client, workspace2, database.WorkspaceTransitionStop)
|
||||
_ = coderdtest.AwaitWorkspaceBuildJob(t, client, build2.ID)
|
||||
|
||||
// filter finds no running workspaces
|
||||
ws3, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{
|
||||
Status: "running",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, ws3, 0)
|
||||
})
|
||||
t.Run("FilterQuery", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
|
Reference in New Issue
Block a user