Skip to content

Tests

Environnement de test local (Docker)

Pour tester l'addin sans accès au staging Heriade, un environnement Docker complet est disponible. Il simule deux espaces de données (RH, Finance) avec un user de test.

Ce qui est déjà en place (ne pas recréer)

FichierRôle
docker-compose.ymlContainers locaux : addin-db (5433), data-db (5435)
sql/test/data-db/01_init.sqlTables rh_employes + finance_transactions
sql/test/data-db/02_seed.sql15 employés fictifs + 15 transactions budgétaires
back/.env.testVariables d'env pointant vers les containers locaux
back/scripts/test-setup.mjsGénère le token SSO de test + insère les external_databases dans addin-db

Lancer l'environnement de test

bash
# 1. Démarrer les containers (une seule fois, les données persistent)
docker compose up -d

# 2. Générer le token SSO + seeder les espaces dans addin-db
cd back
node --env-file=.env.test scripts/test-setup.mjs
# → Copier le token affiché (chaîne eyJ...)

# 3. Backend en mode test (pointe vers les BDD Docker locales, pas staging)
node --env-file=.env.test node_modules/.bin/nest start --watch

Tester

Via curl :

bash
curl -H "Authorization: Bearer TON_TOKEN" http://localhost:3000/data-pivot/databases

Via Swagger : http://localhost:3000/api/docs → "Authorize" → coller le token.

Via l'addin : lancer yarn start dans addin/, l'addin pointe déjà vers localhost:3000 en dev.

Reset complet des données

bash
docker compose down -v    # Supprime les volumes (données perdues)
docker compose up -d
cd back && node --env-file=.env.test scripts/test-setup.mjs

Compte de test

ChampValeur
Email[email protected]
UUIDaaaaaaaa-bbbb-cccc-dddd-000000000001
EnterpriseHeriade Demo (id=1)
RoleUtilisateur (id=3)
Services autorisésRH, Finance
Espaces disponiblesEspace RH (rh_employes), Espace Finance (finance_transactions)

Le token généré est valide 1 an. Il est signé avec APP_ACCESS_TOKEN_SECRET défini dans back/.env.test.


Tests unitaires frontend

bash
cd addin
yarn test              # Tous les tests
yarn test --watch      # Mode watch
yarn test <pattern>    # Filtrer par nom de fichier

Structure actuelle des tests :

addin/__tests__/
├── shared/
│   ├── dataCache.test.ts
│   ├── errorUtils.test.ts
│   └── separator.test.ts
├── services/
│   ├── dynamicPivotManager.test.ts
│   ├── excelWriter.test.ts
│   └── pivotEngine.test.ts
└── composables/
    ├── useAutoSave.test.ts
    └── usePresets.test.ts

Mocker Office.js

Excel est un global runtime absent dans jsdom. Le mocker en haut du fichier test :

typescript
(globalThis as any).Excel = {
  run: jest.fn(async (callback: (context: any) => Promise<unknown>) => {
    return callback({ workbook: mockWorkbook, sync: mockSync });
  }),
  HorizontalAlignment: { left: "Left", center: "Center" },
};

Pattern withSetup (composables avec lifecycle)

typescript
import { createApp, defineComponent } from "vue";

function withSetup<T>(composableFn: () => T): T {
  let result!: T;
  const app = createApp(
    defineComponent({
      setup() {
        result = composableFn();
        return () => null;
      },
    })
  );
  app.mount(document.createElement("div"));
  app.unmount();
  return result;
}

Attendre que onMounted se résolve avec deux await Promise.resolve() après l'appel.

Points d'attention

  • Les alias @/* (tsconfig) ne sont pas résolus dans Jest — utiliser les chemins relatifs.
  • CSS importé dans les composants Vue est mocké via moduleNameMapperstyleMock.js.
  • ts-loader en transpileOnly: true → lancer yarn lint && yarn test pour voir les erreurs de types.