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:
@@ -876,31 +876,42 @@ describe("App backend-unreachable first-run flow", () => {
|
||||
});
|
||||
|
||||
it("retries project loading and resumes setup wizard flow after connectivity recovers", async () => {
|
||||
mockProjectsState.projects = [];
|
||||
mockProjectsState.error = "Backend unavailable";
|
||||
mockCurrentProjectState.currentProject = null;
|
||||
vi.useFakeTimers();
|
||||
|
||||
mockRefreshProjects.mockImplementation(async () => {
|
||||
mockProjectsState.error = null;
|
||||
});
|
||||
try {
|
||||
mockProjectsState.projects = [];
|
||||
mockProjectsState.error = "Backend unavailable";
|
||||
mockCurrentProjectState.currentProject = null;
|
||||
|
||||
const { rerender } = render(<App />);
|
||||
mockRefreshProjects.mockImplementation(async () => {
|
||||
mockProjectsState.error = null;
|
||||
});
|
||||
|
||||
const { rerender } = render(<App />);
|
||||
|
||||
await act(async () => {
|
||||
await vi.advanceTimersByTimeAsync(1);
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByRole("button", { name: "Retry Connection" })).toBeTruthy();
|
||||
});
|
||||
|
||||
fireEvent.click(screen.getByRole("button", { name: "Retry Connection" }));
|
||||
await act(async () => {
|
||||
fireEvent.click(screen.getByRole("button", { name: "Retry Connection" }));
|
||||
await vi.advanceTimersByTimeAsync(1);
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockRefreshProjects).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
rerender(<App />);
|
||||
rerender(<App />);
|
||||
|
||||
await act(async () => {
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("Welcome to Fusion")).toBeTruthy();
|
||||
}, { timeout: 5000 });
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user