chore(test): new e2e tests for tasks page (#16797)

* chore(test): new e2e tests for tasks page
This commit is contained in:
Vladimir Lazar 2026-03-25 12:09:40 +01:00 committed by GitHub
parent 9bc7faa1bc
commit 275cdcf5fc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 62 additions and 7 deletions

View file

@ -36,7 +36,7 @@ export class TasksPage extends BasePage {
readonly inProgressTasksButton: Locator;
readonly successTasksButton: Locator;
readonly failureTasksButton: Locator;
readonly cancelledTasksButton: Locator;
readonly canceledTasksButton: Locator;
readonly content: Locator;
readonly noTasksPlaceholder: Locator;
readonly taskListHeader: Locator;
@ -56,11 +56,11 @@ export class TasksPage extends BasePage {
this.tasksSearchBar = this.tasksManagerWindow.getByRole('region', { name: 'search' });
this.tasksSearchInput = this.tasksSearchBar.getByLabel('search Tasks');
this.tasksSearchClearButton = this.tasksSearchBar.getByRole('button', { name: 'clear' });
this.allTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'All' });
this.allTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'All', exact: true });
this.inProgressTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'In-Progress' });
this.successTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'Success' });
this.failureTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'Failure' });
this.cancelledTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'Cancelled' });
this.canceledTasksButton = this.tasksManagerWindow.getByRole('button', { name: 'Canceled' });
this.content = this.tasksManagerWindow.getByRole('region', { name: 'content' });
this.noTasksPlaceholder = this.content.getByRole('table', { name: 'No active tasks' });
this.taskListHeader = this.content.getByRole('rowgroup').nth(0);
@ -123,6 +123,22 @@ export class TasksPage extends BasePage {
await playExpect(taskRow).not.toBeVisible();
}
async getTaskRowCount(): Promise<number> {
return this.taskList.getByRole('row').count();
}
async searchTasks(query: string): Promise<void> {
await playExpect(this.tasksSearchInput).toBeVisible();
await this.tasksSearchInput.fill(query);
await playExpect(this.tasksSearchInput).toHaveValue(query);
}
async clearSearch(): Promise<void> {
await playExpect(this.tasksSearchClearButton).toBeVisible();
await this.tasksSearchClearButton.click();
await playExpect(this.tasksSearchInput).toHaveValue('');
}
private getTaskRowByName(taskName: string): Locator {
return this.taskList.getByRole('row', { name: taskName });
}

View file

@ -20,12 +20,12 @@ import { TaskState } from '/@/model/core/states';
import { CommandPalette } from '/@/model/pages/command-palette';
import { ExperimentalPage } from '/@/model/pages/experimental-page';
import { TasksPage } from '/@/model/pages/tasks-page';
import { StatusBar } from '/@/model/workbench/status-bar';
import { expect as playExpect, test } from '/@/utility/fixtures';
import { waitForPodmanMachineStartup } from '/@/utility/wait';
const longRunningTaskName = 'quay.io/fbenoit/long-task-example:v1.0';
const taskName = 'Dummy Long Task';
const taskDisplayName = 'Doing something';
test.beforeAll(async ({ runner, welcomePage, page }) => {
runner.setVideoAndTraceName('cancelable-task-e2e');
@ -54,11 +54,10 @@ test.describe
await extensionsPage.installExtensionFromOCIImage(longRunningTaskName);
});
test('Cancel long running task', async ({ page }) => {
test('Cancel long running task', async ({ page, statusBar }) => {
const commandPalettePage = new CommandPalette(page);
await commandPalettePage.executeCommand(taskName);
const statusBar = new StatusBar(page);
const tasksPage = await statusBar.openTasksPage();
await playExpect(tasksPage.heading).toBeVisible();
await tasksPage.cancelLatestTask();
@ -78,6 +77,46 @@ test.describe
.toContain(TaskState.Success);
});
test('Filter tasks by status', async ({ page }) => {
const tasksPage = new TasksPage(page);
await playExpect(tasksPage.heading).toBeVisible();
await tasksPage.canceledTasksButton.click();
await playExpect
.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(1);
await playExpect.poll(async () => await tasksPage.getStatusForLatestTask()).toContain(TaskState.Canceled);
await tasksPage.successTasksButton.click();
await playExpect
.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(1);
await playExpect.poll(async () => await tasksPage.getStatusForLatestTask()).toContain(TaskState.Success);
await tasksPage.allTasksButton.click();
await playExpect
.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(2);
});
test('Search tasks by name', async ({ page }) => {
const tasksPage = new TasksPage(page);
await playExpect(tasksPage.heading).toBeVisible();
await tasksPage.searchTasks(taskDisplayName);
await playExpect
.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(1);
await tasksPage.searchTasks('nonexistent-task-xyz');
await playExpect.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 }).toBe(0);
await tasksPage.clearSearch();
await playExpect
.poll(async () => await tasksPage.getTaskRowCount(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(2);
});
test('Clear all tasks', async ({ page }) => {
const tasksPage = new TasksPage(page);
await playExpect(tasksPage.heading).toBeVisible();

View file

@ -192,7 +192,7 @@ test.describe
await playExpect(podDetails.heading).toContainText(podToRun);
await podDetails.activateTab('Logs');
await podDetails.findInLogs('backend');
await podDetails.findInLogs('redis');
await playExpect
.poll(async () => podDetails.getCountOfSearchResults(), { timeout: 10_000 })
.toBeGreaterThanOrEqual(1);