Initial commit
This commit is contained in:
80
packages/core-consent/src/in-memory-consent.test.ts
Normal file
80
packages/core-consent/src/in-memory-consent.test.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { InMemoryConsent } from "@/in-memory-consent";
|
||||
|
||||
describe("InMemoryConsent.isGranted", () => {
|
||||
it("returns false for an unknown category", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
expect(consent.isGranted("analytics")).toBe(false);
|
||||
});
|
||||
|
||||
it("returns true after grant", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("analytics");
|
||||
expect(consent.isGranted("analytics")).toBe(true);
|
||||
});
|
||||
|
||||
it("returns false after withdraw", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("analytics");
|
||||
await consent.withdraw("analytics");
|
||||
expect(consent.isGranted("analytics")).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("InMemoryConsent.grant", () => {
|
||||
it("stores bannerVersion, policyVersion, method in state", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("marketing", {
|
||||
bannerVersion: "v2",
|
||||
policyVersion: "2026-01",
|
||||
method: "banner-accept",
|
||||
});
|
||||
const cats = consent.getCategories();
|
||||
expect(cats).toHaveLength(1);
|
||||
expect(cats[0]!.bannerVersion).toBe("v2");
|
||||
expect(cats[0]!.policyVersion).toBe("2026-01");
|
||||
expect(cats[0]!.method).toBe("banner-accept");
|
||||
expect(cats[0]!.grantedAt).toBeInstanceOf(Date);
|
||||
});
|
||||
|
||||
it("preserves withdrawnAt across regrant", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("analytics");
|
||||
await consent.withdraw("analytics");
|
||||
const withdrawnAt = consent.getCategories()[0]!.withdrawnAt;
|
||||
await consent.grant("analytics");
|
||||
const cats = consent.getCategories();
|
||||
expect(cats[0]!.withdrawnAt).toBe(withdrawnAt);
|
||||
});
|
||||
});
|
||||
|
||||
describe("InMemoryConsent.withdraw", () => {
|
||||
it("sets withdrawnAt on an existing entry", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("functional");
|
||||
await consent.withdraw("functional");
|
||||
const cats = consent.getCategories();
|
||||
expect(cats[0]!.state).toBe("denied");
|
||||
expect(cats[0]!.withdrawnAt).toBeInstanceOf(Date);
|
||||
});
|
||||
|
||||
it("can withdraw a category that was never granted", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.withdraw("analytics");
|
||||
expect(consent.isGranted("analytics")).toBe(false);
|
||||
const cats = consent.getCategories();
|
||||
expect(cats[0]!.state).toBe("denied");
|
||||
});
|
||||
});
|
||||
|
||||
describe("InMemoryConsent.getCategories", () => {
|
||||
it("returns all granted and denied categories", async () => {
|
||||
const consent = new InMemoryConsent();
|
||||
await consent.grant("necessary");
|
||||
await consent.grant("analytics");
|
||||
await consent.withdraw("analytics");
|
||||
|
||||
const cats = consent.getCategories();
|
||||
expect(cats).toHaveLength(2);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user