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

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();
});
});