@@ -4,6 +4,7 @@ import express from 'express'
44import Sinon from 'sinon'
55
66import * as getAdminHealthControllerFactory from '../../../src/factories/controllers/get-admin-health-controller-factory'
7+ import * as getAdminMetricsControllerFactory from '../../../src/factories/controllers/get-admin-metrics-controller-factory'
78import { hashAdminPassword } from '../../../src/utils/admin-password'
89import * as adminRateLimitMiddleware from '../../../src/handlers/request-handlers/admin-rate-limit-middleware'
910import * as rateLimiterMiddleware from '../../../src/handlers/request-handlers/rate-limiter-middleware'
@@ -13,6 +14,7 @@ describe('admin router', () => {
1314 const originalSecret = process . env . SECRET
1415 const originalAdminPassword = process . env . ADMIN_PASSWORD
1516 let createGetAdminHealthControllerStub : Sinon . SinonStub
17+ let createGetAdminMetricsControllerStub : Sinon . SinonStub
1618 let createSettingsStub : Sinon . SinonStub
1719 let rateLimiterMiddlewareStub : Sinon . SinonStub
1820 let adminRateLimitMiddlewareStub : Sinon . SinonStub
@@ -48,6 +50,18 @@ describe('admin router', () => {
4850 )
4951 } ,
5052 } as any )
53+ createGetAdminMetricsControllerStub = Sinon . stub (
54+ getAdminMetricsControllerFactory ,
55+ 'createGetAdminMetricsController' ,
56+ ) . returns ( {
57+ handleRequest : async ( _request : any , response : any ) => {
58+ response
59+ . status ( 200 )
60+ . setHeader ( 'content-type' , 'text/event-stream; charset=utf-8' )
61+ . write ( 'data: {"timestamp":1,"status":"ok"}\n\n' )
62+ response . end ( )
63+ } ,
64+ } as any )
5165 createSettingsStub = Sinon . stub ( settingsFactory , 'createSettings' ) . returns ( settings as any )
5266 const passthrough = async ( _request : any , _response : any , next : any ) => {
5367 next ( )
@@ -72,6 +86,7 @@ describe('admin router', () => {
7286
7387 const stopServer = async ( ) => {
7488 createGetAdminHealthControllerStub ?. restore ( )
89+ createGetAdminMetricsControllerStub ?. restore ( )
7590 createSettingsStub ?. restore ( )
7691 rateLimiterMiddlewareStub ?. restore ( )
7792 adminRateLimitMiddlewareStub ?. restore ( )
@@ -132,10 +147,12 @@ describe('admin router', () => {
132147
133148 const sessionResponse = await axios . get ( `${ baseUrl } /session` , { validateStatus : ( ) => true } )
134149 const healthResponse = await axios . get ( `${ baseUrl } /health` , { validateStatus : ( ) => true } )
150+ const metricsResponse = await axios . get ( `${ baseUrl } /metrics` , { validateStatus : ( ) => true } )
135151
136152 expect ( sessionResponse . status ) . to . equal ( 401 )
137153 expect ( healthResponse . status ) . to . equal ( 401 )
138- expect ( rateLimiterMiddlewareStub . calledTwice ) . to . be . true
154+ expect ( metricsResponse . status ) . to . equal ( 401 )
155+ expect ( rateLimiterMiddlewareStub . callCount ) . to . equal ( 3 )
139156 } )
140157
141158 it ( 'rejects invalid login credentials' , async ( ) => {
@@ -229,9 +246,18 @@ describe('admin router', () => {
229246 expect ( healthResponse . status ) . to . equal ( 200 )
230247 expect ( healthResponse . data ) . to . include . keys ( 'status' , 'uptimeSeconds' , 'worker' , 'database' , 'redis' )
231248
232- expect ( rateLimiterMiddlewareStub . callCount ) . to . equal ( 3 )
249+ const metricsResponse = await axios . get ( `${ baseUrl } /metrics` , {
250+ headers : { cookie } ,
251+ validateStatus : ( ) => true ,
252+ responseType : 'text' ,
253+ } )
254+ expect ( metricsResponse . status ) . to . equal ( 200 )
255+ expect ( metricsResponse . headers [ 'content-type' ] ) . to . include ( 'text/event-stream' )
256+ expect ( metricsResponse . data ) . to . include ( '"timestamp":1' )
257+
258+ expect ( rateLimiterMiddlewareStub . callCount ) . to . equal ( 4 )
233259 expect ( adminLoginRateLimitMiddlewareStub . calledOnce ) . to . be . true
234- expect ( adminRateLimitMiddlewareStub . calledTwice ) . to . be . true
260+ expect ( adminRateLimitMiddlewareStub . callCount ) . to . equal ( 3 )
235261 } )
236262
237263 it ( 'authenticates with passwordHash from settings' , async ( ) => {
0 commit comments