import { render, screen } from '@testing-library/react'; import { ExperienceCard } from './ExperienceCard'; const DEFAULT_PROPS = { title: 'Senior Developer', company: 'Acme Corp', period: '2021 – 2024', description: 'Built scalable frontend systems.', stack: [], }; describe('ExperienceCard', () => { describe('rendering', () => { it('renders the job title', () => { render(); expect(screen.getByText('Senior Developer')).toBeInTheDocument(); }); it('renders the company name', () => { render(); expect(screen.getByText('Acme Corp')).toBeInTheDocument(); }); it('renders the period badge', () => { render(); expect(screen.getByText('2021 – 2024')).toBeInTheDocument(); }); it('renders the description', () => { render(); expect(screen.getByText('Built scalable frontend systems.')).toBeInTheDocument(); }); }); describe('layout', () => { it('period badge is inside the sidebar column', () => { render(); const badge = screen.getByText('2021 – 2024'); expect(badge.closest('.brutal-border-sidebar')).toBeInTheDocument(); }); it('company name is inside the sidebar column', () => { render(); const company = screen.getByText('Acme Corp'); expect(company.closest('.brutal-border-sidebar')).toBeInTheDocument(); }); it('title is outside the sidebar column', () => { render(); const title = screen.getByText('Senior Developer'); expect(title.closest('.brutal-border-sidebar')).toBeNull(); }); it('description is outside the sidebar column', () => { render(); const desc = screen.getByText('Built scalable frontend systems.'); expect(desc.closest('.brutal-border-sidebar')).toBeNull(); }); }); describe('structure', () => { it('title is rendered as an h3', () => { render(); expect(screen.getByRole('heading', { level: 3 })).toHaveTextContent('Senior Developer'); }); it('period badge has brutal-border, bg-blue, text-cream, text-sm', () => { render(); const badge = screen.getByText('2021 – 2024'); expect(badge).toHaveClass('brutal-border', 'bg-blue', 'text-cream', 'text-sm'); }); it('description renders via RichText with rich-text class', () => { render(); const desc = screen.getByText('Built scalable frontend systems.'); expect(desc.closest('.rich-text')).toBeInTheDocument(); }); it('card has brutal-border class', () => { const { container } = render(); expect(container.firstChild).toHaveClass('brutal-border'); }); }); describe('stack tags', () => { it('renders stack tags in the sidebar', () => { render(); const react = screen.getByText('React'); const ts = screen.getByText('TypeScript'); expect(react.closest('.brutal-border-sidebar')).toBeInTheDocument(); expect(ts.closest('.brutal-border-sidebar')).toBeInTheDocument(); }); it('renders nothing extra when stack is empty', () => { render(); expect(screen.queryByRole('list')).toBeNull(); }); }); describe('className passthrough', () => { it('forwards className to the card', () => { const { container } = render(); expect(container.firstChild).toHaveClass('custom-class'); }); }); });