You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
import { afterEach, describe, expect, it } from "vitest";
|
|
import {
|
|
getAuthenticatedCachedEntryPath,
|
|
getCachedMarriageEntryPath,
|
|
MARRIAGE_ENTRY_PATH_COOKIE,
|
|
normalizeCachedMarriageEntryPath,
|
|
setCachedMarriageEntryPath,
|
|
} from "./entry-route-cache";
|
|
|
|
describe("entry route cache", () => {
|
|
afterEach(() => {
|
|
document.cookie = `${MARRIAGE_ENTRY_PATH_COOKIE}=; Path=/; Max-Age=0`;
|
|
});
|
|
|
|
it("accepts only known authenticated routes", () => {
|
|
expect(normalizeCachedMarriageEntryPath("/questions-list")).toBe(
|
|
"/questions-list",
|
|
);
|
|
expect(normalizeCachedMarriageEntryPath("%2Ffinding-match")).toBe(
|
|
"/finding-match",
|
|
);
|
|
expect(normalizeCachedMarriageEntryPath("https://example.com")).toBeNull();
|
|
expect(normalizeCachedMarriageEntryPath("//example.com")).toBeNull();
|
|
expect(normalizeCachedMarriageEntryPath("/intro")).toBe("/intro");
|
|
expect(normalizeCachedMarriageEntryPath("/invalid-path")).toBeNull();
|
|
});
|
|
|
|
it("requires a real token before trusting the cached route", () => {
|
|
expect(
|
|
getAuthenticatedCachedEntryPath("token", "/questions-list"),
|
|
).toBe("/questions-list");
|
|
expect(
|
|
getAuthenticatedCachedEntryPath("NO_TOKEN", "/questions-list"),
|
|
).toBeNull();
|
|
expect(
|
|
getAuthenticatedCachedEntryPath("", "/questions-list"),
|
|
).toBeNull();
|
|
});
|
|
|
|
it("persists and clears a safe client entry route", () => {
|
|
setCachedMarriageEntryPath("/questions-list");
|
|
expect(getCachedMarriageEntryPath()).toBe("/questions-list");
|
|
|
|
setCachedMarriageEntryPath(null);
|
|
expect(getCachedMarriageEntryPath()).toBeNull();
|
|
});
|
|
});
|