130 lines
4.1 KiB
Python
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
|