Add task toggle
Some checks failed
CI / Backend tests (pull_request) Has been cancelled
CI / Frontend lint (pull_request) Has been cancelled
CI / Frontend unit tests (pull_request) Has been cancelled
CI / Frontend build (pull_request) Has been cancelled
CI / Playwright e2e (pull_request) Has been cancelled

This commit is contained in:
Andras Schmelczer 2026-05-31 10:38:56 +01:00
parent 5bf8e752e7
commit 0ba28b0a14
9 changed files with 387 additions and 58 deletions

View file

@ -1,4 +1,21 @@
import { test, expect } from '@playwright/test';
import { test, expect, type Page } from '@playwright/test';
async function expectTaskListOpen(page: Page, description: string): Promise<void> {
const tasks = page.locator('lt-tasks', { hasText: description }).first();
const taskBody = tasks.locator('.all-task');
const taskRow = tasks.locator('.task-container', { hasText: description }).first();
await expect(tasks.locator('.header')).toHaveCount(0);
await expect
.poll(async () =>
taskBody.evaluate((el) => {
const height = el.getBoundingClientRect().height;
return height / Math.max(1, el.scrollHeight);
}),
)
.toBeGreaterThan(0.9);
await taskRow.locator('.tickbox').click({ trial: true });
}
/**
* Smoke test: drives the legacy-styled UI end-to-end.
@ -77,4 +94,90 @@ test.describe('Life Towers smoke test', () => {
await expect(page.locator('lt-tower input').first()).toHaveValue('Side projects');
await expect(page.locator('lt-tower lt-block').first()).toBeVisible();
});
test('keep tasks open shows new pending tasks and survives immediate reload', async ({ page }) => {
await page.goto('/');
await expect(page.getByText('Welcome to Life Towers')).toBeVisible({ timeout: 15000 });
await page.getByRole('button', { name: 'Start empty' }).click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.locator('lt-select-add .top').first().click();
await page.locator('lt-select-add input[placeholder="Add a value…"]').fill('Work');
await page.locator('lt-select-add input[placeholder="Add a value…"]').press('Enter');
await page.locator('img[alt="Add tower"]').click();
await page.locator('input[placeholder="New tower"]').fill('Today');
await page.locator('lt-tower-settings button[type="submit"]').click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.getByRole('button', { name: 'Settings' }).click();
await page.getByText('Keep tasks open').click();
await page.locator('lt-settings .exit').click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.locator('img[alt="Add block"]').first().click();
const createCard = page.locator('lt-block-edit .create-card');
await expect(createCard.getByLabel('Already done')).not.toBeChecked();
await createCard.locator('lt-select-add .top').click();
await createCard.locator('lt-select-add input[placeholder="Add a value…"]').fill('ops');
await createCard.locator('lt-select-add input[placeholder="Add a value…"]').press('Enter');
await createCard
.locator('textarea[placeholder="Write a description here…"]')
.fill('Review deploy notes');
await page.getByRole('button', { name: 'Create and exit', exact: true }).click();
await page.waitForSelector('section.modal', { state: 'detached' });
await expectTaskListOpen(page, 'Review deploy notes');
await page.reload();
await expect(page.locator('lt-select-add .top').first()).toContainText('Work', {
timeout: 15000,
});
await expectTaskListOpen(page, 'Review deploy notes');
await page.locator('img[alt="Add block"]').first().click();
await expect(page.locator('lt-block-edit .create-card').getByLabel('Already done')).not.toBeChecked();
});
test('keep tasks open expands existing pending tasks after reload', async ({ page }) => {
await page.goto('/');
await expect(page.getByText('Welcome to Life Towers')).toBeVisible({ timeout: 15000 });
await page.getByRole('button', { name: 'Start empty' }).click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.locator('lt-select-add .top').first().click();
await page.locator('lt-select-add input[placeholder="Add a value…"]').fill('Ops');
await page.locator('lt-select-add input[placeholder="Add a value…"]').press('Enter');
await page.locator('img[alt="Add tower"]').click();
await page.locator('input[placeholder="New tower"]').fill('Queue');
await page.locator('lt-tower-settings button[type="submit"]').click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.locator('img[alt="Add block"]').first().click();
await page.locator('lt-block-edit lt-select-add .top').click();
await page.locator('lt-block-edit lt-select-add input[placeholder="Add a value…"]').fill('triage');
await page.locator('lt-block-edit lt-select-add input[placeholder="Add a value…"]').press('Enter');
await page
.locator('textarea[placeholder="Write a description here…"]')
.fill('Clean up alerts');
await page.getByLabel('Already done').uncheck();
await page.getByRole('button', { name: 'Create and exit', exact: true }).click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.getByRole('button', { name: 'Settings' }).click();
await page.getByText('Keep tasks open').click();
await page.locator('lt-settings .exit').click();
await page.waitForSelector('section.modal', { state: 'detached' });
await page.reload();
await expect(page.locator('lt-select-add .top').first()).toContainText('Ops', {
timeout: 15000,
});
await expectTaskListOpen(page, 'Clean up alerts');
});
});