35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import type { IncomingMessage } from 'node:http';
|
|
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { authenticatePersistenceRequest } from '@/lib/persistence/server-auth';
|
|
|
|
function request(headers: IncomingMessage['headers']): IncomingMessage {
|
|
return { headers } as IncomingMessage;
|
|
}
|
|
|
|
describe('embedded persistence development authentication', () => {
|
|
beforeEach(() => {
|
|
vi.unstubAllEnvs();
|
|
vi.stubEnv('PERSISTENCE_DEV_TOKEN', 'shared-secret');
|
|
});
|
|
|
|
it('accepts the configured bearer token and learner partition', async () => {
|
|
await expect(
|
|
authenticatePersistenceRequest(
|
|
request({
|
|
authorization: 'Bearer shared-secret',
|
|
'x-learner-key': 'anon:learner-1',
|
|
}),
|
|
),
|
|
).resolves.toEqual({ key: 'anon:learner-1', learnerKey: 'anon:learner-1' });
|
|
});
|
|
|
|
it('rejects missing and incorrect bearer tokens', async () => {
|
|
await expect(authenticatePersistenceRequest(request({}))).resolves.toBeUndefined();
|
|
await expect(
|
|
authenticatePersistenceRequest(request({ authorization: 'Bearer shared-secreu' })),
|
|
).resolves.toBeUndefined();
|
|
});
|
|
});
|