80 lines
1.8 KiB
TypeScript
80 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { resource } from "@/test/resource";
|
|
|
|
import { section } from "./section";
|
|
|
|
describe("instrument source and transport presentation", () => {
|
|
it.each([
|
|
["initial-loading", "incomplete"],
|
|
["available", "complete"],
|
|
] as const)(
|
|
"keeps %s separate from successful transport",
|
|
(availability, completeness) => {
|
|
const data = availability === "initial-loading" ? undefined : { rows: [] };
|
|
|
|
const state = section({
|
|
data,
|
|
isError: false,
|
|
meta: resource(data, { availability, completeness }).meta,
|
|
});
|
|
|
|
expect(state.loading).toBe(availability === "initial-loading");
|
|
expect(state.partial).toBe(completeness === "incomplete");
|
|
expect(state.hasData).toBe(availability !== "initial-loading");
|
|
},
|
|
);
|
|
it("preserves empty successful data instead of treating it as missing", () => {
|
|
const state = section({
|
|
data: [],
|
|
isError: false,
|
|
meta: resource([]).meta,
|
|
});
|
|
|
|
expect(state).toMatchObject({
|
|
error: false,
|
|
hasData: true,
|
|
loading: false,
|
|
});
|
|
});
|
|
|
|
it("preserves a full source when force fails", () => {
|
|
const meta = resource([], {
|
|
lastAttempt: {
|
|
finishedAt: "2026-08-14T00:01:00Z",
|
|
problems: [],
|
|
startedAt: "2026-08-14T00:00:00Z",
|
|
state: "failed",
|
|
},
|
|
}).meta;
|
|
|
|
const state = section({ data: [], isError: false, meta });
|
|
|
|
expect(state).toMatchObject({
|
|
error: true,
|
|
hasData: true,
|
|
loading: false,
|
|
});
|
|
});
|
|
it("shows source failure without a false loading or empty result", () => {
|
|
const state = section({
|
|
data: undefined,
|
|
isError: false,
|
|
meta: resource(null, {
|
|
lastAttempt: {
|
|
finishedAt: "2026-08-14T00:01:00Z",
|
|
problems: [],
|
|
startedAt: "2026-08-14T00:00:00Z",
|
|
state: "failed",
|
|
},
|
|
}).meta,
|
|
});
|
|
|
|
expect(state).toMatchObject({
|
|
error: true,
|
|
hasData: false,
|
|
loading: false,
|
|
});
|
|
});
|
|
});
|