/* * Tests de non-régression du registre d'applications. * Le registre doit faire de app.json l'unique source de vérité des applications déployées. */ const assert = require('node:assert/strict'); const fs = require('node:fs'); const os = require('node:os'); const path = require('node:path'); const { discoverApps, refreshApps } = require('../src/app-registry'); function writeManifest(basePath, directory, manifest) { const appPath = path.join(basePath, directory); fs.mkdirSync(appPath, { recursive: true }); fs.writeFileSync(path.join(appPath, 'app.json'), JSON.stringify(manifest), 'utf8'); } const sandbox = fs.mkdtempSync(path.join(os.tmpdir(), 'app-registry-')); try { writeManifest(sandbox, 'contacts', { id: 'itinova-contacts', name: 'Itinova Contacts', category: 'ITINOVA', containerName: 'itinova-contacts', image: 'images/itinova-contacts.png', urls: { recette: 'https://contacts.recette.santinova-soft.org', prod: 'https://contacts.santinova-soft.org', }, }); writeManifest(sandbox, 'invalide', { id: 'app-invalide', name: 'Application invalide', category: 'INCONNUE', urls: { recette: 'https://invalide.recette.santinova-soft.org' }, }); const discovery = discoverApps({ appsBasePath: sandbox, environment: 'recette' }); assert.equal(discovery.apps.length, 1, 'un manifeste invalide doit être exclu'); assert.equal(discovery.errors.length, 1, 'une erreur explicite doit être retournée'); const app = discovery.apps[0]; assert.equal(app.directory, 'contacts', 'le dossier doit être déduit du chemin du manifeste'); assert.equal(app.healthCheckUrl, app.urls.recette, 'la vérification doit cibler l’environnement courant'); assert.equal(app.containerName, 'itinova-contacts'); const config = { appsBasePath: sandbox, environment: 'recette', apps: [{ id: 'itinova-contacts', name: 'ancienne valeur statique' }], }; const refresh = refreshApps(config); assert.equal(refresh.apps.length, 1, 'les applications non déployées ne doivent pas rester en cache'); assert.equal(config.apps[0].name, 'Itinova Contacts', 'app.json doit prévaloir sur toute définition statique'); console.log('OK app-registry'); } finally { fs.rmSync(sandbox, { recursive: true, force: true }); }