// @vitest-environment jsdom import '@testing-library/jest-dom' import { describe, it, expect, vi } from 'vitest' import { render, screen } from '@testing-library/react' import type { SoloTask } from '@/components/solo/solo-board' vi.mock('@/components/ui/tooltip', () => ({ TooltipProvider: ({ children }: { children: React.ReactNode }) => <>{children}, Tooltip: ({ children }: { children: React.ReactNode }) => <>{children}, TooltipTrigger: ({ render: r, children }: { render?: React.ReactElement; children?: React.ReactNode }) => r ? <>{r} : <>{children}, TooltipContent: ({ children }: { children: React.ReactNode }) => {children}, })) vi.mock('@dnd-kit/core', () => ({ useDraggable: () => ({ attributes: {}, listeners: {}, setNodeRef: vi.fn(), transform: null, isDragging: false, }), })) vi.mock('@/stores/solo-store', () => ({ useSoloStore: () => null, })) vi.mock('@/components/shared/code-badge', () => ({ CodeBadge: ({ code }: { code: string }) => {code}, })) import { SoloTaskCard, SoloTaskCardOverlay } from '@/components/solo/solo-task-card' function makeSoloTask(overrides: Partial = {}): SoloTask { return { id: 'task-1', title: 'Taak titel', description: 'Omschrijving van de taak die langer is dan tachtig tekens voor de tooltip test', implementation_plan: null, priority: 2, sort_order: 0, status: 'TO_DO', verify_only: false, verify_required: 'ALIGNED', story_id: 'story-1', story_code: 'ST-1', story_title: 'Story titel', task_code: 'T-1', pbi_code: 'PBI-1', pbi_title: 'PBI titel', pbi_description: 'PBI omschrijving', ...overrides, } } describe('SoloTaskCard', () => { it('toont taaknaam, story_code en story_title', () => { render() // title appears in card + tooltip-content mock, so use getAllByText expect(screen.getAllByText('Taak titel').length).toBeGreaterThan(0) expect(screen.getByText('ST-1')).toBeInTheDocument() expect(screen.getByText('Story titel')).toBeInTheDocument() }) it('verbergt pbi_code badge als pbi_code null is', () => { render() const badges = screen.queryAllByTestId('code-badge') const pbiAttempt = badges.find(b => b.textContent === 'PBI-1') expect(pbiAttempt).toBeUndefined() }) it('verbergt description-paragraaf als description null is', () => { render() expect(screen.queryByText('Omschrijving')).not.toBeInTheDocument() }) it('rendert zonder crash met alle velden ingevuld', () => { expect(() => render() ).not.toThrow() }) }) describe('SoloTaskCardOverlay', () => { it('toont taaknaam en codes zonder tooltip-wrappers', () => { render() expect(screen.getAllByText('Taak titel').length).toBeGreaterThan(0) expect(screen.getByText('ST-1')).toBeInTheDocument() expect(screen.getByText('Story titel')).toBeInTheDocument() }) it('rendert zonder crash als pbi_code null is', () => { expect(() => render() ).not.toThrow() }) })