mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 16:13:15 +00:00
36 lines
1.4 KiB
TypeScript
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();
|
|
});
|
|
});
|