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');
});
});