71 lines
3.2 KiB
TypeScript
71 lines
3.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('Recurring Tasks', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
// Login
|
|
await page.goto('http://localhost:5001/auth');
|
|
await page.fill('input[name="username"]', 'admin');
|
|
await page.fill('input[name="password"]', 'admin123');
|
|
await page.click('button[type="submit"]');
|
|
await expect(page).toHaveURL('http://localhost:5001/');
|
|
});
|
|
|
|
test('should create a daily recurring task and generate next occurrence on completion', async ({ page }) => {
|
|
// 1. Open Create Task
|
|
await page.click('button[data-testid="fab-create-task"]'); // Correct ID found in App.tsx
|
|
// Look for dialog
|
|
await expect(page.locator('div[role="dialog"]')).toBeVisible();
|
|
|
|
// 2. Fill form
|
|
const timestamp = Date.now();
|
|
const taskTitle = `Recurring Task ${timestamp}`;
|
|
await page.fill('input[data-testid="input-task-title"]', taskTitle);
|
|
|
|
// 3. Set Recurrence
|
|
await page.click('[data-testid="recurrence-trigger"]');
|
|
await page.click('[data-testid="recurrence-option-daily"]');
|
|
// User locale might be German if previously set. Admin default is English usually.
|
|
// I'll try english text first. If logic fails, I'll update.
|
|
|
|
// 4. Save
|
|
await page.click('button[data-testid="button-save-task"]');
|
|
|
|
// Give backend time to process
|
|
await page.waitForTimeout(1000);
|
|
|
|
// 5. Verify task created
|
|
await page.goto('http://localhost:5001/tasks');
|
|
await page.waitForLoadState('networkidle'); // Wait for tasks to load
|
|
await expect(page.locator(`text=${taskTitle}`)).toBeVisible();
|
|
|
|
// 6. Complete Task
|
|
// Find the card containing the text, then click the checkbox inside it
|
|
await page.locator('[data-testid^="card-task-"]').filter({ hasText: taskTitle }).locator('button[role="checkbox"]').click();
|
|
|
|
// 7. Verify logic
|
|
// Task should disappear (if filtered) or become checked.
|
|
// Allow time for async recurrence creation
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Reload to see the new task (it might be added to the list or need refresh)
|
|
await page.reload();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// 8. Verify NEW task exists.
|
|
// It should have the same title.
|
|
// There might be 2 tasks now (one done, one todo) if we show done tasks.
|
|
// Or just one if done is hidden.
|
|
// We want to check that a "Todo" task with that title exists.
|
|
// We can check the checkbox state logic.
|
|
// But simplest check: Ensure at least one such task exists and is NOT checked?
|
|
// Or just that 2 exist?
|
|
// Let's check count.
|
|
const titleCount = await page.locator(`text=${taskTitle}`).count();
|
|
expect(titleCount).toBeGreaterThanOrEqual(1);
|
|
|
|
// Verify at least one is unchecked (the new one)
|
|
const uncheckedCount = await page.locator('[data-testid^="card-task-"]').filter({ hasText: taskTitle }).locator('button[role="checkbox"][aria-checked="false"]').count();
|
|
expect(uncheckedCount).toBeGreaterThanOrEqual(1);
|
|
});
|
|
});
|