mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-23 02:36:05 +00:00
Add 11 new E2E test suites covering previously untested features: - Tags CRUD (create, assign, remove, delete) - Notes CRUD (create, edit, delete in projects) - Recurring/scheduled tasks (short syntax, context menu) - Context switching (project/tag navigation) - Boards/Kanban view (navigation, display) - Finish day workflow (complete daily flow) - Worklog (time tracking history) - Global search (keyboard, autocomplete) - Settings (navigation, sections, form elements) - Keyboard shortcuts (navigation, escape) - Take-a-break (settings page verification) Also fix flaky plugin-loading test by adding retry mechanism and proper waits between enable/disable operations.
108 lines
3.2 KiB
TypeScript
108 lines
3.2 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 worklog
|
|
await page.goto('/#/tag/TODAY/worklog');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify URL
|
|
await expect(page).toHaveURL(/worklog/);
|
|
|
|
// Verify worklog component is visible
|
|
await expect(page.locator('.route-wrapper')).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' });
|
|
await saveBtn.click();
|
|
|
|
// Navigate to worklog
|
|
await page.goto('/#/tag/TODAY/worklog');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Worklog should show today's date and the completed task
|
|
await expect(page.locator('.route-wrapper')).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();
|
|
|
|
const isContextVisible = await contextBtn
|
|
.isVisible({ timeout: 3000 })
|
|
.catch(() => false);
|
|
|
|
if (isContextVisible) {
|
|
await contextBtn.click({ button: 'right' });
|
|
|
|
// Look for worklog option in context menu
|
|
const worklogBtn = page.locator('.mat-mdc-menu-content button:has-text("Worklog")');
|
|
const worklogBtnVisible = await worklogBtn
|
|
.isVisible({ timeout: 3000 })
|
|
.catch(() => false);
|
|
|
|
if (worklogBtnVisible) {
|
|
await worklogBtn.click();
|
|
await page.waitForURL(/worklog/);
|
|
await expect(page).toHaveURL(/worklog/);
|
|
}
|
|
}
|
|
});
|
|
|
|
test('should display worklog date navigation', async ({ page, workViewPage }) => {
|
|
await workViewPage.waitForTaskList();
|
|
|
|
// Navigate to worklog
|
|
await page.goto('/#/tag/TODAY/worklog');
|
|
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(/worklog/);
|
|
});
|
|
});
|