diff --git a/src/backend/src/healthcheck.js b/src/backend/src/healthcheck.js index 6929f4a..cdd09bc 100644 --- a/src/backend/src/healthcheck.js +++ b/src/backend/src/healthcheck.js @@ -63,6 +63,8 @@ async function checkApp(appConfig) { id: appConfig.id, name: appConfig.name, description: appConfig.description || '', + // Préserve la catégorie du manifeste pour le rendu différencié des services INFRA. + category: appConfig.category || 'SANTINOVA', urls: appConfig.urls, containerName: appConfig.containerName, lastCheck: new Date().toISOString(), diff --git a/src/backend/test/healthcheck-category.test.js b/src/backend/test/healthcheck-category.test.js new file mode 100644 index 0000000..fe030a4 --- /dev/null +++ b/src/backend/test/healthcheck-category.test.js @@ -0,0 +1,38 @@ +const assert = require('node:assert/strict'); +const Module = require('node:module'); + +// Le test est autonome : aucune dépendance externe ni requête réseau n’est nécessaire. +const originalLoad = Module._load; +Module._load = function mockAxios(request, parent, isMain) { + if (request === 'axios') return { get: async () => ({ status: 200 }) }; + return originalLoad.call(this, request, parent, isMain); +}; + +// Le test isole Docker : il valide le contrat de données émis par healthcheck. +const dockerPath = require.resolve('../src/docker'); +require.cache[dockerPath] = { + id: dockerPath, + filename: dockerPath, + loaded: true, + exports: { + getContainerInfo: async () => ({ running: true }), + }, +}; + +const { checkApp } = require('../src/healthcheck'); + +(async () => { + const result = await checkApp({ + id: 'referentiel-ia', + name: 'Référentiel IA Santinova', + category: 'INFRA', + urls: {}, + containerName: 'referentiel-ia', + }); + + assert.equal(result.category, 'INFRA'); + console.log('healthcheck-category: OK'); +})().catch((error) => { + console.error(error); + process.exit(1); +});