Files
triggerdotdev--trigger.dev/apps/webapp/test/shouldRevalidateRunsList.test.ts
T
2026-07-13 13:32:57 +08:00

161 lines
4.7 KiB
TypeScript

import type { Location, Navigation, ShouldRevalidateFunction } from "@remix-run/react";
import { describe, expect, it } from "vitest";
import {
isRunsListLoading,
RUNS_BULK_INSPECTOR_OPEN_VALUE,
shouldRevalidateRunsList,
} from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/shouldRevalidateRunsList";
const runsUrl = (search: string) =>
new URL(`http://localhost:3030/orgs/acme/projects/proj/env/dev/runs${search}`);
function args(
currentSearch: string,
nextSearch: string,
defaultShouldRevalidate = true
): Parameters<ShouldRevalidateFunction>[0] {
return {
currentUrl: runsUrl(currentSearch),
nextUrl: runsUrl(nextSearch),
defaultShouldRevalidate,
formMethod: undefined,
formAction: undefined,
formData: undefined,
json: undefined,
actionResult: undefined,
};
}
describe("shouldRevalidateRunsList", () => {
it("returns false when only bulk inspector UI params change", () => {
expect(
shouldRevalidateRunsList(
args(
"?tasks=hello",
`?tasks=hello&bulkInspector=${RUNS_BULK_INSPECTOR_OPEN_VALUE}&action=replay&mode=selected`
)
)
).toBe(false);
});
it("returns false when closing the bulk inspector", () => {
expect(
shouldRevalidateRunsList(
args(`?tasks=hello&bulkInspector=${RUNS_BULK_INSPECTOR_OPEN_VALUE}`, "?tasks=hello")
)
).toBe(false);
});
it("returns false when list-data params are reordered", () => {
expect(shouldRevalidateRunsList(args("?tasks=a&runtime=b", "?runtime=b&tasks=a"))).toBe(false);
});
it("returns default when list filters and bulk inspector UI params change together", () => {
expect(
shouldRevalidateRunsList(
args("?tasks=a", `?tasks=b&bulkInspector=${RUNS_BULK_INSPECTOR_OPEN_VALUE}`)
)
).toBe(true);
});
it("returns default when list filters change", () => {
expect(shouldRevalidateRunsList(args("?tasks=hello", "?tasks=world"))).toBe(true);
});
it("returns default when pagination params change", () => {
expect(
shouldRevalidateRunsList(args("?tasks=hello", "?tasks=hello&cursor=abc&direction=forward"))
).toBe(true);
});
it("returns default when the URL is unchanged (explicit revalidate)", () => {
expect(shouldRevalidateRunsList(args("?tasks=hello", "?tasks=hello"))).toBe(true);
});
it("returns default when pathname changes", () => {
expect(
shouldRevalidateRunsList({
...args("?tasks=hello", "?tasks=hello"),
nextUrl: new URL("http://localhost:3030/orgs/acme/projects/proj/env/dev/tasks"),
})
).toBe(true);
});
it("respects defaultShouldRevalidate when false", () => {
expect(shouldRevalidateRunsList(args("?tasks=hello", "?tasks=world", false))).toBe(false);
});
});
function makeLocation(search: string): Location {
const url = runsUrl(search);
return {
pathname: url.pathname,
search: url.search,
hash: url.hash,
state: null,
key: "test-key",
};
}
function navigation(state: Navigation["state"], nextSearch?: string): Navigation {
return {
state,
location: nextSearch ? makeLocation(nextSearch) : undefined,
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
};
}
describe("isRunsListLoading", () => {
it("returns false when navigation is idle", () => {
expect(isRunsListLoading(navigation("idle"), "?tasks=hello")).toBe(false);
});
it("returns false when only bulk inspector UI params change", () => {
expect(
isRunsListLoading(
navigation(
"loading",
`?tasks=hello&bulkInspector=${RUNS_BULK_INSPECTOR_OPEN_VALUE}&action=replay`
),
"?tasks=hello"
)
).toBe(false);
});
it("returns false when list-data params are reordered", () => {
expect(
isRunsListLoading(navigation("loading", "?runtime=b&tasks=a"), "?tasks=a&runtime=b")
).toBe(false);
});
it("returns true when list filters and bulk inspector UI params change together", () => {
expect(
isRunsListLoading(
navigation("loading", `?tasks=b&bulkInspector=${RUNS_BULK_INSPECTOR_OPEN_VALUE}`),
"?tasks=a"
)
).toBe(true);
});
it("returns true when list filters change", () => {
expect(isRunsListLoading(navigation("loading", "?tasks=world"), "?tasks=hello")).toBe(true);
});
it("returns true when pagination params change", () => {
expect(
isRunsListLoading(
navigation("loading", "?tasks=hello&cursor=abc&direction=forward"),
"?tasks=hello"
)
).toBe(true);
});
it("returns false when navigation is loading without a target location", () => {
expect(isRunsListLoading(navigation("loading"), "?tasks=hello")).toBe(false);
});
});