fix: rétablir le dashboard production et ses moteurs IA
All checks were successful
Validation Dashboard / Tests backend et build frontend (push) Successful in 1m7s
All checks were successful
Validation Dashboard / Tests backend et build frontend (push) Successful in 1m7s
This commit is contained in:
@@ -24,6 +24,9 @@ try {
|
||||
category: 'ITINOVA',
|
||||
containerName: 'itinova-contacts',
|
||||
image: 'images/itinova-contacts.png',
|
||||
ai: {
|
||||
engines: [{ provider: 'Google Gemini', model: 'gemini-2.5-flash', role: 'Assistant conversationnel' }],
|
||||
},
|
||||
urls: {
|
||||
recette: 'https://contacts.recette.santinova-soft.org',
|
||||
prod: 'https://contacts.santinova-soft.org',
|
||||
@@ -40,21 +43,46 @@ try {
|
||||
},
|
||||
});
|
||||
|
||||
writeManifest(sandbox, 'falc', {
|
||||
id: 'falc-generator',
|
||||
name: 'FALC Generator',
|
||||
category: 'ITINOVA',
|
||||
urls: { recette: 'https://falc.recette.santinova-soft.org' },
|
||||
});
|
||||
|
||||
writeManifest(sandbox, 'invalide', {
|
||||
id: 'app-invalide',
|
||||
name: 'Application invalide',
|
||||
category: 'INCONNUE',
|
||||
urls: { recette: 'https://invalide.recette.santinova-soft.org' },
|
||||
});
|
||||
writeManifest(sandbox, 'ia-invalide', {
|
||||
id: 'app-ia-invalide',
|
||||
name: 'Application IA invalide',
|
||||
category: 'ITINOVA',
|
||||
ai: { engines: [{ provider: 'Google Gemini' }] },
|
||||
urls: { recette: 'https://ia-invalide.recette.santinova-soft.org' },
|
||||
});
|
||||
|
||||
const discovery = discoverApps({ appsBasePath: sandbox, environment: 'recette' });
|
||||
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');
|
||||
assert.equal(discovery.apps.length, 3, 'un manifeste invalide doit être exclu');
|
||||
assert.equal(discovery.errors.length, 2, 'une erreur explicite doit être retournée pour chaque manifeste invalide');
|
||||
|
||||
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');
|
||||
assert.deepEqual(app.ai, {
|
||||
engines: [{ provider: 'Google Gemini', model: 'gemini-2.5-flash', role: 'Assistant conversationnel' }],
|
||||
}, 'la métadonnée IA descriptive doit être conservée');
|
||||
|
||||
const falc = discovery.apps.find((candidate) => candidate.id === 'falc-generator');
|
||||
assert.deepEqual(falc.ai, {
|
||||
engines: [
|
||||
{ provider: 'Manus Forge', model: 'gemini-2.5-flash', role: 'Transformation FALC' },
|
||||
{ provider: 'Google Gemini', model: 'gemini-3.1-pro-preview', role: 'Récits de vie' },
|
||||
],
|
||||
}, 'le catalogue IA doit compléter un manifeste historique sans moteur déclaré');
|
||||
|
||||
const dashboardRecette = discovery.apps.find((candidate) => candidate.id === 'manus-dashboard');
|
||||
assert.equal(dashboardRecette.name, 'Dashboard Recette');
|
||||
@@ -68,7 +96,7 @@ try {
|
||||
apps: [{ id: 'itinova-contacts', name: 'ancienne valeur statique' }],
|
||||
};
|
||||
const refresh = refreshApps(config);
|
||||
assert.equal(refresh.apps.length, 2, 'les applications non déployées ne doivent pas rester en cache');
|
||||
assert.equal(refresh.apps.length, 3, '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',
|
||||
|
||||
Reference in New Issue
Block a user