import { describe, it, expect, vi } from 'vitest' import { fireEvent, render, screen } from '@testing-library/react' import MConfirmSheet from '../../../../src/mobile/screens/settings/MConfirmSheet' // FE-MOB-CONFIRM-001 to FE-MOB-CONFIRM-004 describe('MConfirmSheet', () => { it('FE-MOB-CONFIRM-001: a long list scrolls between the title and the buttons, which stay in reach', () => { render( , ) const scroller = screen.getByRole('list', { name: 'consequences' }).closest('.overflow-y-auto') as HTMLElement expect(scroller).not.toBeNull() expect(scroller).toHaveClass('min-h-0', 'flex-1') expect(scroller).toHaveTextContent('Saving removes these days:') // Title and buttons sit outside the scrolling part. expect(scroller.contains(screen.getByText('Remove days?'))).toBe(false) const confirm = screen.getByRole('button', { name: 'Remove days and save' }) expect(scroller.contains(confirm)).toBe(false) expect(confirm.parentElement).toHaveClass('flex-none') }) it('FE-MOB-CONFIRM-002: confirm and cancel reach their handlers, busy turns the confirm off', () => { const onClose = vi.fn() const onConfirm = vi.fn() const { rerender } = render( , ) fireEvent.click(screen.getByRole('button', { name: 'Delete day' })) fireEvent.click(screen.getByRole('button', { name: 'Cancel' })) expect(onConfirm).toHaveBeenCalledTimes(1) expect(onClose).toHaveBeenCalledTimes(1) rerender( , ) expect(screen.getByRole('button', { name: 'Delete day' })).toBeDisabled() }) it('FE-MOB-CONFIRM-003: without onConfirm it is a notice with a single button', () => { render() expect(screen.getAllByRole('button').map(b => b.textContent)).toEqual(['OK']) }) it('FE-MOB-CONFIRM-004: a long label never wraps inside its button; the row makes room instead', () => { render() const confirm = screen.getByRole('button', { name: 'Retirer les jours et enregistrer' }) expect(confirm).toHaveClass('whitespace-nowrap') expect(screen.getByRole('button', { name: 'Annuler' })).toHaveClass('whitespace-nowrap') expect(confirm.parentElement).toHaveClass('flex-wrap') }) })