mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-12 23:33:43 +08:00
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
import { resolvePasswordGateState } from '@/lib/auth/password-gate-state';
|
|
import type { AuthSession } from '@/lib/store/auth-store';
|
|
|
|
const session: AuthSession = {
|
|
accountId: 'account-1',
|
|
profileId: 'profile-1',
|
|
username: 'alice',
|
|
name: 'Alice',
|
|
role: 'viewer',
|
|
customPermissions: [],
|
|
mode: 'managed',
|
|
};
|
|
|
|
test('PasswordGate unlocks when a server session exists even without a local mirror', () => {
|
|
assert.deepEqual(resolvePasswordGateState({
|
|
hasAuth: true,
|
|
serverSession: session,
|
|
mirroredSession: null,
|
|
persistSession: true,
|
|
}), {
|
|
action: 'unlock-session',
|
|
session,
|
|
persistSession: true,
|
|
});
|
|
});
|
|
|
|
test('PasswordGate clears stale local mirrors without requiring a page reload', () => {
|
|
assert.deepEqual(resolvePasswordGateState({
|
|
hasAuth: true,
|
|
serverSession: null,
|
|
mirroredSession: session,
|
|
persistSession: true,
|
|
}), {
|
|
action: 'lock',
|
|
clearMirroredSession: true,
|
|
});
|
|
});
|
|
|
|
test('PasswordGate unlocks public deployments without auth state', () => {
|
|
assert.deepEqual(resolvePasswordGateState({
|
|
hasAuth: false,
|
|
serverSession: null,
|
|
mirroredSession: null,
|
|
persistSession: true,
|
|
}), {
|
|
action: 'unlock-public',
|
|
});
|
|
});
|
|
|
|
test('PasswordGate remains locked when auth is configured and no valid session exists', () => {
|
|
assert.deepEqual(resolvePasswordGateState({
|
|
hasAuth: true,
|
|
serverSession: null,
|
|
mirroredSession: null,
|
|
persistSession: true,
|
|
}), {
|
|
action: 'lock',
|
|
clearMirroredSession: false,
|
|
});
|
|
});
|