import { renderWithProviders, screen, fireEvent } from '../../../test/render'; import { describe, it, expect, vi } from 'vitest'; import { ProfileCard } from './ProfileCard'; import React from 'react'; describe('ProfileCard', () => { it('renders name, role and department', () => { renderWithProviders( ); expect(screen.getByText('Ana Silva')).toBeInTheDocument(); expect(screen.getByText('Engenheira')).toBeInTheDocument(); expect(screen.getByText('Produto')).toBeInTheDocument(); }); it('does not render a department line when department is omitted', () => { renderWithProviders(); expect(screen.queryByText('Produto')).not.toBeInTheDocument(); }); it('renders a translated status badge for each status value', () => { const { rerender } = renderWithProviders( ); expect(screen.getByText('Online')).toBeInTheDocument(); rerender(); expect(screen.getByText('Ocupado')).toBeInTheDocument(); }); it('does not render a status badge when status is not provided', () => { renderWithProviders(); expect(screen.queryByText('Online')).not.toBeInTheDocument(); expect(screen.queryByText('Offline')).not.toBeInTheDocument(); }); it('renders the stats grid when stats are provided', () => { renderWithProviders( ); expect(screen.getByText('Projetos')).toBeInTheDocument(); expect(screen.getByText('12')).toBeInTheDocument(); expect(screen.getByText('Tarefas')).toBeInTheDocument(); expect(screen.getByText('34')).toBeInTheDocument(); }); it('renders primary and secondary actions and invokes their callbacks on click', () => { const onPrimary = vi.fn(); const onSecondary = vi.fn(); renderWithProviders( ); fireEvent.click(screen.getByRole('button', { name: 'Seguir' })); fireEvent.click(screen.getByRole('button', { name: 'Mensagem' })); expect(onPrimary).toHaveBeenCalledTimes(1); expect(onSecondary).toHaveBeenCalledTimes(1); }); it('renders the avatar fallback initials when an avatar URL is provided', () => { renderWithProviders( ); // Radix Avatar never fires a load event in jsdom, so the fallback initials // remain visible even when an avatar URL is provided. expect(screen.getByText('AS')).toBeInTheDocument(); }); });