fix(test): der Installations-Test hat die ECHTEN Verknuepfungen ueberschrieben
Ampel / ampel (push) Failing after 47s
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:
co-authored by
Claude Opus 5
parent
99c05865af
commit
069fc46f44
@@ -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 == []
|
||||
|
||||
Reference in New Issue
Block a user