Files
multica/packages/core/dashboard/queries.test.ts
2026-07-13 13:30:45 +08:00

85 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
dashboardAgentRunTimeOptions,
dashboardRunTimeDailyOptions,
dashboardUsageByAgentOptions,
dashboardUsageDailyOptions,
} from "./queries";
type QueryOptionsWithPlaceholder = {
queryKey: readonly unknown[];
placeholderData?: unknown;
};
function resolvePlaceholder(
options: QueryOptionsWithPlaceholder,
previousData: unknown,
previousKey: readonly unknown[] | undefined,
) {
expect(options.placeholderData).toBeTypeOf("function");
return (
options.placeholderData as (
data: unknown,
query: { queryKey: readonly unknown[] } | undefined,
) => unknown
)(
previousData,
previousKey ? { queryKey: previousKey } : undefined,
);
}
const optionBuilders = [
dashboardUsageDailyOptions,
dashboardUsageByAgentOptions,
dashboardAgentRunTimeOptions,
dashboardRunTimeDailyOptions,
] as const;
describe("dashboard range placeholders", () => {
it.each(optionBuilders)(
"keeps the previous %s result when only the day range changes",
(buildOptions) => {
const previous = [{ sentinel: "30d" }];
const previousOptions = buildOptions("ws-1", 30, null, "UTC");
const nextOptions = buildOptions("ws-1", 7, null, "UTC");
expect(
resolvePlaceholder(nextOptions, previous, previousOptions.queryKey),
).toBe(previous);
},
);
it("does not carry placeholder data across workspace, project, or timezone scopes", () => {
const previous = [{ sentinel: "previous-scope" }];
const nextOptions = dashboardUsageDailyOptions(
"ws-1",
7,
"project-1",
"Asia/Shanghai",
);
const previousScopes = [
dashboardUsageDailyOptions(
"ws-2",
30,
"project-1",
"Asia/Shanghai",
),
dashboardUsageDailyOptions("ws-1", 30, "project-2", "Asia/Shanghai"),
dashboardUsageDailyOptions("ws-1", 30, "project-1", "UTC"),
];
for (const previousOptions of previousScopes) {
expect(
resolvePlaceholder(nextOptions, previous, previousOptions.queryKey),
).toBeUndefined();
}
});
it("keeps the initial loading state honest when there is no previous query", () => {
const options = dashboardUsageDailyOptions("ws-1", 30, null, "UTC");
expect(resolvePlaceholder(options, undefined, undefined)).toBeUndefined();
});
});