4NK_IA_front/tests/collectors.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

236 lines
7.5 KiB
JavaScript

/**
* Tests des collecteurs de données externes
*/
const { describe, it, expect, beforeEach, afterEach } = require('vitest')
const { searchBodaccGelAvoirs } = require('../backend/collectors/bodaccCollector')
const { searchCompanyInfo } = require('../backend/collectors/inforgreffeCollector')
const { searchRBEBeneficiaires } = require('../backend/collectors/rbeCollector')
const { searchGeofoncierInfo } = require('../backend/collectors/geofoncierCollector')
const { collectAddressData } = require('../backend/collectors/addressCollector')
describe('Collecteurs de données externes', () => {
beforeEach(() => {
// Mock des timeouts pour les tests
vi.useFakeTimers()
})
afterEach(() => {
vi.useRealTimers()
})
describe('Bodacc Collector', () => {
it('devrait rechercher des informations de gel des avoirs', async () => {
const result = await searchBodaccGelAvoirs('DUPONT', 'Jean')
expect(result).toHaveProperty('success')
expect(result).toHaveProperty('duration')
expect(result).toHaveProperty('nom', 'DUPONT')
expect(result).toHaveProperty('prenom', 'Jean')
expect(result).toHaveProperty('timestamp')
if (result.success) {
expect(result).toHaveProperty('results')
expect(Array.isArray(result.results)).toBe(true)
}
})
it('devrait gérer les erreurs de recherche', async () => {
// Test avec un nom invalide
const result = await searchBodaccGelAvoirs('', '')
expect(result).toHaveProperty('success', false)
expect(result).toHaveProperty('error')
})
})
describe('Inforgreffe Collector', () => {
it('devrait rechercher des informations d\'entreprise', async () => {
const result = await searchCompanyInfo('MICROSOFT FRANCE')
expect(result).toHaveProperty('success')
expect(result).toHaveProperty('duration')
expect(result).toHaveProperty('company')
expect(result).toHaveProperty('sources')
expect(result).toHaveProperty('timestamp')
if (result.success) {
expect(result.company).toHaveProperty('name')
expect(result.sources).toHaveProperty('societeCom')
}
})
it('devrait gérer les entreprises inexistantes', async () => {
const result = await searchCompanyInfo('ENTREPRISE_INEXISTANTE_12345')
expect(result).toHaveProperty('success')
// Peut être true avec des données vides ou false selon l'implémentation
})
})
describe('RBE Collector', () => {
it('devrait rechercher les bénéficiaires effectifs', async () => {
const result = await searchRBEBeneficiaires('123456789')
expect(result).toHaveProperty('success')
expect(result).toHaveProperty('duration')
expect(result).toHaveProperty('siren', '123456789')
expect(result).toHaveProperty('beneficiaires')
expect(result).toHaveProperty('timestamp')
if (result.success) {
expect(Array.isArray(result.beneficiaires)).toBe(true)
}
})
it('devrait valider le format du SIREN', async () => {
const result = await searchRBEBeneficiaires('123')
expect(result).toHaveProperty('success', false)
expect(result).toHaveProperty('error')
expect(result.error).toContain('SIREN invalide')
})
})
describe('GéoFoncier Collector', () => {
it('devrait rechercher des informations foncières', async () => {
const address = {
street: '1 rue de la Paix',
city: 'Paris',
postalCode: '75001',
country: 'France'
}
const result = await searchGeofoncierInfo(address)
expect(result).toHaveProperty('success')
expect(result).toHaveProperty('duration')
expect(result).toHaveProperty('address')
expect(result).toHaveProperty('timestamp')
if (result.success) {
expect(result).toHaveProperty('geocode')
expect(result).toHaveProperty('parcelles')
expect(result).toHaveProperty('infoFonciere')
expect(result).toHaveProperty('mutations')
}
})
it('devrait gérer les adresses invalides', async () => {
const address = {
street: '',
city: '',
postalCode: '',
country: ''
}
const result = await searchGeofoncierInfo(address)
expect(result).toHaveProperty('success')
// Peut être false si géocodage échoue
})
})
describe('Address Collector', () => {
it('devrait géocoder une adresse via BAN', async () => {
const address = {
street: '1 rue de la Paix',
city: 'Paris',
postalCode: '75001',
country: 'France'
}
const result = await collectAddressData(address)
expect(result).toHaveProperty('success')
expect(result).toHaveProperty('geocode')
expect(result).toHaveProperty('risks')
expect(result).toHaveProperty('cadastre')
expect(result).toHaveProperty('timestamp')
expect(result).toHaveProperty('sources')
if (result.success) {
expect(result.geocode).toHaveProperty('success')
expect(Array.isArray(result.risks)).toBe(true)
expect(Array.isArray(result.cadastre)).toBe(true)
expect(result.sources).toContain('ban')
expect(result.sources).toContain('georisque')
expect(result.sources).toContain('cadastre')
}
})
it('devrait gérer les adresses non trouvées', async () => {
const address = {
street: 'Adresse Inexistante 99999',
city: 'Ville Inexistante',
postalCode: '99999',
country: 'France'
}
const result = await collectAddressData(address)
expect(result).toHaveProperty('success')
// Peut être false si géocodage échoue
})
})
describe('Performance des collecteurs', () => {
it('devrait respecter les timeouts', async () => {
const startTime = Date.now()
// Test avec un nom qui pourrait prendre du temps
const result = await searchBodaccGelAvoirs('SMITH', 'John')
const duration = Date.now() - startTime
expect(duration).toBeLessThan(15000) // 15 secondes max
expect(result).toHaveProperty('duration')
expect(result.duration).toBeLessThan(15000)
})
it('devrait gérer les erreurs de réseau', async () => {
// Mock d'une erreur de réseau
const originalFetch = global.fetch
global.fetch = vi.fn().mockRejectedValue(new Error('Network error'))
try {
const result = await searchCompanyInfo('TEST COMPANY')
expect(result).toHaveProperty('success', false)
expect(result).toHaveProperty('error')
} finally {
global.fetch = originalFetch
}
})
})
describe('Validation des données', () => {
it('devrait valider les formats de réponse', async () => {
const result = await searchBodaccGelAvoirs('DUPONT', 'Jean')
// Vérification de la structure de base
expect(typeof result.success).toBe('boolean')
expect(typeof result.duration).toBe('number')
expect(result.duration).toBeGreaterThan(0)
expect(typeof result.timestamp).toBe('string')
// Vérification du format de timestamp
expect(() => new Date(result.timestamp)).not.toThrow()
})
it('devrait inclure les métadonnées de source', async () => {
const result = await collectAddressData({
street: '1 rue de la Paix',
city: 'Paris',
postalCode: '75001',
country: 'France'
})
if (result.success) {
expect(result).toHaveProperty('sources')
expect(Array.isArray(result.sources)).toBe(true)
expect(result.sources.length).toBeGreaterThan(0)
}
})
})
})