"""Tests für die puren Pre-Scan-/OMDb-Helfer (Label-Normalisierung, Parsing).""" from clients.omdb import parse_runtime_minutes, parse_year from prescan.prescan import normalize_disc_label, parse_udf_dstring def test_udf_dstring_latin1(): # d-string: [comp_id=8]["MEIN_FILM"][padding][len=10] daten = bytes([8]) + b"MEIN_FILM" + bytes(21) + bytes([10]) assert parse_udf_dstring(daten) == "MEIN_FILM" def test_udf_dstring_utf16(): text = "FILM".encode("utf-16-be") daten = bytes([16]) + text + bytes(32 - 2 - len(text)) + bytes([1 + len(text)]) assert parse_udf_dstring(daten) == "FILM" def test_udf_dstring_kaputt_gibt_leer(): assert parse_udf_dstring(b"") == "" assert parse_udf_dstring(bytes(32)) == "" # Länge 0 daten = bytes([8]) + b"X" + bytes(29) + bytes([99]) # Länge > Puffer assert parse_udf_dstring(daten) == "" def test_label_normalisierung(): # Disc-Labels sind fast immer GROSS_MIT_UNTERSTRICHEN assert normalize_disc_label("PULP_FICTION") == "Pulp Fiction" assert normalize_disc_label("DIE_HARD_4.0_DE") == "Die Hard 4 0 De" assert normalize_disc_label(" doppel raum ") == "doppel raum" assert normalize_disc_label("") == "" def test_label_mit_gemischter_schreibung_bleibt(): # Wer schon sauber benannt hat, wird nicht plattgewalzt assert normalize_disc_label("Inception") == "Inception" def test_omdb_runtime_parsing(): assert parse_runtime_minutes("142 min") == 142 assert parse_runtime_minutes("N/A") == 0 assert parse_runtime_minutes("") == 0 def test_omdb_jahr_parsing(): assert parse_year("1999") == 1999 assert parse_year("2005–2012") == 2005 # Serien-Zeitspanne assert parse_year("N/A") is None assert parse_year("") is None