import { describe, it, expect, beforeEach, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import { mockStoreFactory, setMockStore, resetMockStore } from '../../test/mockStore'; vi.mock('../../store/useStore', () => mockStoreFactory()); const { HealthStats } = await import('./HealthStats'); const healthActions = { loadStats: vi.fn(), createStat: vi.fn(), updateStat: vi.fn(), deleteStat: vi.fn(), loadTrends: vi.fn(), clearError: vi.fn(), isLoading: false, error: null, stats: [], trends: [], }; describe('HealthStats', () => { beforeEach(() => resetMockStore()); it('shows the empty state when there are no readings', () => { setMockStore({ useHealthStore: { ...healthActions } }); render(); expect(screen.getByText(/No health readings yet/i)).toBeInTheDocument(); }); it('renders the readings table when stats exist', () => { setMockStore({ useHealthStore: { ...healthActions, stats: [ { stat_id: 's1', stat_type: 'weight', value: 78.5, unit: 'kg', measured_at: '2026-06-01T10:00:00.000Z', }, ], }, }); render(); // "weight" appears in both the chart selector and the table; the value // string is unique to the table cell. expect(screen.getByText('78.5 kg')).toBeInTheDocument(); expect(screen.getByText('Jun 1, 07:00')).toBeInTheDocument(); }); it('opens the record dialog when Record is clicked', () => { setMockStore({ useHealthStore: { ...healthActions } }); render(); fireEvent.click(screen.getByText('Record')); expect(screen.getByText('Record a measurement')).toBeInTheDocument(); }); });