| Test |
Duration |
Result |
| blank markdown with extractor error classifies as EXTRACTOR_DOWN() |
0s |
passed |
| bot blocked still requires a real block signal() |
0s |
passed |
| bot_block takes precedence over incomplete data() |
0s |
passed |
| captcha marker classifies as BOT_BLOCKED() |
0s |
passed |
| classification is case-insensitive on markers() |
0.001s |
passed |
| datadome marker in markdown classifies as BOT_BLOCKED with neutral message() |
0s |
passed |
| datadome marker in markdown classifies as BOT_BLOCKED() |
0s |
passed |
| expired marker in markdown classifies as LISTING_EXPIRED() |
0s |
passed |
| extractor error without upstream HTTP status stays EXTRACTOR_DOWN() |
0s |
passed |
| http 403 classifies as BOT_BLOCKED() |
0s |
passed |
| http 404 classifies as LISTING_EXPIRED() |
0s |
passed |
| http 429 classifies as BOT_BLOCKED() |
0s |
passed |
| invariant - no business field never yields INCOMPLETE_DATA() |
0s |
passed |
| markdown present and complete data falls through to UNKNOWN() |
0s |
passed |
| markdown present but prix missing classifies as INCOMPLETE_DATA() |
0s |
passed |
| markdown present but surface missing classifies as INCOMPLETE_DATA() |
0s |
passed |
| non-seloger listing with a price but no surface stays INCOMPLETE_DATA() |
0s |
passed |
| null markdown with extractor error classifies as EXTRACTOR_DOWN() |
0s |
passed |
| observed production case - HTTP 200 with 0-byte body is attributed to the extractor() |
0s |
passed |
| search result page classifies as NON_LISTING_PAGE() |
0s |
passed |
| seloger shell without any business field is an EXTRACTION failure() |
0s |
passed |
| seloger url without markdown but with extractor error returns EXTRACTOR_DOWN() |
0.002s |
passed |
| selogerneuf url with missing surface stays INCOMPLETE_DATA() |
0s |
passed |
| unknown antibot host with empty body is NOT bot blocked() |
0s |
passed |
| upstream HTTP 403 inside extractor error classifies as BOT_BLOCKED() |
0.001s |
passed |
| upstream HTTP 404 inside extractor error classifies as LISTING_EXPIRED() |
0s |
passed |
| user message stays short enough to display in UI() |
0.002s |
passed |