/*
Unit tests for partnerspbt — partners.pbt covering ReferralPartnerSchema PBT; resolveReferralPartner PBT. It also guards the documented public contract and regression-sensitive edge cases.
- No I/O — pure contract properties only.
- RFC-1198: created.
- RFC-1198: cookie-free referral attribution — /r/ partner landings + voluntary referrer field
Replace the RFC-1191 wg_ref cookie capture with URL+form attribution:
static /r/ and //r/ partner landings (noindex, zero JS,
consent-gated via publicNameConsentRef), ?ref prefill on the existing
referrerField rail, server-side slug resolution against the bundled
partners.yaml, referral_partner_slug/name on the Lagebild ingress contract,
legacy /?ref -> /r/ 302 in the generated worker, and full removal of
the cookie capture module (wg_ref, referral.attribution entitlement,
payload.attribution).
*/
import { describe, expect, test } from "vitest";
import fc from "fast-check";
import {
REFERRAL_SLUG_PATTERN,
ReferralPartnerSchema,
resolveReferralPartner,
type ReferralPartner,
} from "../partners.ts";
const arbSlug = fc
.stringMatching(/^[a-z0-9]+(-[a-z0-9]+){0,3}$/)
.filter((s) => s.length >= 3 && s.length <= 32);
const arbPartner = (slug: string): ReferralPartner => ({
slug,
displayName: "Test Person",
compensation: "referral-fee",
locales: ["de"],
status: "active",
consent: { method: "channel", channel: "email", grantedAt: "2026-01-01" },
validUntil: "2027-01-01",
});
describe("ReferralPartnerSchema PBT", () => {
test("every generated domain slug passes the schema", () => {
fc.assert(
fc.property(arbSlug, (slug) => {
expect(ReferralPartnerSchema.safeParse({ ...arbPartner(slug), slug }).success).toBe(true);
}),
);
});
});
describe("resolveReferralPartner PBT", () => {
test("a partner always resolves from its own slug — including padded/cased input", () => {
fc.assert(
fc.property(
arbSlug,
fc.string({ maxLength: 5 }).map((s) => s.replace(/\S/g, " ")),
(slug, pad) => {
const resolved = resolveReferralPartner(`${pad}${slug.toUpperCase()}${pad}`, [
arbPartner(slug),
]);
expect(resolved?.slug).toBe(slug);
},
),
);
});
test("never resolves a slug that is not in the active set", () => {
fc.assert(
fc.property(arbSlug, arbSlug, (a, b) => {
fc.pre(a !== b);
expect(resolveReferralPartner(b, [arbPartner(a)])).toBeNull();
}),
);
});
test("slug pattern admits no whitespace or metacharacters", () => {
fc.assert(
fc.property(arbSlug, (slug) => {
expect(REFERRAL_SLUG_PATTERN.test(slug)).toBe(true);
expect(/[\s<>"'`\\]/.test(slug)).toBe(false);
}),
);
});
});