from __future__ import annotations import unittest from iaai_scraper.parsing.parser import VehicleParser class TestVehicleParserUnit(unittest.TestCase): def setUp(self) -> None: self.parser = VehicleParser() def test_parse_dom_key_value_pairs_extracts_known_fields(self) -> None: dom_text = """ Stock #: 45089484 VIN (Status): 1HGCM82633A123456 (OK) Primary Damage: Front End """ result = self.parser._parse_dom_key_value_pairs(dom_text) self.assertEqual(result.get("lot_number"), "45089484") self.assertEqual(result.get("vin"), "1HGCM82633A123456 (OK)") self.assertEqual(result.get("primary_damage"), "Front End") def test_parse_title_for_year_make_model(self) -> None: parsed = self.parser._parse_title_for_year_make_model("2014 TOYOTA CAMRY for sale", "") self.assertEqual(parsed["year"], "2014") self.assertEqual(parsed["make"], "TOYOTA") self.assertEqual(parsed["model"], "CAMRY") def test_extract_image_urls_filters_other_vehicle(self) -> None: vehicle_url = "https://www.iaai.com/VehicleDetail/45089484~US" payloads = [ { "imageUrls": [ "https://vis.iaai.com/resizer?imageKeys=45089484~SID1&width=845&height=633", "https://vis.iaai.com/resizer?imageKeys=99999999~SID2&width=845&height=633", ] } ] urls = self.parser._extract_image_urls(payloads, "", vehicle_url) self.assertEqual(len(urls), 1) self.assertIn("45089484", urls[0]) def test_extract_image_urls_deduplicates_same_url(self) -> None: vehicle_url = "https://www.iaai.com/VehicleDetail/45089484~US" payloads = [{"imageUrls": [ "https://vis.iaai.com/resizer?imageKeys=45089484~SID1&width=845&height=633", "https://vis.iaai.com/resizer?imageKeys=45089484~SID1&width=845&height=633", ]}] urls = self.parser._extract_image_urls(payloads, "", vehicle_url) self.assertEqual(len(urls), 1) def test_dom_hints_detect_captcha_and_antibot(self) -> None: hints = self.parser._dom_hints("Please verify you are human. CAPTCHA. Incapsula access denied.") self.assertTrue(hints["has_captcha_text"]) self.assertTrue(hints["has_antibot_text"]) def test_access_notes_reflect_antibot_signals(self) -> None: summary = {"vin": "", "image_urls": [], "note": "Incapsula access denied. Verify you are human."} notes = self.parser._build_access_notes(summary, []) self.assertTrue(notes["possible_captcha"]) self.assertTrue(notes["possible_antibot"]) if __name__ == "__main__": unittest.main()