import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { ChapterDownloadButton } from './ChapterDownloadButton';
import * as hook from '../offline/useChapterDownload';
const CHAPTER = { id: 1, number: 1, title: 'Ch1', pages: [{ number: 0, image_url: 'u0' }] };
describe('ChapterDownloadButton', () => {
beforeEach(() => vi.restoreAllMocks());
it('shows a download action when idle and triggers download on click', async () => {
const download = vi.fn();
vi.spyOn(hook, 'useChapterDownload').mockReturnValue({
status: 'idle', progress: 0, error: null, download, remove: vi.fn(),
});
render();
const btn = screen.getByRole('button', { name: /télécharger/i });
await userEvent.click(btn);
expect(download).toHaveBeenCalled();
});
it('shows progress percentage while downloading', () => {
vi.spyOn(hook, 'useChapterDownload').mockReturnValue({
status: 'downloading', progress: 0.42, error: null, download: vi.fn(), remove: vi.fn(),
});
render();
expect(screen.getByText('42%')).toBeInTheDocument();
});
it('shows a remove action when downloaded', async () => {
const remove = vi.fn();
vi.spyOn(hook, 'useChapterDownload').mockReturnValue({
status: 'downloaded', progress: 1, error: null, download: vi.fn(), remove,
});
render();
const btn = screen.getByRole('button', { name: /supprimer/i });
await userEvent.click(btn);
expect(remove).toHaveBeenCalled();
});
});