tier plans improving

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-08-01 23:02:31 +08:00
parent cae958b5d5
commit c5052fda4c
15 changed files with 371 additions and 41 deletions
+49
View File
@@ -122,6 +122,55 @@ describe('rule: group_restriction', () => {
});
});
// ── Rule: item_allowlist ───────────────────────────────────────────────────────
describe('rule: item_allowlist', () => {
const rules = [
{ type: 'course_subscription_access', levels: ['premium'] },
{ type: 'item_allowlist', item_type: 'course', item_ids: [42, 99] },
];
test('allowlisted exclusive course is granted even though the level-lock rule would block it', () => {
const result = evaluateCourseAccess(
ctx('premium', rules), course('exclusive'), TIER_RANK, { type: 'course', id: 42 }
);
expect(result).toEqual({ allowed: true, reason: null });
});
test('matches item_ids as strings or numbers interchangeably', () => {
const result = evaluateCourseAccess(
ctx('premium', rules), course('exclusive'), TIER_RANK, { type: 'course', id: '99' }
);
expect(result.allowed).toBe(true);
});
test('non-allowlisted exclusive course still falls through to the level-lock rule and is denied', () => {
const result = evaluateCourseAccess(
ctx('premium', rules), course('exclusive'), TIER_RANK, { type: 'course', id: 7 }
);
expect(result).toEqual({ allowed: false, reason: 'subscription_access' });
});
test('item_type must match — a unit id matching a course-scoped allowlist is not granted', () => {
const result = evaluateCourseAccess(
ctx('premium', rules), course('exclusive'), TIER_RANK, { type: 'unit', id: 42 }
);
expect(result).toEqual({ allowed: false, reason: 'subscription_access' });
});
test('no itemMeta (or null id) — item_allowlist is skipped entirely, existing callers unaffected', () => {
const result = evaluateCourseAccess(ctx('premium', rules), course('exclusive'), TIER_RANK);
expect(result).toEqual({ allowed: false, reason: 'subscription_access' });
});
test('allowlisted item still requires nothing when premium content is requested normally', () => {
const result = evaluateCourseAccess(
ctx('premium', rules), course('premium'), TIER_RANK, { type: 'course', id: 1 }
);
expect(result.allowed).toBe(true);
});
});
// ── Multiple rules evaluated together ────────────────────────────────────────
describe('multiple rules', () => {