server-up/tests/test_stack_remove.py
Ramon 6c84def759
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 4m46s
fix: herstel app verwijderen en mobiele modals
2026-08-04 18:50:16 +02:00

91 lines
2.9 KiB
Python

"""Apps verwijderen: veilige dataretentie, volledige wisactie en symlinks."""
import time
from conftest import login
def _wacht(client, jid, timeout=5):
einde = time.time() + timeout
while time.time() < einde:
data = client.get(f"/api/jobs/{jid}").get_json() or {}
if data.get("status") in ("done", "error"):
return data
time.sleep(0.03)
return {}
def _stack(env, naam):
pad = env["lib"] / naam
pad.mkdir()
(pad / "compose.yaml").write_text(
"services:\n web:\n image: nginx\n", encoding="utf-8")
data = env["tmp"] / "appdata" / naam
data.mkdir(parents=True)
(data / "blijft.txt").write_text("data", encoding="utf-8")
return pad, data
def test_app_verwijderen_haalt_app_weg_en_bewaart_data(
client, env, monkeypatch):
from core import docker
csrf = login(client)
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
stack, data = _stack(env, "veilig")
volumes = []
monkeypatch.setattr(
docker, "compose_down",
lambda *a, **kw: volumes.append(kw.get("volumes")) or 0)
r = client.post("/api/stacks/veilig/remove", json={"mode": "full"},
headers={"X-CSRF-Token": csrf})
job = _wacht(client, r.get_json()["job_id"])
assert job["status"] == "done"
assert not stack.exists()
assert data.is_dir()
assert volumes == [False]
def test_app_en_data_verwijderen_wist_ook_volumes_en_appdata(
client, env, monkeypatch):
from core import docker
csrf = login(client)
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
stack, data = _stack(env, "alles")
volumes = []
monkeypatch.setattr(
docker, "compose_down",
lambda *a, **kw: volumes.append(kw.get("volumes")) or 0)
r = client.post("/api/stacks/alles/remove", json={"mode": "all"},
headers={"X-CSRF-Token": csrf})
job = _wacht(client, r.get_json()["job_id"])
assert job["status"] == "done"
assert not stack.exists()
assert not data.exists()
assert volumes == [True]
def test_overgenomen_app_verwijderen_haalt_alleen_symlink_weg(
client, env, monkeypatch):
from core import docker
csrf = login(client)
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
bron = env["tmp"] / "eigen-compose"
bron.mkdir()
(bron / "compose.yaml").write_text(
"services:\n web:\n image: nginx\n", encoding="utf-8")
link = env["lib"] / "overgenomen"
link.symlink_to(bron)
monkeypatch.setattr(docker, "compose_down", lambda *a, **kw: 0)
r = client.post("/api/stacks/overgenomen/remove",
json={"mode": "full"},
headers={"X-CSRF-Token": csrf})
assert r.status_code == 200, r.get_json()
job = _wacht(client, r.get_json()["job_id"])
assert job["status"] == "done"
assert not link.exists() and not link.is_symlink()
assert (bron / "compose.yaml").is_file()