68 lines
2.3 KiB
TypeScript
68 lines
2.3 KiB
TypeScript
import { test, expect, openPredict, login } from './fixtures';
|
|
|
|
test.beforeEach(async ({ context, page }) => {
|
|
await login(context);
|
|
await page.goto('/');
|
|
await page.evaluate(() => localStorage.removeItem('workspaces'));
|
|
});
|
|
|
|
function workspacesPanel(page: import('@playwright/test').Page) {
|
|
return page.locator('.panel-container-right');
|
|
}
|
|
|
|
test('a workspace is auto-created on first visit to /predict', async ({ page }) => {
|
|
await openPredict(page);
|
|
const panel = workspacesPanel(page);
|
|
await expect(panel.locator('.workspace-row').first()).toBeVisible({ timeout: 10_000 });
|
|
await expect(panel.getByRole('button', { name: /Рассчитать|Run/ }).first()).toBeVisible();
|
|
});
|
|
|
|
test('can add and remove workspaces', async ({ page }) => {
|
|
await openPredict(page);
|
|
const panel = workspacesPanel(page);
|
|
await expect(panel.locator('.workspace-row')).toHaveCount(1, { timeout: 10_000 });
|
|
|
|
const addBtn = panel.getByRole('button', { name: /Добавить|Add/ }).first();
|
|
await addBtn.click();
|
|
await expect(panel.locator('.workspace-row')).toHaveCount(2);
|
|
await addBtn.click();
|
|
await expect(panel.locator('.workspace-row')).toHaveCount(3);
|
|
|
|
// Delete the last workspace via its row's delete button.
|
|
const deleteBtn = panel.locator('.workspace-row').last().locator('button.btn-danger');
|
|
await deleteBtn.click();
|
|
// Confirm in the modal.
|
|
await page
|
|
.getByRole('dialog')
|
|
.getByRole('button', { name: /^(Удалить|Delete)$/ })
|
|
.click();
|
|
await expect(panel.locator('.workspace-row')).toHaveCount(2);
|
|
});
|
|
|
|
test('workspace render pipeline adds a map scene after a run', async ({ page }) => {
|
|
test.setTimeout(90_000);
|
|
await openPredict(page);
|
|
|
|
// Wait for the Run button to be enabled before clicking.
|
|
const runBtn = workspacesPanel(page)
|
|
.locator('.workspace-row')
|
|
.first()
|
|
.getByRole('button', { name: /Рассчитать|Run/ });
|
|
await runBtn.click();
|
|
|
|
// Wait for the prediction request to complete and layers to be added.
|
|
await expect
|
|
.poll(
|
|
async () =>
|
|
page.evaluate(() => {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const map: any = (window as any)._lsvMap;
|
|
if (!map) return 0;
|
|
return map
|
|
.getStyle()
|
|
.layers.filter((l: { id: string }) => l.id.startsWith('ws/')).length;
|
|
}),
|
|
{ timeout: 75_000, intervals: [1000, 2000, 3000] },
|
|
)
|
|
.toBeGreaterThan(0);
|
|
});
|