4NK_IA_front/tests/e2e.test.js
4NK IA aad52027c1 ci: docker_tag=dev-test
- Alignement backend: seules 4 entités retournées (persons, companies, addresses, contractual)
- Version API mise à jour à 1.0.1 dans /api/health
- Interface onglets d entités: Personnes, Adresses, Entreprises, Contractuel
- Correction erreurs TypeScript pour build stricte
- Tests et documentation mis à jour
- CHANGELOG.md mis à jour avec version 1.1.1
2025-09-18 20:07:08 +00:00

105 lines
3.4 KiB
JavaScript

/**
* Tests end-to-end du pipeline complet
*/
const { describe, it, expect, beforeAll, afterAll } = require('vitest')
const request = require('supertest')
const app = require('../backend/server')
const fs = require('fs')
const path = require('path')
describe('Pipeline E2E', () => {
let testFolderHash
let testFileHash
beforeAll(async () => {
// Créer un dossier de test
testFolderHash = 'test-e2e-' + Date.now()
})
afterAll(async () => {
// Nettoyer les fichiers de test
if (testFolderHash) {
const cachePath = path.join('cache', testFolderHash)
if (fs.existsSync(cachePath)) {
fs.rmSync(cachePath, { recursive: true, force: true })
}
}
})
describe('Pipeline complet', () => {
it('devrait traiter un document de bout en bout', async () => {
// 1. Upload d'un document
const uploadResponse = await request(app)
.post('/api/extract')
.attach('document', 'tests/fixtures/sample-cni.jpg')
.field('folderHash', testFolderHash)
.expect(200)
expect(uploadResponse.body).toHaveProperty('success', true)
testFileHash = uploadResponse.body.fileHash
// 2. Vérifier l'extraction
expect(uploadResponse.body).toHaveProperty('extraction')
expect(uploadResponse.body.extraction).toHaveProperty('entities')
expect(uploadResponse.body.extraction.entities).toHaveProperty('persons')
// 3. Attendre le traitement
await new Promise(resolve => setTimeout(resolve, 5000))
// 4. Vérifier les résultats du dossier
const resultsResponse = await request(app)
.get(`/api/folders/${testFolderHash}/results`)
.expect(200)
expect(resultsResponse.body).toHaveProperty('documents')
expect(resultsResponse.body.documents.length).toBeGreaterThan(0)
// 5. Tester l'enrichissement
const enrichResponse = await request(app)
.post(`/api/folders/${testFolderHash}/files/${testFileHash}/enrich/person`)
.expect(200)
expect(enrichResponse.body).toHaveProperty('success', true)
// 6. Vérifier le statut d'enrichissement
await new Promise(resolve => setTimeout(resolve, 3000))
const statusResponse = await request(app)
.get(`/api/folders/${testFolderHash}/files/${testFileHash}/enrich/person/status`)
.expect(200)
expect(statusResponse.body).toHaveProperty('state')
expect(['running', 'done', 'error']).toContain(statusResponse.body.state)
})
it('devrait gérer les erreurs de traitement', async () => {
// Test avec un fichier corrompu
const response = await request(app)
.post('/api/extract')
.attach('document', 'tests/fixtures/corrupted-file.jpg')
.field('folderHash', testFolderHash)
// Peut retourner 200 avec un traitement partiel ou 400 avec une erreur
expect([200, 400]).toContain(response.status)
})
})
describe('Performance', () => {
it('devrait traiter les documents dans un délai raisonnable', async () => {
const startTime = Date.now()
const response = await request(app)
.post('/api/extract')
.attach('document', 'tests/fixtures/sample-document.pdf')
.field('folderHash', testFolderHash)
.expect(200)
const duration = Date.now() - startTime
expect(duration).toBeLessThan(30000) // 30 secondes max
expect(response.body).toHaveProperty('success', true)
})
})
})