from __future__ import annotations import unittest from dubizzle_scraper.parsing.parser import VehicleParser class TestVehicleParserUnit(unittest.TestCase): def setUp(self) -> None: self.parser = VehicleParser() def test_parse_dom_pairs_and_title(self) -> None: dom_text = """ Stock #: 45089484 Primary Damage: Front End Odometer: 50,123 mi (Actual) """ result = self.parser._parse_dom_key_value_pairs(dom_text) self.assertEqual(result.get("lot_number"), "45089484") self.assertEqual(result.get("primary_damage"), "Front End") self.assertEqual(result.get("odometer"), "50,123 mi (Actual)") 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_and_deduplicates(self) -> None: vehicle_url = "https://www.dubizzle.com/VehicleDetail/45089484~US" payloads = [{"imageUrls": [ "https://vis.dubizzle.com/resizer?imageKeys=45089484~SID1&width=845&height=633", "https://vis.dubizzle.com/resizer?imageKeys=45089484~SID1&width=845&height=633", "https://vis.dubizzle.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_dom_hints_and_access_notes_detect_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"]) 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()