import { describe, expect, it, vi } from "vitest"; import { resource } from "@/test/resource"; import { section } from "./section"; describe("instrument source and transport presentation", () => { it.each(["missing", "partial", "complete"] as const)( "keeps %s separate from successful transport", (availability) => { const data = availability === "missing" ? undefined : { rows: [] }; const state = section({ data, isError: false, isFetching: false, meta: resource(data, { availability }).meta, refetch: vi.fn(), }); expect(state.loading).toBe(availability === "missing"); expect(state.partial).toBe(availability === "partial"); expect(state.hasData).toBe(availability !== "missing"); }, ); it("preserves a full fresh source and timestamp when force fails, while offering scoped retry", () => { const retry = vi.fn(); const refetch = vi.fn(); const meta = resource([], { sync: { errorCode: "TBANK_UNAVAILABLE", id: "work", state: "failed" }, }).meta; const state = section( { data: [], isError: false, isFetching: false, meta, refetch }, retry, ); expect(state).toMatchObject({ error: true, hasData: true, lastSuccessfulAt: meta.lastSuccessfulAt, loading: false, refreshing: false, }); state.retry(); expect(retry).toHaveBeenCalledOnce(); expect(refetch).not.toHaveBeenCalled(); }); it("shows source failure without a false loading or empty result", () => { const state = section(( { data: undefined, isError: false, isFetching: false, meta: resource(null, { sync: { errorCode: "TBANK_UNAVAILABLE", id: "work", state: "failed" }, }).meta, refetch: vi.fn(), } )); expect(state).toMatchObject({ error: true, hasData: false, loading: false, }); }); });