Update model translations

This commit is contained in:
qananasikq
2026-07-01 14:42:35 +03:00
parent 1c5c30e31e
commit efbbf4a067
7 changed files with 805 additions and 2 deletions

View File

@@ -27,7 +27,8 @@ class TestEncarMapper(unittest.TestCase):
self.assertEqual(record.origin_id, "encar:41421262")
self.assertEqual(record.parser_id, "encar:41421262")
self.assertEqual(record.brand, "Hyundai")
self.assertEqual(record.model, "G90 (RS4)")
# Скобки удаляются — на оригинальном сайте Encar их нет.
self.assertEqual(record.model, "G90")
self.assertEqual(record.year, 2023)
self.assertEqual(record.price, 85900000) # 8590 만원 × 10000
self.assertEqual(record.mileage, 37923)
@@ -83,10 +84,52 @@ class TestEncarMapper(unittest.TestCase):
self.assertEqual(record.parser_id, "encar:41878507")
self.assertIn("carid=41878507", record.origin_url)
def test_translate_model_keeps_english_text(self):
mapper = EncarMapper()
self.assertEqual(mapper._translate_model("All New Carnival"), "All New Carnival")
self.assertEqual(mapper._translate_model("New Kia Ray"), "New Kia Ray")
self.assertEqual(mapper._translate_model("K5 Hybrid 3rd gen"), "K5 Hybrid 3rd gen")
def test_translate_model_handles_korean_fragments(self):
mapper = EncarMapper()
cases = {
# Скобки и их содержимое отбрасываются как на сайте Encar.
"5시리즈 (G30)": "5 Series",
"S-클래스 W223": "S-Class W223",
"Sonata 디 엣지(DN8)": "Sonata The Edge",
"렉스턴 Sport 칸": "Rexton Sport Khan",
"티볼리 Air": "Tivoli Air",
"코란도 투리스모": "Korando Turismo",
"Kia Carnival 4세대": "Kia Carnival 4th gen",
"Cadillac 에스컬레이드 5세대": "Cadillac Escalade 5th gen",
"K7 프리미어": "K7 Premier",
}
for raw, expected in cases.items():
with self.subTest(raw=raw):
self.assertEqual(mapper._translate_model(raw), expected)
def test_translate_model_drops_untranslated_korean(self):
mapper = EncarMapper()
cases = {
# "레이" (Ray) не должен резать слово "슈팅브레이크" изнутри.
"슈팅브레이크": "",
"The New G70 슈팅브레이크": "The New G70",
"G70 (슈팅브레이크)": "G70",
}
for raw, expected in cases.items():
with self.subTest(raw=raw):
self.assertEqual(mapper._translate_model(raw), expected)
class TestEncarScraper(unittest.TestCase):
def test_collect_listing_limits_results(self):
scraper = EncarScraper()
scraper._fetch_listing_page = MagicMock(side_effect=[
{"SearchResults": [{"Id": 1}, {"Id": 2}]},
])

View File

@@ -195,11 +195,14 @@ class TestAPILoad(unittest.TestCase):
persistence: PersistenceService = app.state.persistence
persistence.upsert_cars_batch([_make_car(i, images=4) for i in range(200)])
cls.app = app
cls.client = TestClient(app)
@classmethod
def tearDownClass(cls):
import os
cls.client.close()
cls.app.state.persistence.engine.dispose()
if os.path.exists("test_api_load.db"):
os.remove("test_api_load.db")