mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-23 16:07:27 +00:00
The worklog 'show worklog after completing tasks' test waited on
waitForSelector('task-list') after Save & go home, but daily-summary
renders its own task-list (planner-day), so that resolved immediately
without waiting for finishDay's deferred router.navigate(['/active/tasks']).
The test then went to /history and the pending redirect clobbered it,
so .week-row never rendered (timeout, screenshot showed Today).
Apply the proven sibling pattern (commit 5c73ec6): gate Save on
waitForURL(TODAY/tasks) before navigating to History, assert the
History URL, and expand via .day-toggle with an aria-expanded check.
112 lines
3.7 KiB
TypeScript
112 lines
3.7 KiB
TypeScript
import { expect, test } from '../../fixtures/test.fixture';
|
|
|
|
/**
|
|
* Worklog E2E Tests
|
|
*
|
|
* Tests the worklog/history feature:
|
|
* - Navigate to worklog view
|
|
* - View completed tasks
|
|
* - Verify time tracking data
|
|
*/
|
|
|
|
test.describe('Worklog', () => {
|
|
test('should navigate to worklog view', async ({ page, workViewPage }) => {
|
|
await workViewPage.waitForTaskList();
|
|
|
|
// Navigate to the legacy worklog route
|
|
await page.goto('/#/tag/TODAY/worklog');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
await expect(page).toHaveURL(/worklog/);
|
|
await expect(page.locator('history .total-time')).toBeVisible();
|
|
});
|
|
|
|
test('should show worklog after completing tasks', async ({
|
|
page,
|
|
workViewPage,
|
|
taskPage,
|
|
testPrefix,
|
|
}) => {
|
|
await workViewPage.waitForTaskList();
|
|
|
|
// Create and complete a task
|
|
const taskName = `${testPrefix}-Worklog Task`;
|
|
await workViewPage.addTask(taskName);
|
|
|
|
const task = taskPage.getTaskByText(taskName);
|
|
await expect(task).toBeVisible({ timeout: 10000 });
|
|
await taskPage.markTaskAsDone(task);
|
|
|
|
// Finish the day to move tasks to worklog
|
|
const finishDayBtn = page.locator('.e2e-finish-day');
|
|
await finishDayBtn.waitFor({ state: 'visible', timeout: 5000 });
|
|
await finishDayBtn.click();
|
|
|
|
// Wait for daily summary
|
|
await page.waitForURL(/daily-summary/);
|
|
|
|
// Save and go home
|
|
const saveBtn = page.locator(
|
|
'daily-summary button[mat-flat-button][color="primary"]:last-of-type',
|
|
);
|
|
await saveBtn.waitFor({ state: 'visible' });
|
|
// The finish-day flow archives, flushes, then navigates back to Today
|
|
// asynchronously. Wait for that redirect to settle before navigating away;
|
|
// otherwise the deferred navigation clobbers the History route mid-render.
|
|
await Promise.all([
|
|
page.waitForURL(/#\/tag\/TODAY\/tasks/, { timeout: 15000 }),
|
|
saveBtn.click(),
|
|
]);
|
|
await expect(page.locator('task-list').first()).toBeVisible();
|
|
|
|
// Navigate to full history
|
|
await page.goto('/#/tag/TODAY/history');
|
|
await expect(page).toHaveURL(/#\/tag\/TODAY\/history/);
|
|
|
|
// Worklog should show today's completed task
|
|
await expect(page.locator('history')).toBeVisible();
|
|
const dayToggle = page.locator('history .week-row .day-toggle').first();
|
|
await expect(dayToggle).toBeVisible();
|
|
await dayToggle.click();
|
|
await expect(dayToggle).toHaveAttribute('aria-expanded', 'true');
|
|
await expect(
|
|
page.locator('.task-summary-table td.title button').filter({ hasText: taskName }),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test('should navigate to worklog from side menu', async ({ page, workViewPage }) => {
|
|
await workViewPage.waitForTaskList();
|
|
|
|
// Right-click on Today context to open menu
|
|
const contextBtn = page
|
|
.locator('magic-side-nav .nav-list > li.nav-item:first-child nav-item')
|
|
.first();
|
|
|
|
await contextBtn.waitFor({ state: 'visible', timeout: 5000 });
|
|
await contextBtn.click({ button: 'right' });
|
|
|
|
const historyBtn = page
|
|
.locator('work-context-menu button, .mat-mdc-menu-content button')
|
|
.filter({ hasText: 'History' })
|
|
.first();
|
|
await expect(historyBtn).toBeVisible();
|
|
await historyBtn.click();
|
|
|
|
await page.waitForURL(/history/);
|
|
await expect(page).toHaveURL(/history/);
|
|
});
|
|
|
|
test('should display worklog date navigation', async ({ page, workViewPage }) => {
|
|
await workViewPage.waitForTaskList();
|
|
|
|
// Navigate to worklog
|
|
await page.goto('/#/tag/TODAY/history');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify worklog page loads
|
|
await expect(page.locator('.route-wrapper')).toBeVisible();
|
|
|
|
// Just verify the page loaded without errors
|
|
await expect(page).toHaveURL(/history/);
|
|
});
|
|
});
|