opencode/packages/console/app/test/serverAction.test.ts

34 lines
1.2 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { sanitizeServerActionRequest } from "../src/lib/server-action"
describe("server action referer", () => {
test("preserves same-origin return locations", () => {
const request = new Request("https://dev.opencode.ai/_server?id=action", {
headers: { referer: "https://dev.opencode.ai/auth?next=%2Fconsole" },
})
expect(sanitizeServerActionRequest(request)).toBe(request)
})
test("replaces unsafe return locations with the request origin", () => {
const referers = ["https://evil.example/phishing-login", "not a url", undefined]
expect(
referers.map((referer) =>
sanitizeServerActionRequest(
new Request("https://dev.opencode.ai/_server?id=action", {
headers: referer === undefined ? undefined : { referer },
}),
).headers.get("referer"),
),
).toEqual(["https://dev.opencode.ai", "https://dev.opencode.ai", "https://dev.opencode.ai"])
})
test("does not change other routes", () => {
const request = new Request("https://dev.opencode.ai/auth", {
headers: { referer: "https://evil.example/phishing-login" },
})
expect(sanitizeServerActionRequest(request)).toBe(request)
})
})