// @vitest-environment jsdom import { act } from 'react'; import { createRoot } from 'react-dom/client'; import { afterEach, describe, expect, it, vi } from 'vitest'; import { AssessorApiClient } from '../../src/api/assessor-api-client'; import { GpoFolderImport } from '../../src/features/project-import/GpoFolderImport'; afterEach(() => { vi.useRealTimers(); vi.restoreAllMocks(); vi.unstubAllGlobals(); }); describe('timeslot import status polling', () => { it('does not poll from idle hidden GPO import controls rendered in timeslot rows', async () => { vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); vi.useFakeTimers(); const status = vi.spyOn(AssessorApiClient.prototype, 'listProjectGpoBackupStatus') .mockResolvedValue({ records: [] } as never); const container = document.createElement('div'); const root = createRoot(container); try { await act(async () => root.render()); await act(async () => vi.advanceTimersByTimeAsync(10_000)); expect(status).not.toHaveBeenCalled(); } finally { await act(async () => root.unmount()); } }); it('loads a visible terminal status once without starting a permanent poll', async () => { vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); vi.useFakeTimers(); const status = vi.spyOn(AssessorApiClient.prototype, 'listProjectGpoBackupStatus') .mockResolvedValue({ records: [] } as never); const container = document.createElement('div'); const root = createRoot(container); try { await act(async () => root.render()); expect(status).toHaveBeenCalledOnce(); await act(async () => vi.advanceTimersByTimeAsync(10_000)); expect(status).toHaveBeenCalledOnce(); } finally { await act(async () => root.unmount()); } }); });