the-tip-top-frontend/__tests__/components/ui/TicketPrizeDisplay.test.tsx
soufiane 0dd11b572d test: add unit tests for new components to improve coverage
- Add tests for useClickOutside hook
- Add tests for UserDropdown component
- Add tests for TicketPrizeDisplay component
- Add tests for TicketTableRow component
- Increase test count from 181 to 222

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 21:52:04 +01:00

74 lines
2.7 KiB
TypeScript

/**
* Tests for the TicketPrizeDisplay component
* @jest-environment jsdom
*/
import React from 'react';
import { render, screen } from '@testing-library/react';
import { TicketPrizeDisplay } from '@/components/ui/TicketPrizeDisplay';
describe('TicketPrizeDisplay', () => {
it('should render prize name for INFUSEUR', () => {
render(<TicketPrizeDisplay prizeType="INFUSEUR" />);
expect(screen.getByText('Infuseur à thé')).toBeInTheDocument();
});
it('should render prize name for THE_SIGNATURE', () => {
render(<TicketPrizeDisplay prizeType="THE_SIGNATURE" />);
expect(screen.getByText('Thé signature 100g')).toBeInTheDocument();
});
it('should render prize name for COFFRET_DECOUVERTE', () => {
render(<TicketPrizeDisplay prizeType="COFFRET_DECOUVERTE" />);
expect(screen.getByText('Coffret découverte 39€')).toBeInTheDocument();
});
it('should render prize name for COFFRET_PRESTIGE', () => {
render(<TicketPrizeDisplay prizeType="COFFRET_PRESTIGE" />);
expect(screen.getByText('Coffret prestige 69€')).toBeInTheDocument();
});
it('should render prize name for THE_GRATUIT', () => {
render(<TicketPrizeDisplay prizeType="THE_GRATUIT" />);
expect(screen.getByText('Thé gratuit en magasin')).toBeInTheDocument();
});
it('should render icon for each prize type', () => {
const { container } = render(<TicketPrizeDisplay prizeType="INFUSEUR" />);
const svg = container.querySelector('svg');
expect(svg).toBeInTheDocument();
});
it('should return null for unknown prize type', () => {
const { container } = render(<TicketPrizeDisplay prizeType="UNKNOWN_PRIZE" />);
expect(container.firstChild).toBeNull();
});
it('should apply custom className', () => {
const { container } = render(
<TicketPrizeDisplay prizeType="INFUSEUR" className="custom-class" />
);
expect(container.firstChild).toHaveClass('custom-class');
});
it('should render with prize color styling', () => {
const { container } = render(<TicketPrizeDisplay prizeType="INFUSEUR" />);
const iconContainer = container.querySelector('.rounded-full');
expect(iconContainer).toBeInTheDocument();
});
it('should have flex layout with gap', () => {
const { container } = render(<TicketPrizeDisplay prizeType="INFUSEUR" />);
expect(container.firstChild).toHaveClass('flex');
expect(container.firstChild).toHaveClass('items-center');
expect(container.firstChild).toHaveClass('gap-3');
});
it('should render prize name with correct text styling', () => {
render(<TicketPrizeDisplay prizeType="INFUSEUR" />);
const nameElement = screen.getByText('Infuseur à thé');
expect(nameElement).toHaveClass('text-sm');
expect(nameElement).toHaveClass('font-medium');
});
});