import { describe, expect, test } from "bun:test";
import { safeReturnPath } from "./return-to";
describe("safeReturnPath", () => {
test("accepts same-origin paths with query and hash", () => {
expect(safeReturnPath("/acme/app/compare/main...feat?x=1#y")).toBe("/acme/app/compare/main...feat?x=1#y");
});
test("rejects anything that could leave the origin", () => {
for (const value of ["//evil.example", "/\\evil.example", "https://evil.example", "evil", "", "/a\nb", "/a\\b"]) {
expect(safeReturnPath(value)).toBeNull();
}
expect(safeReturnPath(42)).toBeNull();
expect(safeReturnPath(`/${"a".repeat(3000)}`)).toBeNull();
});
test("never loops back to the sign-in pages", () => {
expect(safeReturnPath("/login?next=/x")).toBeNull();
expect(safeReturnPath("/signup")).toBeNull();
});
});