74 lines
2.9 KiB
Python
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)
|