ListingExtractionApplierTest
Tests
| Test |
Method name |
Duration |
Result |
| Source DESCRIPTION (regex faible) n'écrase PAS un prix/surface LLM (seule STRUCTURED prime) |
description layer never overrides critical llm value() |
0s |
passed |
| Extraction vide → base inchangée (no-op) |
empty extraction is noop() |
0s |
passed |
| Comble les champs null depuis l'extraction déterministe (dont nbLotsCopro → nombreLots) |
fills nulls() |
0.001s |
passed |
| Anti middle-man : ne fait JAMAIS passer un champ existant à null (monotone) |
never nulls existing fields() |
0s |
passed |
| N'ÉCRASE JAMAIS une valeur déjà posée (le LLM/structuré gagne) |
never overwrites() |
0s |
passed |
| Anti-régression : portail sans blob structuré → valeur LLM survit intacte |
no structured source keeps llm value() |
0s |
passed |
| STRUCTURED identique au LLM → no-op (pas d'override inutile) |
structured equal to llm is noop() |
0.001s |
passed |
| STRUCTURED comble aussi un critique null (gap-fill classique) |
structured fills null critical() |
0s |
passed |
| BUG SeLoger : prix/surface LLM faux + __NEXT_DATA__ vrai → le vrai (structuré) gagne |
structured overrides wrong llm price and surface() |
0s |
passed |
| Monotone : structuré non parsable NE nulle PAS un prix LLM existant |
structured unparsable never nulls existing critical() |
0s |
passed |
| Valeur non parsable → ignorée, champ reste null (jamais d'exception ni de fausse valeur) |
unparsable value ignored() |
0s |
passed |
Standard output
22:38:07.528 [Test worker] INFO com.alertimmo.aiscraping.extraction.structured.ListingExtractionApplier -- [listing-apply] 5 champ(s) comblé(s) (gap-filler, zéro écrasement): [dpe←DESCRIPTION, etage←DESCRIPTION, anneeConstruction←DESCRIPTION, nbLotsCopro←DESCRIPTION, nbChambres←DESCRIPTION]
22:38:07.531 [Test worker] WARN com.alertimmo.aiscraping.extraction.structured.ListingExtractionApplier -- [listing-apply] 2 champ(s) critique(s) CORRIGÉ(S) par source structurée fiable (LLM→__NEXT_DATA__/JSON-LD): [prix: 195000→169000 (STRUCTURED/HIGH), surface: 78→61 (STRUCTURED/HIGH)]
22:38:07.531 [Test worker] INFO com.alertimmo.aiscraping.extraction.structured.ListingExtractionApplier -- [listing-apply] 2 champ(s) comblé(s) (gap-filler, zéro écrasement): [prix←STRUCTURED, surface←STRUCTURED]