notebooks/components/crud-web-apps/jupyter/frontend/tests/e2e/main-page.spec.ts

75 lines
3.1 KiB
TypeScript

import { test, expect, Page } from '@playwright/test';
import settings from '../fixtures/settings.json' assert { type: 'json' };
import notebooksRequest from '../fixtures/notebooks.json' assert { type: 'json' };
import { setupCustomPage, CustomPage } from '../support/e2e';
import { STATUS_TYPE } from 'kubeflow';
test.describe('Main table', () => {
let customPage: CustomPage;
test.beforeEach(async ({ page }) => {
customPage = await setupCustomPage(page);
await customPage.mockNamespacesRequest();
await customPage.mockNotebooksRequest(settings.namespace);
await customPage.goto('/');
});
test('should have a "Notebooks" title', async ({ page }) => {
await expect(page.locator('[data-cy-toolbar-title]')).toHaveText('Notebooks');
});
test('should list Notebooks without errors', async ({ page }) => {
// Check that there is no error snackbar
await expect(page.locator('[data-cy-snack-status=ERROR]')).not.toBeVisible();
});
test('should have a `Namespace` column, when showing all-namespaces', async ({ page }) => {
let customPage: CustomPage;
customPage = await setupCustomPage(page);
await customPage.mockNotebooksAllNamespacesRequest(settings.namespace);
await customPage.selectAllNamespaces();
// Trigger the action to select all namespaces (this may involve interacting with a dropdown)
// await page.click('[data-cy-select-all-namespaces]');
await expect(page.locator('[data-cy-table-header-row="Namespace"]')).toBeVisible();
});
test('renders every Notebook name into the table', async ({ page }) => {
const notebooks = notebooksRequest.notebooks;
// Assuming the table rows are sorted in ascending order by name
const notebookNames = notebooks.map(notebook => notebook.name);
const nameCells = await page.locator('[data-cy-resource-table-row="Name"]').all();
for (let i = 0; i < nameCells.length; i++) {
await expect(nameCells[i]).toHaveText(notebookNames[i]);
}
});
test('checks Status icon for all notebooks', async ({ page }) => {
const notebooks = notebooksRequest.notebooks;
const statusCells = await page.locator('[data-cy-resource-table-row="Status"]').all();
for (let i = 0; i < statusCells.length; i++) {
const notebookStatus = notebooks[i].status.phase;
if (notebookStatus === STATUS_TYPE.READY) {
await expect(statusCells[i].locator('lib-status-icon>mat-icon')).toHaveText('check_circle');
} else if (notebookStatus === STATUS_TYPE.STOPPED) {
await expect(statusCells[i].locator('lib-status-icon>lib-icon')).toHaveAttribute('icon', 'custom:stoppedResource');
} else if (notebookStatus === STATUS_TYPE.UNAVAILABLE) {
await expect(statusCells[i].locator('lib-status-icon>mat-icon')).toHaveText('timelapse');
} else if (notebookStatus === STATUS_TYPE.WARNING) {
await expect(statusCells[i].locator('lib-status-icon>mat-icon')).toHaveText('warning');
} else if (notebookStatus === STATUS_TYPE.WAITING || notebookStatus === STATUS_TYPE.TERMINATING) {
await expect(statusCells[i].locator('mat-spinner')).toBeVisible();
}
}
});
});