- 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
236 lines
7.5 KiB
JavaScript
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)
|
|
}
|
|
})
|
|
})
|
|
})
|