0ea5f10b31
Ampel / ampel (push) Failing after 12m31s
- Metadaten-Preview WIEDERHERGESTELLT (Stub ueberschattete echte prescan-Implementierung), tote Altmodule geloescht - Celery update_state statt Phantom-Task/erfundener API - abcde-Kommando korrigiert (CD-Ripping war nie funktionsfaehig) - JWT: fester Schluessel Pflicht, echtes Logout, Cleanup nur Abgelaufene - main.py: crashende Endpoints (Path/secrets/api_keys), year-Bug, Admin-Login aus .env - Ruff gruen (29 Funde), Tests: auth/cache_keys/ripping_helpers, Placebo-test_health raus - SAVEPOINT: offene MakeMKV-Entscheidung SICHTBAR gemacht (Regel B)
80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
"""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"
|