super-productivity/packages/super-sync-server/tests/server.error-log-level.spec.ts
felix bear d82754faf2
feat(supersync): configure server bind host #7301 (#8108)
Co-authored-by: cocojojo5213 <cocojojo5213@users.noreply.github.com>
2026-06-08 12:12:49 +02:00

66 lines
2.3 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
// pickErrorLogLevel is a pure helper, but server.ts has top-level side
// effects on import (config load, env validation). Mock the modules it
// pulls in transitively so importing `pickErrorLogLevel` does not boot
// a real server.
vi.mock('../src/logger', () => ({
Logger: {
info: vi.fn(),
warn: vi.fn(),
debug: vi.fn(),
error: vi.fn(),
},
}));
const { createListenOptions, pickErrorLogLevel } = await import('../src/server');
describe('createListenOptions', () => {
it('passes the configured host and port to Fastify listen', () => {
expect(createListenOptions({ port: 1900, host: '::' })).toEqual({
port: 1900,
host: '::',
});
});
});
describe('pickErrorLogLevel', () => {
describe('5xx', () => {
it('returns "error" for 500', () => {
expect(pickErrorLogLevel('/anything', 500)).toBe('error');
});
it('returns "error" for 503', () => {
expect(pickErrorLogLevel('/api/sync/ws', 503)).toBe('error');
});
});
describe('WS-upgrade 429 (storm tail)', () => {
it('returns "debug" for /api/sync/ws exact', () => {
expect(pickErrorLogLevel('/api/sync/ws', 429)).toBe('debug');
});
it('returns "debug" for /api/sync/ws with trailing slash', () => {
expect(pickErrorLogLevel('/api/sync/ws/', 429)).toBe('debug');
});
it('returns "debug" for /api/sync/ws with query string', () => {
expect(pickErrorLogLevel('/api/sync/ws?token=x&clientId=y', 429)).toBe('debug');
});
it('returns "debug" for /api/sync/ws with trailing slash + query', () => {
expect(pickErrorLogLevel('/api/sync/ws/?x', 429)).toBe('debug');
});
});
describe('4xx that must stay loud', () => {
it('returns "warn" for 429 on a sibling route (over-match guard)', () => {
expect(pickErrorLogLevel('/api/sync/ws-status', 429)).toBe('warn');
});
it('returns "warn" for 429 on a different /api/sync route', () => {
expect(pickErrorLogLevel('/api/sync/operations', 429)).toBe('warn');
});
it('returns "warn" for 401 on /api/sync/ws', () => {
expect(pickErrorLogLevel('/api/sync/ws', 401)).toBe('warn');
});
it('returns "warn" for 400 on any URL', () => {
expect(pickErrorLogLevel('/api/sync/ws', 400)).toBe('warn');
});
});
});