"""Tests für ripping.py: Fortschritts-Parsing, Kommando-Bau, Disc-Erkennung. Deckt genau die Stellen ab, an denen im Review 22.07. erfundene Schnittstellen gefunden wurden (abcde-Flags, Celery-API) — damit so etwas nie wieder still liegt. """ import os import ripping from ripping import ( build_abcde_cmd, build_handbrake_cmd, detect_disc_type, get_progress_from_line, write_abcde_config, ) def test_progress_parsing(): assert get_progress_from_line("Encoding: task 1 of 1, 45.50 %") == 45 assert get_progress_from_line("Encoding: task 1 of 1, 100.00 %") == 100 assert get_progress_from_line("kein Fortschritt hier") == 0 def test_abcde_cmd_hat_genau_ein_ausgabeformat(): """Review-Fund 22.07.: '-o' stand doppelt (Format UND Verzeichnis) — abcde parste das Verzeichnis als Format, CD-Ripping war nie funktionsfähig.""" cmd = build_abcde_cmd("/dev/sr0", "/tmp/test.abcde.conf") assert cmd.count("-o") == 1 assert cmd[cmd.index("-o") + 1] == "flac" assert "-c" in cmd assert cmd[cmd.index("-c") + 1] == "/tmp/test.abcde.conf" assert "-N" in cmd # nicht-interaktiv, sonst hängt der Worker def test_abcde_config_enthaelt_zielverzeichnis(): pfad = write_abcde_config("/output/cd/test123") try: with open(pfad, encoding="utf-8") as f: inhalt = f.read() assert "OUTPUTDIR='/output/cd/test123'" in inhalt assert "INTERACTIVE=n" in inhalt finally: os.unlink(pfad) def test_handbrake_cmd_vollstaendig(): cmd = build_handbrake_cmd("/dev/sr0", "/output/dvd/x/film.mkv") assert cmd[0] == "HandBrakeCLI" assert cmd[cmd.index("--input") + 1] == "/dev/sr0" assert cmd[cmd.index("--output") + 1] == "/output/dvd/x/film.mkv" assert "--preset" in cmd class _FakeResult: def __init__(self, stdout): self.stdout = stdout def test_disc_typ_erkennung(monkeypatch): faelle = [ ("UDF filesystem data 'MEIN_FILM' DVD Video", "dvd"), ("data, BDMV bluray structure", "bluray"), ("Audio CD, cda tracks", "cd"), ("irgendwas anderes", "unknown"), ] for ausgabe, erwartet in faelle: monkeypatch.setattr( ripping.subprocess, "run", lambda *a, _out=ausgabe, **k: _FakeResult(_out) ) assert detect_disc_type("/dev/sr0") == erwartet def test_disc_typ_erkennung_fehler_gibt_unknown(monkeypatch): def kaputt(*a, **k): raise OSError("kein Geraet") monkeypatch.setattr(ripping.subprocess, "run", kaputt) assert detect_disc_type("/dev/sr0") == "unknown"