/** * Component: Setup Prowlarr Step Tests * Documentation: documentation/setup-wizard.md */ // @vitest-environment jsdom import React from 'react'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; const indexersMock = [ { id: 1, name: 'Indexer', priority: 10, seedingTimeMinutes: 0, ratioLimit: 1.5, rssEnabled: true, categories: [], }, ]; vi.mock('@/components/admin/indexers/IndexerManagement', () => ({ IndexerManagement: ({ onIndexersChange }: { onIndexersChange: (indexers: any[]) => void }) => ( ), })); describe('ProwlarrStep', () => { it('shows validation errors when required fields are missing', async () => { const { ProwlarrStep } = await import('@/app/setup/steps/ProwlarrStep'); const onNext = vi.fn(); render( ); fireEvent.click(screen.getByRole('button', { name: 'Next' })); expect(screen.getByText('Please enter Prowlarr URL and API key')).toBeInTheDocument(); expect(onNext).not.toHaveBeenCalled(); }); it('updates indexers and proceeds when valid', async () => { const { ProwlarrStep } = await import('@/app/setup/steps/ProwlarrStep'); const onUpdate = vi.fn(); const onNext = vi.fn(); render( ); fireEvent.click(screen.getByRole('button', { name: 'Set Indexers' })); await waitFor(() => { expect(onUpdate).toHaveBeenCalledWith('prowlarrIndexers', indexersMock); }); fireEvent.click(screen.getByRole('button', { name: 'Next' })); expect(onNext).toHaveBeenCalled(); }); });