server-up/tests/test_update_channels.py
Ramon 6cc078e7b9
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 7m43s
v0.8.13-beta - updates voor beta en releases herstellen
2026-08-04 16:10:59 +02:00

130 lines
4.1 KiB
Python

"""Update-kanalen: stable ziet alleen releases, beta ook pre-releases."""
import sys
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "server-up"))
RELEASES = [
{"tag_name": "v0.5.00", "prerelease": False, "html_url": "u/0.5.00", "body": "stabiel"},
{"tag_name": "v0.5.10-beta1", "prerelease": True, "html_url": "u/beta1", "body": "beta"},
{"tag_name": "v0.4.60", "prerelease": False, "html_url": "u/0.4.60", "body": "oud"},
{"tag_name": "v9.9.9", "prerelease": False, "draft": True, "html_url": "u/draft"},
]
@pytest.fixture
def upd(env, monkeypatch):
from core import updater
updater.invalidate()
monkeypatch.setattr(updater, "_releases", lambda url: RELEASES)
env["core"].patch({"UPDATE_API_URL": "http://forgejo.test/api/releases"})
return updater
def test_stable_negeert_prereleases(upd):
res = upd.check("0.4.60", force=True)
assert res["channel"] == "stable"
assert res["latest"] == "0.5.00"
assert res["latest_tag"] == "v0.5.00"
assert res["image_tag"] == "0.5.00"
assert res["update_available"] is True
def test_beta_ziet_de_prerelease(upd, env):
env["core"].patch({"UPDATE_CHANNEL": "beta"})
res = upd.check("0.5.00", force=True)
assert res["channel"] == "beta"
assert res["latest"] == "0.5.10-beta1"
assert res["image_tag"] == "0.5.10-beta1"
assert res["update_available"] is True
assert res["prerelease"] is True
def test_stable_biedt_geen_update_vanaf_nieuwere_beta(upd, env):
"""Draai je 0.5.10-beta1 op stable, dan is 0.5.00 géén update."""
env["core"].patch({"UPDATE_CHANNEL": "stable"})
res = upd.check("0.5.10-beta1", force=True)
assert res["latest"] == "0.5.00"
assert res["update_available"] is False
def test_stabiele_release_wint_van_gelijke_beta(upd, env):
"""v0.5.10 hoort hoger te zijn dan v0.5.10-beta1."""
env["core"].patch({"UPDATE_CHANNEL": "beta"})
import core.updater as u
assert u._parse("0.5.10") > u._parse("0.5.10-beta1")
def test_draft_wordt_overgeslagen(upd):
assert upd.check("0.1.0", force=True)["latest"] != "9.9.9"
def test_oude_bool_migreert_naar_beta(upd, env):
env["core"].patch({"UPDATE_INCLUDE_PRERELEASE": True})
env["core"].patch({"UPDATE_CHANNEL": ""})
assert upd.channel() == "beta"
def test_expliciet_kanaal_wint_van_oude_bool(upd, env):
env["core"].patch({"UPDATE_INCLUDE_PRERELEASE": True, "UPDATE_CHANNEL": "stable"})
assert upd.channel() == "stable"
def test_cache_voorkomt_herhaalde_netwerkverzoeken(upd, monkeypatch):
tellers = {"n": 0}
def _tel(url):
tellers["n"] += 1
return RELEASES
monkeypatch.setattr(upd, "_releases", _tel)
upd.check("0.4.60", force=True)
upd.check("0.4.60")
upd.check("0.4.60")
assert tellers["n"] == 1
upd.check("0.4.60", force=True)
assert tellers["n"] == 2
def test_zonder_url_uitgeschakeld(upd, env):
env["core"].patch({"UPDATE_API_URL": ""})
res = upd.check("0.4.60", force=True)
assert res["enabled"] is False
assert res["update_available"] is False
def test_netwerkfout_wordt_gemeld(upd, monkeypatch):
def _stuk(url):
raise TimeoutError("te traag")
monkeypatch.setattr(upd, "_releases", _stuk)
res = upd.check("0.4.60", force=True)
assert "TimeoutError" in res["error"]
assert res["update_available"] is False
def test_is_prerelease():
from core import updater
assert updater.is_prerelease("0.5.00-beta") is True
assert updater.is_prerelease("0.5.00") is False
@pytest.mark.parametrize("release_tag,image_tag", [
("v0.8.13", "0.8.13"),
("v0.8.13-beta", "0.8.13-beta"),
("0.8.13", "0.8.13"),
("beta", "beta"),
])
def test_registry_tag_past_bij_de_workflow(release_tag, image_tag):
"""Forgejo-tags beginnen met v; de registry-workflow stript die v."""
from core import updater
assert updater.image_tag(release_tag) == image_tag
def test_ongeldig_kanaal_wordt_geweigerd(client):
from conftest import login
csrf = login(client)
r = client.put("/api/settings", json={"UPDATE_CHANNEL": "onzin"},
headers={"X-CSRF-Token": csrf})
assert r.status_code == 400