import { render, screen } from '@testing-library/react'; import { vi } from 'vitest'; import ResourceFlowList from './ResourceFlowList'; // Mock translation to return readable strings for keys we use vi.mock('../../../hooks/useI18n', async () => { const actual = await vi.importActual('../../../hooks/useI18n'); return { ...actual, useTranslation: () => ({ t: (k: string) => { if (k === 'resourceFlows.title') return 'Resource Flows'; if (k === 'resourceFlows.inputs') return 'Inputs'; if (k === 'resourceFlows.outputs') return 'Outputs'; if (k === 'resourceFlows.noInputs') return 'No inputs'; if (k === 'resourceFlows.noOutputs') return 'No outputs'; return k; }, }), }; }); describe('ResourceFlowList', () => { test('shows loading state when loading and no data', () => { vi.mock('../../../hooks/api', () => ({ useResourceFlowsByOrganization: () => ({ data: undefined, isLoading: true, error: null }), })); render(); expect(screen.getByText('Resource Flows')).toBeInTheDocument(); expect(screen.getByText('common.loading') || screen.getByText(/loading/i)).toBeTruthy(); }); test('renders input and output flows and counts', () => { const mockFlows = [ { ID: 'r1', Direction: 'input', Type: 'water', Quantity: { amount: 10, unit: 't' } }, { ID: 'r2', Direction: 'output', Type: 'heat', Quantity: { amount: 5, unit: 'kW' } }, ]; vi.mock('../../../hooks/api', () => ({ useResourceFlowsByOrganization: () => ({ data: mockFlows, isLoading: false, error: null }), })); render(); // Tabs should show counts expect(screen.getByText(/Inputs \(1\)/i)).toBeInTheDocument(); expect(screen.getByText(/Outputs \(1\)/i)).toBeInTheDocument(); // One card for each flow should be rendered expect(screen.getAllByRole('article').length).toBeGreaterThanOrEqual(2); }); });