openreader/tests/unit/server-error-response.spec.ts

43 lines
1.4 KiB
TypeScript

import { expect, test } from '@playwright/test';
import { errorResponse } from '../../src/lib/server/errors/next-response';
import { createServerAppError } from '../../src/lib/server/errors/contract';
test.describe('server error response helper', () => {
test('returns mapped 4xx response with explicit app code', async () => {
const response = errorResponse(
createServerAppError({
code: 'AUTH_UNAUTHORIZED',
message: 'Unauthorized',
errorClass: 'auth',
httpStatus: 401,
retryable: false,
}),
{
apiErrorMessage: 'Unauthorized',
},
);
expect(response.status).toBe(401);
await expect(response.json()).resolves.toEqual({
error: 'Unauthorized',
errorCode: 'AUTH_UNAUTHORIZED',
retryable: false,
});
});
test('normalizes unknown errors to safe 500 without stack leakage', async () => {
const response = errorResponse(new Error('sensitive internal details'), {
apiErrorMessage: 'Internal Server Error',
normalize: { code: 'UNKNOWN_SERVER_ERROR', errorClass: 'unknown' },
});
const body = await response.json();
expect(response.status).toBe(500);
expect(body).toEqual({
error: 'Internal Server Error',
errorCode: 'UNKNOWN_SERVER_ERROR',
retryable: false,
});
expect(JSON.stringify(body)).not.toContain('stack');
expect(JSON.stringify(body)).not.toContain('cause');
});
});