mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
tier plans improving
Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
@@ -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', () => {
|
||||
|
||||
Reference in New Issue
Block a user