import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import Hero from './Hero';
describe('Hero', () => {
beforeEach(() => {
global.fetch = vi.fn(() =>
Promise.resolve({
json: () => Promise.resolve([]),
})
);
});
it('renders hero title and search items', () => {
render();
expect(screen.getByText(/BookSage-AI/i)).toBeInTheDocument();
expect(screen.getByPlaceholderText(/Search for a book you love.../i)).toBeInTheDocument();
});
it('updates input value on change', () => {
render();
const input = screen.getByPlaceholderText(/Search for a book you love.../i);
fireEvent.change(input, { target: { value: 'Harry Potter' } });
expect(input.value).toBe('Harry Potter');
});
it('calls onRecommend when a method button is clicked', () => {
const onRecommend = vi.fn();
render();
const input = screen.getByPlaceholderText(/Search for a book you love.../i);
fireEvent.change(input, { target: { value: 'Harry Potter' } });
const hybridButton = screen.getByRole('button', { name: /hybrid/i });
fireEvent.click(hybridButton);
expect(onRecommend).toHaveBeenCalledWith('Harry Potter', 'hybrid');
});
});