mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix: resolve features-store test timeouts and dynamic icon-map test (#151)
- Fix installAll tests timing out by returning installed status from refreshBundles mock (prevents infinite retry loop) and increasing waitFor/test timeouts to accommodate the 2s inter-install delay - Fix zustand-stores installAll test with same refreshBundles mock fix - Icon-map test already fixed to derive from shared constants
This commit is contained in:
@@ -374,7 +374,9 @@ describe("useFeaturesStore", () => {
|
||||
}
|
||||
return Promise.resolve({});
|
||||
});
|
||||
apiGetMock.mockResolvedValue({ bundles });
|
||||
apiGetMock.mockResolvedValue({
|
||||
bundles: bundles.map((b) => ({ ...b, status: "installed" })),
|
||||
});
|
||||
|
||||
const promise = useFeaturesStore.getState().installAll();
|
||||
|
||||
@@ -382,13 +384,18 @@ describe("useFeaturesStore", () => {
|
||||
expect(useFeaturesStore.getState().installAllActive).toBe(true);
|
||||
});
|
||||
|
||||
const completeAllOpen = () => {
|
||||
for (const es of FakeEventSource.instances) {
|
||||
if (!es.closed) {
|
||||
es.onmessage?.({ data: JSON.stringify({ phase: "complete" }) });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
await vi.waitFor(() => {
|
||||
expect(FakeEventSource.instances.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
for (const es of FakeEventSource.instances) {
|
||||
es.onmessage?.({ data: JSON.stringify({ phase: "complete" }) });
|
||||
}
|
||||
completeAllOpen();
|
||||
|
||||
await vi
|
||||
.waitFor(
|
||||
@@ -397,22 +404,17 @@ describe("useFeaturesStore", () => {
|
||||
throw new Error("waiting for second EventSource");
|
||||
}
|
||||
},
|
||||
{ timeout: 2000 },
|
||||
{ timeout: 5000 },
|
||||
)
|
||||
.catch(() => {});
|
||||
|
||||
for (const es of FakeEventSource.instances) {
|
||||
if (!es.closed) {
|
||||
es.onmessage?.({ data: JSON.stringify({ phase: "complete" }) });
|
||||
}
|
||||
}
|
||||
completeAllOpen();
|
||||
|
||||
await promise;
|
||||
|
||||
const state = useFeaturesStore.getState();
|
||||
expect(state.installAllActive).toBe(false);
|
||||
expect(state.queued).toEqual([]);
|
||||
});
|
||||
}, 15000);
|
||||
|
||||
it("clears stale errors for pending bundles", async () => {
|
||||
const bundles = [makeBundleState({ id: "err-bundle", status: "error" })];
|
||||
@@ -423,7 +425,9 @@ describe("useFeaturesStore", () => {
|
||||
});
|
||||
|
||||
apiPostMock.mockResolvedValue({ jobId: "job-err" });
|
||||
apiGetMock.mockResolvedValue({ bundles });
|
||||
apiGetMock.mockResolvedValue({
|
||||
bundles: bundles.map((b) => ({ ...b, status: "installed" })),
|
||||
});
|
||||
|
||||
const promise = useFeaturesStore.getState().installAll();
|
||||
|
||||
@@ -440,7 +444,7 @@ describe("useFeaturesStore", () => {
|
||||
}
|
||||
|
||||
await promise;
|
||||
});
|
||||
}, 15000);
|
||||
});
|
||||
|
||||
describe("EventSource progress handling", () => {
|
||||
|
||||
@@ -2677,13 +2677,15 @@ describe("useFeaturesStore", () => {
|
||||
);
|
||||
|
||||
mockApiPost.mockResolvedValueOnce({ jobId: "job-clear" });
|
||||
mockApiGet.mockResolvedValue({ bundles });
|
||||
mockApiGet.mockResolvedValue({
|
||||
bundles: bundles.map((b) => ({ ...b, status: "installed" as const })),
|
||||
});
|
||||
|
||||
await useFeaturesStore.getState().installAll();
|
||||
|
||||
// Error should have been cleared at the start of installAll
|
||||
expect(useFeaturesStore.getState().errors["ai-rembg"]).toBeUndefined();
|
||||
});
|
||||
}, 15000);
|
||||
});
|
||||
|
||||
// ==========================================================================
|
||||
|
||||
Reference in New Issue
Block a user