55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
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()
|