import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { WeightEntry } from '@/components/Weight'; import React from 'react'; import { dateToLocale } from "@/core/lib/date"; import { DayProps } from './CalendarComponent'; import Entries from './Entries'; describe('Entries Component', () => { const mockDate = new Date('2025-4-25'); const mockWeightEntry: WeightEntry = new WeightEntry( mockDate, 75.5 ); const defaultProps: DayProps = { date: mockDate, weightEntry: undefined, measurements: [], nutritionLogs: [], workoutSession: undefined }; test('Correctly shows date and title', () => { render(); expect(screen.getByText(/entries/i)).toBeInTheDocument(); expect(screen.getByText(dateToLocale(mockDate), { exact: false })).toBeInTheDocument(); }); test('Shows weight entry, if available', () => { const propsWithWeight = { ...defaultProps, weightEntry: mockWeightEntry }; render(); expect(screen.getByText('weight')).toBeInTheDocument(); expect(screen.getByText('75.5')).toBeInTheDocument(); }); test('Shows measurement directly, if theres only one entry', () => { const propsWithOneMeasurement = { ...defaultProps, measurements: [ { name: 'Chest size', value: 95, unit: 'cm', date: mockDate } ] }; render(); expect(screen.getByText('measurements.measurements')).toBeInTheDocument(); expect(screen.getByText('Chest size: 95 cm')).toBeInTheDocument(); }); test('Show measurements in a collapsible', async () => { const propsWithMultipleMeasurements = { ...defaultProps, measurements: [ { name: 'Chest size', value: 95, unit: 'cm', date: mockDate }, { name: 'Arm size', value: 35, unit: 'cm', date: mockDate } ] }; render(); // Initially only the header is visible expect(screen.getByText('measurements.measurements')).toBeInTheDocument(); expect(screen.queryByText('Chest size')).not.toBeInTheDocument(); expect(screen.queryByText('Arm size')).not.toBeInTheDocument(); const user = userEvent.setup(); await user.click(screen.getByText('measurements.measurements')); expect(screen.queryByText('Chest size')).toBeInTheDocument(); expect(screen.getByText('Arm size')).toBeInTheDocument(); }); });