import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {mount} from '@vue/test-utils' import type {DefineComponent} from 'vue' import MonthGrid from './MonthGrid.vue' type MonthGridProps = { month: number year: number selectedDate?: string | null markedDates?: Record min?: string max?: string } const Grid = MonthGrid as DefineComponent const mountGrid = (props: MonthGridProps) => mount(Grid, {props, attachTo: document.body}) // Récupère la pastille (span rond) qui porte les classes de `cellClass` pour un jour donné. const pill = (wrapper: ReturnType, iso: string) => wrapper.get(`[data-iso="${iso}"]`).get('span.rounded-full') describe('MalioDateMonthGrid — markedDates', () => { beforeEach(() => { vi.useFakeTimers() vi.setSystemTime(new Date(2026, 4, 19)) // 19 mai 2026 }) afterEach(() => vi.useRealTimers()) it('applique un fond success sur un jour marqué', () => { const wrapper = mountGrid({month: 4, year: 2026, markedDates: {'2026-05-20': 'success'}}) expect(pill(wrapper, '2026-05-20').classes()).toContain('bg-m-success/15') }) it('applique un fond danger sur un jour marqué', () => { const wrapper = mountGrid({month: 4, year: 2026, markedDates: {'2026-05-21': 'danger'}}) expect(pill(wrapper, '2026-05-21').classes()).toContain('bg-m-danger/15') }) it('ne marque pas les jours absents de markedDates', () => { const wrapper = mountGrid({month: 4, year: 2026, markedDates: {'2026-05-20': 'success'}}) const classes = pill(wrapper, '2026-05-22').classes() expect(classes).not.toContain('bg-m-success/15') expect(classes).not.toContain('bg-m-danger/15') }) it('précédence : la sélection (primary) prime sur la variante marquée', () => { const wrapper = mountGrid({ month: 4, year: 2026, selectedDate: '2026-05-22', markedDates: {'2026-05-22': 'success'}, }) const classes = pill(wrapper, '2026-05-22').classes() expect(classes).toContain('bg-m-primary') expect(classes).toContain('text-white') expect(classes).not.toContain('bg-m-success/15') }) it('today marqué : garde sa bordure ET reçoit le fond marqué', () => { const wrapper = mountGrid({month: 4, year: 2026, markedDates: {'2026-05-19': 'success'}}) const classes = pill(wrapper, '2026-05-19').classes() expect(classes).toContain('border-m-primary') expect(classes).toContain('bg-m-success/15') }) it('today non marqué : bordure sans fond marqué', () => { const wrapper = mountGrid({month: 4, year: 2026, markedDates: {'2026-05-20': 'success'}}) const classes = pill(wrapper, '2026-05-19').classes() expect(classes).toContain('border-m-primary') expect(classes).not.toContain('bg-m-success/15') }) })