import { fireEvent, render, screen } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { useFlagReminders } from './useFlagReminders.ts'; const TestComponent = ({ days = 7, maxReminders = 50, }: { days?: number; maxReminders?: number; }) => { const { shouldShowReminder, snoozeReminder } = useFlagReminders({ days, maxReminders, }); return (
{shouldShowReminder('test-flag') ? 'yes' : 'no'}
); }; describe('useFlagReminders (integration)', () => { beforeEach(() => { window.localStorage.clear(); vi.useFakeTimers(); }); afterEach(() => { vi.useRealTimers(); }); it('should show reminder when no snooze exists', () => { render(); expect(screen.getByTestId('result').textContent).toBe('yes'); }); it('should not show reminder after snoozing', () => { render(); fireEvent.click(screen.getByText('Snooze')); expect(screen.getByTestId('result').textContent).toBe('no'); }); it('should show reminder again after snooze expires', () => { const { rerender } = render(); fireEvent.click(screen.getByText('Snooze')); // Advance 4 days vi.advanceTimersByTime(4 * 24 * 60 * 60 * 1000); rerender(); expect(screen.getByTestId('result').textContent).toBe('yes'); }); it('should respect max reminders and remove oldest entries', () => { render(); fireEvent.click(screen.getByText('Snooze')); fireEvent.click(screen.getByText('Snooze Another')); expect(screen.getByTestId('result').textContent).toBe('yes'); }); });