90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from mobilede_scraper.mobile_de.mapper import MobileDeMapper
|
|
from mobilede_scraper.mobile_de.models import MobileDeListing
|
|
|
|
|
|
class TestMobileDeMapper(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.mapper = MobileDeMapper()
|
|
|
|
def test_deduplicates_images(self) -> None:
|
|
urls = [
|
|
"https://img.classistatic.de/api/v1/mo-prod/images/1",
|
|
"https://img.classistatic.de/api/v1/mo-prod/images/1",
|
|
"//img.classistatic.de/api/v1/mo-prod/images/2",
|
|
]
|
|
|
|
record = self.mapper.listing_to_car_record(
|
|
MobileDeListing(
|
|
id="123",
|
|
url="https://suchen.mobile.de/fahrzeuge/details.html?id=123",
|
|
title="Honda Civic",
|
|
raw={"images": urls},
|
|
)
|
|
)
|
|
|
|
self.assertEqual(len(record.images), 2)
|
|
self.assertEqual(record.images[0].fullres_image, urls[0])
|
|
self.assertEqual(record.images[1].fullres_image, "https://img.classistatic.de/api/v1/mo-prod/images/2")
|
|
|
|
def test_origin_id_uses_canonical_prefix(self) -> None:
|
|
record = self.mapper.listing_to_car_record(
|
|
MobileDeListing(
|
|
id="456",
|
|
url="https://suchen.mobile.de/fahrzeuge/details.html?id=456",
|
|
title="Ford Focus",
|
|
)
|
|
)
|
|
|
|
self.assertEqual(record.origin_id, "mobile.de:456")
|
|
self.assertEqual(record.origin, "MOBILE_DE")
|
|
|
|
def test_unknown_empty_values_and_normalization(self) -> None:
|
|
record = self.mapper.listing_to_car_record(
|
|
MobileDeListing(
|
|
id="999",
|
|
url="https://suchen.mobile.de/fahrzeuge/details.html?id=999",
|
|
title="",
|
|
subtitle="",
|
|
raw={"make": {"localized": " "}, "model": {"localized": ""}, "attr": {"tr": "unknown"}},
|
|
)
|
|
)
|
|
self.assertEqual(record.brand, "UNKNOWN")
|
|
self.assertEqual(record.model, "UNKNOWN")
|
|
self.assertIsNone(record.drive)
|
|
self.assertIsNone(record.gearbox)
|
|
|
|
# Нормализация регистра и пробелов.
|
|
record2 = self.mapper.listing_to_car_record(
|
|
MobileDeListing(
|
|
id="888",
|
|
url="https://suchen.mobile.de/fahrzeuge/details.html?id=888",
|
|
title="Honda Civic",
|
|
transmission=" Automatik ",
|
|
)
|
|
)
|
|
self.assertEqual(record2.gearbox, "AT")
|
|
|
|
def test_price_and_currency_parsing(self) -> None:
|
|
record = self.mapper.listing_to_car_record(
|
|
MobileDeListing(
|
|
id="777",
|
|
url="https://suchen.mobile.de/fahrzeuge/details.html?id=777",
|
|
title="Toyota Corolla",
|
|
price="€ 5.200",
|
|
first_registration="05/2019",
|
|
mileage="50.100 km",
|
|
)
|
|
)
|
|
self.assertEqual(record.price, 5200)
|
|
self.assertEqual(record.currency, "EUR")
|
|
self.assertEqual(record.year, 2019)
|
|
self.assertEqual(record.mileage, 50100)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|