Files
core2026/packages/common/test/sanctions.test.ts
T

47 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
isActiveServerRestriction,
isGameAccessBlocked,
isLoginBanned,
isMessageAccessBlocked,
isProfileFeatureBlocked,
} from '../src/auth/sanctions.js';
const NOW = new Date('2026-07-26T00:00:00.000Z');
describe('sanctions', () => {
it('treats missing restriction expiry as indefinite and ignores expired restrictions', () => {
expect(isActiveServerRestriction({ blockedFeatures: ['game'] }, NOW)).toBe(true);
expect(
isActiveServerRestriction(
{
blockedFeatures: ['game'],
until: '2026-07-25T23:59:59.999Z',
},
NOW
)
).toBe(false);
});
it('matches profile instance and base-profile feature aliases', () => {
const sanctions = {
serverRestrictions: {
'che:default': { blockedFeatures: ['message'] },
che: { blockedFeatures: ['gameplay'] },
},
};
expect(isProfileFeatureBlocked(sanctions, ['che:default', 'che'], 'messages', NOW)).toBe(true);
expect(isProfileFeatureBlocked(sanctions, ['che:default', 'che'], 'game', NOW)).toBe(true);
expect(isProfileFeatureBlocked(sanctions, ['hwe:default', 'hwe'], 'game', NOW)).toBe(false);
});
it('separates login bans, gameplay suspension, and message mute', () => {
expect(isLoginBanned({ bannedUntil: '2099-01-01T00:00:00.000Z' }, NOW)).toBe(true);
expect(isGameAccessBlocked({ suspendedUntil: '2099-01-01T00:00:00.000Z' }, ['che'], NOW)).toBe(true);
expect(isGameAccessBlocked({ mutedUntil: '2099-01-01T00:00:00.000Z' }, ['che'], NOW)).toBe(false);
expect(isMessageAccessBlocked({ mutedUntil: '2099-01-01T00:00:00.000Z' }, ['che'], NOW)).toBe(true);
});
});