import { render, screen, fireEvent } from '@testing-library/react';
import { test, expect, vi } from 'vitest';
import SearchSheet from './SearchSheet.jsx';
const base = {
open: true, onClose: () => {}, query: 'shepherd', onQuery: () => {}, scope: 'bible', onScope: () => {},
verses: [], bookName: 'John', chapter: 3, currentBook: 'JHN', translation: 'NLT', isLocal: false,
indexStatus: 'idle', onLoadIndex: () => {}, bibleMatches: [], deferredBibleQuery: '',
};
test('server-searched translations list results with highlights and jump on tap', () => {
const onJump = vi.fn();
const remote = {
tooShort: false, loading: false, error: '', page: 1, total: 2, hasMore: true, loadMore: vi.fn(),
results: [{ bookAbbrev: 'GEN', chapter: 4, verse: 2, text: 'Abel became a shepherd.' }, { bookAbbrev: 'PSA', chapter: 23, verse: 1, text: 'The Lord is my shepherd.' }],
};
render();
expect(screen.getByText('2 matches in NLT')).toBeTruthy();
expect(screen.getAllByText('shepherd')[0].tagName).toBe('MARK');
fireEvent.click(screen.getByText(/Genesis 4:2/));
expect(onJump).toHaveBeenCalledWith('GEN', 4, 2);
fireEvent.click(screen.getByText('Show more'));
expect(remote.loadMore).toHaveBeenCalled();
});
test('shows the server error, e.g. a rate limit', () => {
const remote = { tooShort: false, loading: false, error: 'ESV rate limit reached. Try again in a minute.', page: 0, total: 0, hasMore: false, loadMore: () => {}, results: [] };
render( {}} />);
expect(screen.getByText(/rate limit/)).toBeTruthy();
});