2
0

morgan-like-format-options.spec.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import type { IncomingMessage, ServerResponse } from 'node:http';
  2. import { describe, expect, it } from 'vitest';
  3. import { morganLikeFormatOptions } from './morgan-like-format-options';
  4. function fakeReq(method: string, url: string): IncomingMessage {
  5. return { method, url } as IncomingMessage;
  6. }
  7. function fakeRes(statusCode: number): ServerResponse {
  8. return { statusCode } as unknown as ServerResponse;
  9. }
  10. describe('morganLikeFormatOptions', () => {
  11. describe('customSuccessMessage', () => {
  12. it('formats as METHOD /url STATUS - TIMEms', () => {
  13. const msg = morganLikeFormatOptions.customSuccessMessage(
  14. fakeReq('GET', '/page/path'),
  15. fakeRes(200),
  16. 12.4,
  17. );
  18. expect(msg).toBe('GET /page/path 200 - 12ms');
  19. });
  20. it('rounds responseTime to nearest integer', () => {
  21. const msg = morganLikeFormatOptions.customSuccessMessage(
  22. fakeReq('POST', '/api'),
  23. fakeRes(201),
  24. 0.7,
  25. );
  26. expect(msg).toBe('POST /api 201 - 1ms');
  27. });
  28. });
  29. describe('customErrorMessage', () => {
  30. it('includes error message', () => {
  31. const msg = morganLikeFormatOptions.customErrorMessage(
  32. fakeReq('PUT', '/data'),
  33. fakeRes(500),
  34. new Error('db timeout'),
  35. );
  36. expect(msg).toBe('PUT /data 500 - db timeout');
  37. });
  38. });
  39. describe('customLogLevel', () => {
  40. it('returns info for 2xx responses', () => {
  41. const level = morganLikeFormatOptions.customLogLevel(
  42. fakeReq('GET', '/'),
  43. fakeRes(200),
  44. undefined,
  45. );
  46. expect(level).toBe('info');
  47. });
  48. it('returns warn for 4xx responses', () => {
  49. const level = morganLikeFormatOptions.customLogLevel(
  50. fakeReq('GET', '/'),
  51. fakeRes(404),
  52. undefined,
  53. );
  54. expect(level).toBe('warn');
  55. });
  56. it('returns error for 5xx responses', () => {
  57. const level = morganLikeFormatOptions.customLogLevel(
  58. fakeReq('GET', '/'),
  59. fakeRes(503),
  60. undefined,
  61. );
  62. expect(level).toBe('error');
  63. });
  64. it('returns error when error object is present', () => {
  65. const level = morganLikeFormatOptions.customLogLevel(
  66. fakeReq('GET', '/'),
  67. fakeRes(200),
  68. new Error('unexpected'),
  69. );
  70. expect(level).toBe('error');
  71. });
  72. });
  73. });