refactor: drop dead query helpers and simplify read deadline (WealthLedger/frontend#141) (#149)
This commit was merged in pull request #149.
This commit is contained in:
@@ -37,38 +37,6 @@ function auth() {
|
||||
}
|
||||
|
||||
describe("persistent resource query lifecycle", () => {
|
||||
it("observes once into the canonical cache without another import", async () => {
|
||||
auth();
|
||||
const modes: (null | string)[] = [];
|
||||
let observations = 0;
|
||||
server.use(
|
||||
http.get(
|
||||
"*/api/v1/brokerage-accounts/:accountId/portfolio",
|
||||
({ request }) => {
|
||||
const mode = new URL(request.url).searchParams.get("sync");
|
||||
modes.push(mode);
|
||||
if (mode) observations += 1;
|
||||
|
||||
return HttpResponse.json(
|
||||
resource(snapshot, {
|
||||
dataRevision: observations > 0 ? "new" : "old",
|
||||
}),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
const { queryClient, wrapper } = createQueryWrapper();
|
||||
const { result } = renderHook(() => usePrivateResource("a"), { wrapper });
|
||||
await waitFor(() => expect(result.current.isSuccess).toBe(true));
|
||||
await act(() => result.current.observe());
|
||||
await waitFor(() => expect(result.current.meta?.dataRevision).toBe("new"));
|
||||
|
||||
expect(modes).toEqual([null, "observe"]);
|
||||
expect(queryClient.getQueryCache().getAll()).toHaveLength(1);
|
||||
expect(
|
||||
queryClient.getQueryData(resourceOptions("a").queryKey),
|
||||
).toMatchObject({ data: snapshot, meta: { dataRevision: "new" } });
|
||||
});
|
||||
it("keeps successful HTTP state distinct from missing or failed source data", async () => {
|
||||
auth();
|
||||
server.use(
|
||||
@@ -136,47 +104,6 @@ describe("persistent resource query lifecycle", () => {
|
||||
expect(result.current.isSuccess).toBe(true);
|
||||
expect(result.current.isPending).toBe(false);
|
||||
});
|
||||
it("keeps the observed snapshot when an older query finishes later", async () => {
|
||||
auth();
|
||||
|
||||
const { promise: blocked, resolve: release }
|
||||
= Promise.withResolvers<void>();
|
||||
|
||||
let isStarted = false;
|
||||
server.use(
|
||||
http.get(
|
||||
"*/api/v1/brokerage-accounts/:accountId/portfolio",
|
||||
async ({ request }) => {
|
||||
if (!new URL(request.url).searchParams.has("sync")) {
|
||||
isStarted = true;
|
||||
await blocked;
|
||||
|
||||
return HttpResponse.json(resource({ ...snapshot, isStale: true }));
|
||||
}
|
||||
|
||||
return HttpResponse.json(resource(snapshot));
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
const { result } = renderHook(() => usePrivateResource("a"), {
|
||||
wrapper: createQueryWrapper().wrapper,
|
||||
});
|
||||
|
||||
await waitFor(() => expect(isStarted).toBe(true));
|
||||
// Capture the observation promise before releasing the old handler; the
|
||||
// final assertion must follow its settlement, not the handler release.
|
||||
let observation: Promise<unknown> = Promise.resolve();
|
||||
await act(async () => {
|
||||
observation = result.current.observe() ?? Promise.resolve();
|
||||
await observation;
|
||||
});
|
||||
await act(async () => {
|
||||
release();
|
||||
await observation;
|
||||
});
|
||||
expect(result.current.data).toEqual(snapshot);
|
||||
});
|
||||
it("clears private snapshots on confirmed access loss and fences another pending success", async () => {
|
||||
auth();
|
||||
let isDenied = false;
|
||||
|
||||
Reference in New Issue
Block a user