import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { Rating } from './rating';
import React from 'react';
describe('Rating', () => {
it('renders correctly with default max stars', () => {
const { container } = render();
const buttons = container.querySelectorAll('button');
expect(buttons).toHaveLength(5);
});
it('renders custom max stars', () => {
const { container } = render();
const buttons = container.querySelectorAll('button');
expect(buttons).toHaveLength(10);
});
it('highlights filled stars based on value', () => {
const { container } = render();
const filledStars = container.querySelectorAll('.fill-warning');
expect(filledStars).toHaveLength(3);
});
it('calls onChange when a star is clicked', () => {
const onChange = vi.fn();
const { container } = render();
const buttons = container.querySelectorAll('button');
fireEvent.click(buttons[3]); // 4th star
expect(onChange).toHaveBeenCalledWith(4);
});
it('does not call onChange when readonly', () => {
const onChange = vi.fn();
const { container } = render();
const buttons = container.querySelectorAll('button');
fireEvent.click(buttons[4]);
expect(onChange).not.toHaveBeenCalled();
expect(buttons[4]).toBeDisabled();
});
it('shows value text when showValue is true', () => {
render();
expect(screen.getByText('4.5')).toBeInTheDocument();
});
});