fix(test): der Installations-Test hat die ECHTEN Verknuepfungen ueberschrieben
Ampel / ampel (push) Failing after 47s

WAS: `test_installation_legt_die_dateien_an_...` installiert in ein
tmp_path — legt aber seit dem Verknuepfungs-Einbau auch Symbole auf dem
ECHTEN Desktop und im ECHTEN Startmenue an. Die kennen kein tmp_path.

DIE FOLGE, vom Commander gemeldet: Er klickte auf das Desktop-Symbol und
bekam von Windows "Diese App kann auf dem PC nicht ausgefuehrt werden".
Nachgemessen zeigte die Verknuepfung auf

  ...\Temp\pytest-of-TobisPC\pytest-142\test_installation_..._0\installiert\Rippy.exe

— und dort liegt die 2-KB-ATTRAPPE aus dem Test, kein Programm. Windows
hatte voellig recht.

Der `finally`-Block raeumte nur Registry und Autostart auf; die
Verknuepfungen nicht, weil es sie beim Schreiben des Tests noch nicht gab.
Als sie dazukamen, wuchs der Test stillschweigend ueber sein tmp_path
hinaus. Ein Test, der Spuren ausserhalb seines Temp-Ordners hinterlaesst,
ist kein Test, sondern ein Eingriff.

BEHOBEN mit ZWEI Sicherungen statt einer:
  1. verknuepfen=False — die Funktion legt gar keine an.
  2. vk.alle_anlegen ist trotzdem ersetzt. Wer den Schalter spaeter
     umdreht oder die Vorgabe aendert, kann damit trotzdem nichts am
     echten System anrichten.

Dazu ein Waechter: test_installation_ruehrt_die_echten_verknuepfungen_
nicht_an prueft, dass die Anlege-Funktionen bei verknuepfen=False GAR
NICHT gerufen werden. Waere er frueher dagewesen, haette der Commander
keine kaputte Verknuepfung bekommen.

DER RECHNER IST REPARIERT: neu installiert, beide Verknuepfungen zeigen
wieder auf C:\Users\...\AppData\Local\Rippy\Rippy.exe (29 MB, existiert),
Programme+Features-Eintrag ist zurueck. Start ueber die Verknuepfung:
HTTP 200 nach 2 s, Worker TobisNicerPC mit cpu-x264/x265/av1 + vce/vce-av1,
MakeMKV 1.18.4 und HandBrake 1.11.2 gefunden.

Nebenbei ausgeschlossen, bevor die Ursache klar war: Die EXE selbst ist in
Ordnung (gueltiges x64-PE, MZ/PE-Kopf, 29 MB, Hash identisch mit dem
Installat), kein Mark-of-the-Web, kein Defender-Fund, Smart App Control
aus. Der Fehler lag nicht an der Datei, sondern daran, WORAUF gezeigt wurde.

GEMESSEN: ruff sauber, 522 Tests gruen + 15 uebersprungen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-08-28 11:47:11 +02:00
co-authored by Claude Opus 5
parent 99c05865af
commit 069fc46f44
+67 -2
View File
@@ -62,9 +62,41 @@ def test_ordner_ohne_abschliessenden_trenner():
@nur_windows
def test_installation_legt_die_dateien_an_und_meldet_sich_bei_windows(tmp_path, monkeypatch):
"""Der ganze Kreislauf. Der Registry-Schluessel ist der ECHTE — deshalb
wird am Ende immer aufgeraeumt, auch wenn der Test scheitert."""
wird am Ende immer aufgeraeumt, auch wenn der Test scheitert.
## ⚠️ WARUM HIER KEINE VERKNUEPFUNGEN ANGELEGT WERDEN (28.08.2026)
Genau das ist einmal passiert, und es hat den Rechner des Commanders
kaputtgemacht: `installieren()` legt Verknuepfungen auf dem ECHTEN
Desktop und im ECHTEN Startmenue an — die kennen kein `tmp_path`. Der
Test ueberschrieb damit die funktionierende Desktop-Verknuepfung durch
eine, die auf `…\\Temp\\pytest-of-…\\installiert\\Rippy.exe` zeigte. Und
dort liegt die 2-KB-ATTRAPPE von unten, kein Programm.
Der Commander klickte darauf und bekam von Windows:
„Diese App kann auf dem PC nicht ausgefuehrt werden."
Aufgeraeumt hatte der Test nur Registry und Autostart — die
Verknuepfungen nicht, weil es sie beim Schreiben des Tests noch nicht
gab. Ein Test, der Spuren ausserhalb von `tmp_path` hinterlaesst, ist
kein Test, sondern ein Eingriff.
Deshalb jetzt ZWEI Sicherungen statt einer:
1. `verknuepfen=False` — die Funktion legt gar keine an.
2. Die Anlege-Funktion ist trotzdem ersetzt. Wer den Schalter
irgendwann umdreht oder die Vorgabe aendert, kann damit trotzdem
nichts am echten System anrichten.
"""
from rippy.platform import verknuepfungen as vk
from rippy.platform import win_registry as reg
# Sicherung 2: Selbst ein versehentliches `verknuepfen=True` bliebe folgenlos.
angelegt = []
monkeypatch.setattr(
vk, "alle_anlegen",
lambda programm, icon="", desktop=True, startmenue=True:
angelegt.append(programm) or {})
# Nicht die eigene Datei kopieren (das waere python.exe), sondern eine
# Attrappe: geprueft wird die Verdrahtung, nicht shutil.copy2.
attrappe = tmp_path / "quelle" / "RippySetup.exe"
@@ -75,7 +107,8 @@ def test_installation_legt_die_dateien_an_und_meldet_sich_bei_windows(tmp_path,
ziel = str(tmp_path / "installiert")
try:
ordner = windows_app.installieren(ziel=ziel, autostart=True,
starten_danach=False)
starten_danach=False,
verknuepfen=False)
assert os.path.isfile(os.path.join(ordner, "Rippy.exe"))
assert reg.ist_eingetragen() is True
@@ -89,3 +122,35 @@ def test_installation_legt_die_dateien_an_und_meldet_sich_bei_windows(tmp_path,
assert reg.ist_eingetragen() is False
assert reg.autostart_wert() == ""
assert angelegt == [], "Es haette KEINE Verknuepfung angelegt werden duerfen"
@nur_windows
def test_installation_ruehrt_die_echten_verknuepfungen_nicht_an(tmp_path, monkeypatch):
"""Der Waechter gegen genau den Vorfall vom 28.08.2026.
Er prueft, dass eine Installation mit `verknuepfen=False` die
Verknuepfungs-Funktionen NICHT aufruft — unabhaengig davon, was sie
tun wuerden. Waere dieser Test frueher dagewesen, haette der Commander
keine kaputte Desktop-Verknuepfung bekommen.
"""
from rippy.platform import verknuepfungen as vk
from rippy.platform import win_registry as reg
aufrufe = []
monkeypatch.setattr(vk, "anlegen",
lambda *a, **k: aufrufe.append(a) or True)
monkeypatch.setattr(vk, "alle_anlegen",
lambda *a, **k: aufrufe.append(a) or {})
attrappe = tmp_path / "q" / "RippySetup.exe"
attrappe.parent.mkdir()
attrappe.write_bytes(b"x" * 16)
monkeypatch.setattr(windows_app, "_eigene_datei", lambda: str(attrappe))
try:
windows_app.installieren(ziel=str(tmp_path / "i"), autostart=False,
starten_danach=False, verknuepfen=False)
finally:
reg.austragen()
assert aufrufe == []