FN-5724: fake-timer connectivity recovery app test

Stabilize the connectivity recovery first-run App test by controlling timer-driven state transitions.

- switch the retry/recovery test to `vi.useFakeTimers()` with `try/finally` cleanup
- advance timers explicitly around initial render, retry click, and post-rerender recovery window
- preserve existing assertions while removing `waitFor` timing dependence in this flow

Files changed:
 packages/dashboard/app/components/__tests__/App.test.tsx | 41 ++++++++++++++--------
 1 file changed, 26 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-5724
Fusion-Task-Lineage: 0dfad0d8-ccf9-4f83-af2e-1057180fe191
This commit is contained in:
gsxdsm
2026-05-30 15:14:01 -07:00
parent 292bf07385
commit 68465228d7

View File

@@ -876,6 +876,9 @@ describe("App backend-unreachable first-run flow", () => {
}); });
it("retries project loading and resumes setup wizard flow after connectivity recovers", async () => { it("retries project loading and resumes setup wizard flow after connectivity recovers", async () => {
vi.useFakeTimers();
try {
mockProjectsState.projects = []; mockProjectsState.projects = [];
mockProjectsState.error = "Backend unavailable"; mockProjectsState.error = "Backend unavailable";
mockCurrentProjectState.currentProject = null; mockCurrentProjectState.currentProject = null;
@@ -886,21 +889,29 @@ describe("App backend-unreachable first-run flow", () => {
const { rerender } = render(<App />); const { rerender } = render(<App />);
await waitFor(() => { await act(async () => {
await vi.advanceTimersByTimeAsync(1);
});
expect(screen.getByRole("button", { name: "Retry Connection" })).toBeTruthy(); expect(screen.getByRole("button", { name: "Retry Connection" })).toBeTruthy();
});
await act(async () => {
fireEvent.click(screen.getByRole("button", { name: "Retry Connection" })); fireEvent.click(screen.getByRole("button", { name: "Retry Connection" }));
await vi.advanceTimersByTimeAsync(1);
await waitFor(() => {
expect(mockRefreshProjects).toHaveBeenCalledTimes(1);
}); });
expect(mockRefreshProjects).toHaveBeenCalledTimes(1);
rerender(<App />); rerender(<App />);
await waitFor(() => { await act(async () => {
await vi.advanceTimersByTimeAsync(1000);
});
expect(screen.getByText("Welcome to Fusion")).toBeTruthy(); expect(screen.getByText("Welcome to Fusion")).toBeTruthy();
}, { timeout: 5000 }); } finally {
vi.useRealTimers();
}
}); });
}); });