Initial commit
This commit is contained in:
107
packages/core-consent/src/migration.test.ts
Normal file
107
packages/core-consent/src/migration.test.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { RecordingConsent } from "@repo/core-testing/instrumentation";
|
||||
import {
|
||||
extractAnonymousConsent,
|
||||
migrateAnonymousConsent,
|
||||
CONSENT_COOKIE_NAME,
|
||||
} from "@/migration";
|
||||
|
||||
describe("extractAnonymousConsent", () => {
|
||||
it("returns null when no consent cookie is present", () => {
|
||||
expect(extractAnonymousConsent("session=abc; other=xyz")).toBeNull();
|
||||
});
|
||||
|
||||
it("returns null for an empty header", () => {
|
||||
expect(extractAnonymousConsent("")).toBeNull();
|
||||
});
|
||||
|
||||
it("extracts granted categories from the consent cookie", () => {
|
||||
const result = extractAnonymousConsent(
|
||||
`${CONSENT_COOKIE_NAME}=necessary,analytics; session=abc`,
|
||||
);
|
||||
expect(result).toEqual(["necessary", "analytics"]);
|
||||
});
|
||||
|
||||
it("returns null when the consent cookie value is empty", () => {
|
||||
expect(extractAnonymousConsent(`${CONSENT_COOKIE_NAME}=`)).toBeNull();
|
||||
});
|
||||
|
||||
it("trims whitespace around category names", () => {
|
||||
const result = extractAnonymousConsent(
|
||||
`${CONSENT_COOKIE_NAME}= necessary , analytics `,
|
||||
);
|
||||
expect(result).toEqual(["necessary", "analytics"]);
|
||||
});
|
||||
|
||||
it("returns a single category when only one is present", () => {
|
||||
const result = extractAnonymousConsent(`${CONSENT_COOKIE_NAME}=marketing`);
|
||||
expect(result).toEqual(["marketing"]);
|
||||
});
|
||||
|
||||
it("returns null when cookie value contains only commas/whitespace", () => {
|
||||
expect(extractAnonymousConsent(`${CONSENT_COOKIE_NAME}=,, ,`)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("migrateAnonymousConsent", () => {
|
||||
it("calls IConsent.grant with method signup-migration for each category", async () => {
|
||||
const consent = new RecordingConsent();
|
||||
await migrateAnonymousConsent({
|
||||
consent,
|
||||
cookieState: ["necessary", "analytics"],
|
||||
bannerVersion: "v2",
|
||||
policyVersion: "2026-01",
|
||||
});
|
||||
expect(consent.grants).toHaveLength(2);
|
||||
expect(consent.grants[0]).toEqual({
|
||||
category: "necessary",
|
||||
meta: {
|
||||
method: "signup-migration",
|
||||
bannerVersion: "v2",
|
||||
policyVersion: "2026-01",
|
||||
},
|
||||
});
|
||||
expect(consent.grants[1]).toEqual({
|
||||
category: "analytics",
|
||||
meta: {
|
||||
method: "signup-migration",
|
||||
bannerVersion: "v2",
|
||||
policyVersion: "2026-01",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("is a no-op when cookieState is null (absent cookie)", async () => {
|
||||
const consent = new RecordingConsent();
|
||||
await migrateAnonymousConsent({ consent, cookieState: null });
|
||||
expect(consent.grants).toHaveLength(0);
|
||||
});
|
||||
|
||||
it("omits bannerVersion and policyVersion from meta when not provided", async () => {
|
||||
const consent = new RecordingConsent();
|
||||
await migrateAnonymousConsent({
|
||||
consent,
|
||||
cookieState: ["marketing"],
|
||||
});
|
||||
expect(consent.grants).toHaveLength(1);
|
||||
expect(consent.grants[0]!.meta).toEqual({ method: "signup-migration" });
|
||||
});
|
||||
|
||||
it("happy path: cookie header present → grant called with signup-migration on all categories", async () => {
|
||||
const consent = new RecordingConsent();
|
||||
const cookieState = extractAnonymousConsent(
|
||||
`${CONSENT_COOKIE_NAME}=necessary,marketing`,
|
||||
);
|
||||
await migrateAnonymousConsent({
|
||||
consent,
|
||||
cookieState,
|
||||
bannerVersion: "v1",
|
||||
policyVersion: "2025-12",
|
||||
});
|
||||
expect(consent.grants).toHaveLength(2);
|
||||
expect(consent.grants[0]!.meta?.method).toBe("signup-migration");
|
||||
expect(consent.grants[1]!.meta?.method).toBe("signup-migration");
|
||||
expect(consent.isGranted("necessary")).toBe(true);
|
||||
expect(consent.isGranted("marketing")).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user