chore(workspace): tighten quality gates (#2230)

This commit is contained in:
Hampus authored and GitHub committed 2026-08-31 04:43:20 +02:00
1 parent e6e4c6f7b5
commit 5c2dca1c51
123 files changed
+4925 -5640

No files matched your search

@@ -6,8 +6,9 @@ import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError';
import {AppErrorHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers';
import {getErrorMessage} from '@fluxer/errors/src/i18n/ErrorI18n';
import type {BaseHonoEnv} from '@fluxer/hono_types/src/HonoTypes';
import {Logger} from '@fluxer/logger/src/Logger';
import {Hono} from 'hono';
import {describe, expect, it} from 'vitest';
import {describe, expect, it, vi} from 'vitest';
interface ErrorResponse {
code: string;
@@ -22,19 +23,30 @@ function createApp(): Hono<BaseHonoEnv> {
describe('AppErrorHandler i18n fallbacks', () => {
it('localizes unexpected errors from Accept-Language when middleware locale is missing', async () => {
const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {});
const error = new Error('boom');
const app = createApp();
app.get('/test', () => {
throw new Error('boom');
throw error;
});
const response = await app.request('/test', {
headers: {
'accept-language': 'fr-CA,fr;q=0.9,en;q=0.8',
},
});
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
expect(body.message).toBe('Erreur interne du serveur.');
try {
const response = await app.request('/test', {
headers: {
'accept-language': 'fr-CA,fr;q=0.9,en;q=0.8',
},
});
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
expect(body.message).toBe('Erreur interne du serveur.');
expect(errorLoggerSpy).toHaveBeenCalledTimes(1);
expect(errorLoggerSpy).toHaveBeenCalledWith(
{err: error, status: 500, method: 'GET', path: '/test', requestId: undefined},
'Unhandled error occurred',
);
} finally {
errorLoggerSpy.mockRestore();
}
});
it('localizes FluxerError responses without errorI18nService in context', async () => {
const app = createApp();
@@ -52,32 +64,54 @@ describe('AppErrorHandler i18n fallbacks', () => {
expect(body.message).toBe(getErrorMessage('http.bad_request', 'fr'));
});
it('prefers requestLocale context over Accept-Language header', async () => {
const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {});
const error = new Error('boom');
const app = createApp();
app.use('*', async (ctx, next) => {
ctx.set('requestLocale', Locales.EN_US);
await next();
});
app.get('/test', () => {
throw new Error('boom');
throw error;
});
const response = await app.request('/test', {
headers: {
'accept-language': 'fr',
},
});
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
expect(body.message).toBe('Internal server error.');
try {
const response = await app.request('/test', {
headers: {
'accept-language': 'fr',
},
});
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
expect(body.message).toBe('Internal server error.');
expect(errorLoggerSpy).toHaveBeenCalledTimes(1);
expect(errorLoggerSpy).toHaveBeenCalledWith(
{err: error, status: 500, method: 'GET', path: '/test', requestId: undefined},
'Unhandled error occurred',
);
} finally {
errorLoggerSpy.mockRestore();
}
});
it('returns 500 for unexpected errors with request metadata', async () => {
const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {});
const error = new Error('boom');
const app = createApp();
app.get('/test', () => {
throw new Error('boom');
throw error;
});
const response = await app.request('/test');
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
try {
const response = await app.request('/test');
expect(response.status).toBe(500);
const body = (await response.json()) as ErrorResponse;
expect(body.code).toBe(APIErrorCodes.INTERNAL_SERVER_ERROR);
expect(errorLoggerSpy).toHaveBeenCalledTimes(1);
expect(errorLoggerSpy).toHaveBeenCalledWith(
{err: error, status: 500, method: 'GET', path: '/test', requestId: undefined},
'Unhandled error occurred',
);
} finally {
errorLoggerSpy.mockRestore();
}
});
});