Files
webmail/lib/session-policy/__tests__/limits.test.ts
T

36 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { MAX_SKEW_MARGIN_MS, sessionLimits } from '../limits';
const HOUR = 60 * 60 * 1000;
const session = (idleMinutes: number, maxHours: number, warnSeconds = 60) => ({ idleMinutes, maxHours, warnSeconds });
describe('session limits of the signed-in accounts', () => {
it('takes the shortest idle time that is set', () => {
const limits = sessionLimits([
{ session: session(30, 0, 120) },
{ session: session(0, 0) },
{ session: session(10, 0, 45) },
]);
expect(limits.idle).toEqual({ minutes: 10, warnSeconds: 45 });
});
it('ignores accounts that set nothing', () => {
expect(sessionLimits([{ session: session(0, 0) }, { session: undefined }])).toEqual({ idle: null, max: null });
expect(sessionLimits([])).toEqual({ idle: null, max: null });
});
it('ends at the first maximum that runs out, counted from each sign-in, a minute early', () => {
const limits = sessionLimits([
{ session: session(0, 8), signedInAt: 10 * HOUR },
{ session: session(0, 12), signedInAt: 0 },
{ session: session(0, 4, 30), signedInAt: 9 * HOUR },
]);
expect(limits.max).toEqual({ at: 12 * HOUR - 60 * 1000, hours: 12, warnSeconds: 60 });
expect(MAX_SKEW_MARGIN_MS).toBe(60 * 1000);
});
it('needs a sign-in time to count a maximum', () => {
expect(sessionLimits([{ session: session(0, 8) }]).max).toBeNull();
});
});