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