Files
erika/lib/visitor/unique-visitors.test.ts
T

32 lines
949 B
TypeScript

import { describe, expect, test } from "bun:test";
import {
getClientAddress,
hashClientAddress,
} from "./visitor-identifiers";
describe("privacy-preserving visitor tracking", () => {
test("uses the first valid forwarded address", () => {
const headers = new Headers({
"x-forwarded-for": "203.0.113.9, 10.0.0.1",
"x-real-ip": "192.0.2.2",
});
expect(getClientAddress(headers)).toBe("203.0.113.9");
});
test("rejects untrusted non-IP identifiers", () => {
expect(
getClientAddress(new Headers({ "x-forwarded-for": "unknown" })),
).toBeNull();
});
test("creates a stable identifier without retaining the address", () => {
const address = "203.0.113.9";
const identifier = hashClientAddress(address, "test-secret");
expect(identifier).toBe(hashClientAddress(address, "test-secret"));
expect(identifier).not.toContain(address);
expect(identifier).toHaveLength(64);
});
});