diff --git a/app.json b/app.json index 3e20037..cfcb864 100644 --- a/app.json +++ b/app.json @@ -1,6 +1,6 @@ { "id": "manus-dashboard", - "name": "Dashboard Recette", + "name": "Dashboard", "category": "INFRA", "urls": { "recette": "https://dashboard.recette.santinova-soft.org", diff --git a/src/backend/src/app-registry.js b/src/backend/src/app-registry.js index 32cf0ac..eb452be 100644 --- a/src/backend/src/app-registry.js +++ b/src/backend/src/app-registry.js @@ -51,9 +51,13 @@ function normalizeManifest(manifest, directory, environment) { throw new Error('ci doit être un objet avec une propriété required booléenne'); } + const displayName = manifest.id === 'manus-dashboard' + ? `Dashboard ${environment === 'prod' ? 'Production' : 'Recette'}` + : manifest.name.trim(); + return { ...manifest, - name: manifest.name.trim(), + name: displayName, directory, containerName: manifest.containerName || manifest.id, healthCheckUrl: manifest.urls[environment], diff --git a/src/backend/test/app-registry.test.js b/src/backend/test/app-registry.test.js index 7a5c46a..2fb1134 100644 --- a/src/backend/test/app-registry.test.js +++ b/src/backend/test/app-registry.test.js @@ -30,6 +30,16 @@ try { }, }); + writeManifest(sandbox, 'dashboard', { + id: 'manus-dashboard', + name: 'Dashboard', + category: 'INFRA', + urls: { + recette: 'https://dashboard.recette.santinova-soft.org', + prod: 'https://dashboard.santinova-soft.org', + }, + }); + writeManifest(sandbox, 'invalide', { id: 'app-invalide', name: 'Application invalide', @@ -38,22 +48,32 @@ try { }); const discovery = discoverApps({ appsBasePath: sandbox, environment: 'recette' }); - assert.equal(discovery.apps.length, 1, 'un manifeste invalide doit être exclu'); + assert.equal(discovery.apps.length, 2, 'un manifeste invalide doit être exclu'); assert.equal(discovery.errors.length, 1, 'une erreur explicite doit être retournée'); - const app = discovery.apps[0]; + const app = discovery.apps.find((candidate) => candidate.id === 'itinova-contacts'); 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 dashboardRecette = discovery.apps.find((candidate) => candidate.id === 'manus-dashboard'); + assert.equal(dashboardRecette.name, 'Dashboard Recette'); + const productionDiscovery = discoverApps({ appsBasePath: sandbox, environment: 'prod' }); + const dashboardProduction = productionDiscovery.apps.find((candidate) => candidate.id === 'manus-dashboard'); + assert.equal(dashboardProduction.name, 'Dashboard Production'); + 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'); + assert.equal(refresh.apps.length, 2, 'les applications non déployées ne doivent pas rester en cache'); + assert.equal( + config.apps.find((candidate) => candidate.id === 'itinova-contacts').name, + 'Itinova Contacts', + 'app.json doit prévaloir sur toute définition statique' + ); console.log('OK app-registry'); } finally {