oem_crawler/tests/test_bmw_parser.py
2026-11-07 16:53:30 +01:00

74 lines
2.9 KiB
Python

"""
Unit tests for BMW Parser and Registry.
"""
from decimal import Decimal
import unittest
from oem_crawler.crawlers import CrawlerRegistry
from oem_crawler.crawlers.bmw.crawler import BMWStockCrawler
from oem_crawler.crawlers.bmw.parser import parse_bmw_vehicle
class TestBMWParserAndRegistry(unittest.TestCase):
def test_registry_contains_bmw(self):
supported = CrawlerRegistry.supported_brands()
self.assertIn("bmw", supported)
cls = CrawlerRegistry.get("bmw")
self.assertEqual(cls, BMWStockCrawler)
def test_bmw_vehicle_parsing(self):
raw_bmw = {
"documentId": "2454561-61134216",
"vin": "WBA11111111111111",
"vehicleSpecification": {
"modelAndOption": {
"brand": "BMW",
"baseFuelType": "GASOLINE",
"is48Volt": True,
"transmission": "AUTOMATIC",
"marketingDriveType": "SDRIVE",
"model": {"modelName": "120"},
"modelRange": {"description": {"de_DE": "BMW 1er"}},
"color": {"name": {"de_DE": "Schwarz Uni"}, "code": "668"},
"equipments": {
"S05DM": {
"name": {"de_DE": "Parking Assistant"},
"marketingText": {"category": {"de_DE": "Fahrerassistenz"}},
"standard": True
}
}
},
"technicalAndEmission": {
"technicalData": {
"power": {"value": 115},
"powerInHp": {"value": 156}
}
}
},
"pricing": {
"price": {"value": 30960.00},
"monthlyInstallment": {"value": 199.00}
},
"ordering": {
"retailData": {
"locationOutletName": "BMW Autohaus Test",
"locationOutletAddress": {"town": "München", "postalCode": "80809", "countryCode": "DE"}
}
}
}
parsed = parse_bmw_vehicle(raw_bmw, market_country="DE")
self.assertEqual(parsed.brand, "BMW")
self.assertEqual(parsed.oem_vehicle_id, "2454561-61134216")
self.assertEqual(parsed.series, "BMW 1er")
self.assertEqual(parsed.model_name, "120")
self.assertEqual(parsed.fuel_type.value, "mhev")
self.assertEqual(parsed.drivetrain.value, "fwd")
self.assertEqual(parsed.power_kw, 115)
self.assertEqual(parsed.power_hp, 156)
self.assertEqual(parsed.price_gross, Decimal("30960.00"))
self.assertEqual(parsed.monthly_rate, Decimal("199.00"))
self.assertEqual(len(parsed.options), 1)
self.assertEqual(parsed.options[0].option_code, "S05DM")
self.assertTrue(parsed.options[0].is_standard)