Complete stage 0 source research
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
import unittest
|
||||
|
||||
from rf4_research.records import RecordsParseError, parse_records_html, parse_weight_g
|
||||
|
||||
|
||||
FIXTURE = Path(__file__).parent / "fixtures" / "records_ru_sample.html"
|
||||
|
||||
|
||||
class RecordsParserTests(unittest.TestCase):
|
||||
def test_parses_group_header_and_nested_records(self) -> None:
|
||||
records = parse_records_html(
|
||||
FIXTURE.read_text(encoding="utf-8"),
|
||||
region="ru",
|
||||
category="records",
|
||||
source_url="https://rf4game.de/records/region/RU/",
|
||||
today=date(2026, 9, 2),
|
||||
)
|
||||
|
||||
self.assertEqual(len(records), 2)
|
||||
self.assertEqual(records[0].fish, "Hecht")
|
||||
self.assertEqual(records[0].weight_g, 27_902)
|
||||
self.assertEqual(records[0].bait, "Testköder 01")
|
||||
self.assertEqual(records[1].fish, "Hecht")
|
||||
self.assertEqual(records[1].weight_g, 2_519_264)
|
||||
self.assertEqual(records[1].record_date, date(2026, 5, 3))
|
||||
|
||||
def test_rejects_changed_column_contract(self) -> None:
|
||||
html = FIXTURE.read_text(encoding="utf-8").replace(
|
||||
'class="col data"', 'class="col changed"', 1
|
||||
)
|
||||
with self.assertRaisesRegex(RecordsParseError, "records columns changed"):
|
||||
parse_records_html(
|
||||
html,
|
||||
region="RU",
|
||||
category="records",
|
||||
source_url="fixture://changed",
|
||||
)
|
||||
|
||||
def test_weight_units_are_normalized_to_grams(self) -> None:
|
||||
self.assertEqual(parse_weight_g("423 g"), 423)
|
||||
self.assertEqual(parse_weight_g("8.023 kg"), 8_023)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user