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()