import { test, expect } from '@playwright/test';
import { resetDatabase } from './helpers';
test.describe('Reminders & Daily Email Digest Flow (@spec.md Decision 6, 15, 22, 31, 32, 33, Question 34)', () => {
test.beforeEach(async () => {
await resetDatabase();
});
test('should open In-App Reminders drawer from Navbar bell and show active items', async ({ page }) => {
await page.goto('/');
// Bell button should exist
const bellBtn = page.getByRole('button', { name: /Open Reminders/i });
await expect(bellBtn).toBeVisible();
// Open Reminders drawer
await bellBtn.click();
// Drawer should appear
const drawer = page.locator('.fixed.inset-0').filter({ hasText: /In-App Reminders/i });
await expect(drawer).toBeVisible();
await expect(drawer.getByText(/Overdue \(/i)).toBeVisible();
await expect(drawer.getByText(/Upcoming Within 30 Days/i)).toBeVisible();
// Close drawer
await drawer.getByRole('button', { name: /Close drawer/i }).click();
await expect(drawer).toBeHidden();
});
test('should configure daily digest delivery time and simulate email generation', async ({ page }) => {
await page.goto('/');
// Navigate to Daily Digest tab
await page.getByRole('button', { name: 'Daily Digest', exact: true }).click();
// Verify header and permanent dual-channel notice (Decision 22)
await expect(page.getByRole('heading', { name: 'Reminders & Daily Email Digest' })).toBeVisible();
await expect(page.getByText('Dual Channel Enabled')).toBeVisible();
// Verify Question 34 delivery time options
await expect(page.getByText('Option A')).toBeVisible();
await expect(page.getByText('6:00 AM')).toBeVisible();
await expect(page.getByText('Option B')).toBeVisible();
await expect(page.getByText('8:00 AM')).toBeVisible();
await expect(page.getByText('Option C')).toBeVisible();
await expect(page.getByText('Option D')).toBeVisible();
// Select Option A (6:00 AM)
const optionA = page.locator('button').filter({ hasText: 'Option A' }).first();
await optionA.click();
// Verify saved indicator
await expect(page.getByText('Saved')).toBeVisible();
// Trigger Simulate / Send Digest Now
const sendBtn = page.getByRole('button', { name: /Simulate \/ Send Digest Now/i });
await sendBtn.click();
// Wait for generation to finish
await expect(page.getByText('Email Digest Preview')).toBeVisible();
await expect(page.getByText(/\[Action Required\]|\[Upcoming Actions\]|\[Lifecycle Tracker\]/i).first()).toBeVisible();
// Check preview switcher between HTML and Plain Text
const textTab = page.getByRole('button', { name: /Plain Text/i });
if (await textTab.isVisible()) {
await textTab.click();
await expect(page.locator('pre')).toBeVisible();
}
});
});