diff --git a/.gitignore b/.gitignore index fbc77b6..b12db01 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ node_modules/ dist/ build/ .DS_Store +# Sauvegardes locales : les versions de référence restent dans Git. +*.bak +*.bak-* +*.tmp diff --git a/app.json b/app.json new file mode 100644 index 0000000..6a7a2c4 --- /dev/null +++ b/app.json @@ -0,0 +1,10 @@ +{ + "id": "portail-santinova", + "name": "Portail Applicatif", + "category": "INFRA", + "urls": {"recette": "https://portail.recette.santinova-soft.org", "prod": "https://portail.santinova-soft.org"}, + "containerName": "portail-santinova", + "image": "images/portail.png", + "giteaRepo": "portail-santinova", + "giteaOwner": "manus-admin" +} diff --git a/images/dashboard.png b/images/dashboard.png new file mode 100644 index 0000000..69b2c6d Binary files /dev/null and b/images/dashboard.png differ diff --git a/images/falc-generator.png b/images/falc-generator.png new file mode 100644 index 0000000..ee112b8 Binary files /dev/null and b/images/falc-generator.png differ diff --git a/images/formation-manager.png b/images/formation-manager.png new file mode 100644 index 0000000..cb56886 Binary files /dev/null and b/images/formation-manager.png differ diff --git a/images/itinova-vehicle-exchange.png b/images/itinova-vehicle-exchange.png new file mode 100644 index 0000000..3e1a778 Binary files /dev/null and b/images/itinova-vehicle-exchange.png differ diff --git a/images/portail.png b/images/portail.png new file mode 100644 index 0000000..98127dc Binary files /dev/null and b/images/portail.png differ diff --git a/index.html b/index.html index a2da238..84b70d6 100644 --- a/index.html +++ b/index.html @@ -322,10 +322,10 @@
Portail Applicatif
-
Environnement de recette
+
Environnement de production
-
Recette
+
Production
@@ -375,111 +375,138 @@ diff --git a/test/portal-contract.test.js b/test/portal-contract.test.js new file mode 100644 index 0000000..2e2e853 --- /dev/null +++ b/test/portal-contract.test.js @@ -0,0 +1,21 @@ +/* + * Contrat de non-régression du portail dynamique. + * Il bloque les marqueurs de conflit, les doublons de configuration + * et le mélange des URLs recette/production. + */ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +const html = fs.readFileSync(path.join(__dirname, '..', 'index.html'), 'utf8'); + +assert.equal(/^(<<<<<<<|=======|>>>>>>>)/m.test(html), false, 'aucun marqueur de conflit Git ne doit être livré'); +assert.equal((html.match(/var DASHBOARD_APPS_URL/g) || []).length, 1, 'une seule URL API applications doit être déclarée'); +assert.equal((html.match(/var DASHBOARD_STATUS_URL/g) || []).length, 1, 'une seule URL API statuts doit être déclarée'); +assert.match(html, /var ENV = 'prod';/, 'la version recette doit déclarer explicitement son environnement'); +assert.match(html, /app\.urls\[ENV\]/, 'les liens doivent être sélectionnés depuis l’environnement déclaré'); +assert.match(html, /app\.category !== 'INFRA'/, 'les tuiles INFRA doivent être filtrées côté portail'); +assert.match(html, /var STATUS_REFRESH_MS = 30000;/, 'le délai de grisage doit être explicite'); +assert.match(html, /setInterval\(fetchAndApplyStatuses, STATUS_REFRESH_MS\)/, 'le grisage doit être réactualisé périodiquement'); + +console.log('OK portal-contract');