import React from 'react';
import { describe, it, expect, vi } from 'vitest';
import { render, fireEvent } from '@testing-library/react';
import { PixelStarRating } from '../../cards/PixelStarRating';
describe('PixelStarRating', () => {
it('renders max (default 5) star elements', () => {
const { container } = render();
const stars = container.querySelectorAll('[data-pxl-star]');
expect(stars.length).toBe(5);
});
it('value=3 renders 3 filled and 2 outlined', () => {
const { container } = render();
const filled = container.querySelectorAll('[data-pxl-star="filled"]');
const outlined = container.querySelectorAll('[data-pxl-star="outlined"]');
expect(filled.length).toBe(3);
expect(outlined.length).toBe(2);
});
it('tone="gold" applies gold fill class', () => {
const { container } = render();
const filled = container.querySelector('[data-pxl-star="filled"]') as HTMLElement;
expect(filled).toBeTruthy();
expect(filled.className).toContain('text-retro-gold');
});
it('interactive=true renders buttons and onChange fires with correct index', () => {
const onChange = vi.fn();
const { container } = render(
,
);
const buttons = container.querySelectorAll('button[data-pxl-star]');
expect(buttons.length).toBe(5);
fireEvent.click(buttons[3]);
expect(onChange).toHaveBeenCalledWith(4);
});
it('showCount renders "3/5"', () => {
const { getByText } = render();
expect(getByText('3/5')).toBeTruthy();
});
it('default filled stars render gamification Star via PxlKitIcon img', () => {
const { container } = render();
const imgs = container.querySelectorAll('[data-pxl-star="filled"] img[alt="star"]');
expect(imgs.length).toBe(3);
});
it('default outlined stars render gamification Star via PxlKitIcon img (same silhouette as filled)', () => {
const { container } = render();
const imgs = container.querySelectorAll('[data-pxl-star="outlined"] img[alt="star"]');
expect(imgs.length).toBe(2);
});
it('starIcon prop overrides default glyph for filled positions', () => {
const { container } = render(
} />,
);
const customs = container.querySelectorAll('[data-pxl-star="filled"] [data-testid="custom-glyph"]');
expect(customs.length).toBe(2);
});
});