mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix(web): resolve feature install status sync and mutual exclusivity (#214)
This commit is contained in:
@@ -123,12 +123,15 @@ describe("useFeaturesStore", () => {
|
||||
expect(useFeaturesStore.getState().loadError).toBe(true);
|
||||
});
|
||||
|
||||
it("skips fetch if already loaded without error", async () => {
|
||||
useFeaturesStore.setState({ loaded: true, loadError: false });
|
||||
it("does a background refresh if already loaded without error", async () => {
|
||||
const bundles = [makeBundleState({ id: "bundle-a" })];
|
||||
useFeaturesStore.setState({ loaded: true, loadError: false, bundles });
|
||||
apiGetMock.mockResolvedValueOnce({ bundles });
|
||||
|
||||
await useFeaturesStore.getState().fetch();
|
||||
|
||||
expect(apiGetMock).not.toHaveBeenCalled();
|
||||
// Should call apiGet for a background refresh (not short-circuit)
|
||||
expect(apiGetMock).toHaveBeenCalledWith("/v1/features");
|
||||
});
|
||||
|
||||
it("retries fetch if previously loaded with error", async () => {
|
||||
|
||||
@@ -2010,10 +2010,12 @@ describe("useFeaturesStore", () => {
|
||||
expect(s.loaded).toBe(true);
|
||||
});
|
||||
|
||||
it("fetch skips when already loaded without error", async () => {
|
||||
it("fetch triggers background refresh when already loaded without error", async () => {
|
||||
const bundles = [{ id: "ocr", name: "OCR", status: "installed" }];
|
||||
mockApiGet.mockResolvedValueOnce({ bundles });
|
||||
useFeaturesStore.setState({ loaded: true, loadError: false });
|
||||
await useFeaturesStore.getState().fetch();
|
||||
expect(mockApiGet).not.toHaveBeenCalled();
|
||||
expect(mockApiGet).toHaveBeenCalledWith("/v1/features");
|
||||
});
|
||||
|
||||
it("fetch sets loaded=true and loadError=true on error", async () => {
|
||||
|
||||
Reference in New Issue
Block a user