68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from syncvito.updater import GiteaUpdateService, UpdateFormatError, parse_version
|
|
|
|
|
|
def _release(version: str, *, draft: bool = False, prerelease: bool = False) -> dict[str, object]:
|
|
return {
|
|
"tag_name": f"v{version}",
|
|
"name": f"SyncVito {version}",
|
|
"body": "Änderungen",
|
|
"html_url": f"https://gitea.example/releases/v{version}",
|
|
"draft": draft,
|
|
"prerelease": prerelease,
|
|
"assets": [
|
|
{
|
|
"name": "SyncVito.exe",
|
|
"browser_download_url": "https://gitea.example/download/SyncVito.exe",
|
|
"size": 1234,
|
|
},
|
|
{
|
|
"name": "SyncVito.exe.sha256",
|
|
"browser_download_url": "https://gitea.example/download/SyncVito.exe.sha256",
|
|
"size": 80,
|
|
},
|
|
],
|
|
}
|
|
|
|
|
|
def test_parse_version_accepts_stable_tags() -> None:
|
|
assert parse_version("v1.2.3") == (1, 2, 3)
|
|
assert parse_version("10.20.30") == (10, 20, 30)
|
|
|
|
|
|
def test_parse_version_rejects_prerelease() -> None:
|
|
with pytest.raises(ValueError):
|
|
parse_version("1.2.3-beta")
|
|
|
|
|
|
def test_check_selects_newest_stable_release(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
|
|
service = GiteaUpdateService("1.0.0", base_url="https://gitea.example", update_directory=tmp_path)
|
|
releases = [_release("1.1.0"), _release("2.0.0", prerelease=True), _release("1.3.0")]
|
|
monkeypatch.setattr(service, "_read_json", lambda _url: releases)
|
|
|
|
update = service.check()
|
|
|
|
assert update is not None
|
|
assert update.version == "1.3.0"
|
|
assert update.download_url.endswith("SyncVito.exe")
|
|
|
|
|
|
def test_check_returns_none_for_current_version(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
|
|
service = GiteaUpdateService("1.3.0", base_url="https://gitea.example", update_directory=tmp_path)
|
|
monkeypatch.setattr(service, "_read_json", lambda _url: [_release("1.3.0"), _release("1.2.0")])
|
|
|
|
assert service.check() is None
|
|
|
|
|
|
def test_release_requires_checksum(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
|
|
service = GiteaUpdateService("1.0.0", base_url="https://gitea.example", update_directory=tmp_path)
|
|
release = _release("1.1.0")
|
|
release["assets"] = [release["assets"][0]] # type: ignore[index]
|
|
monkeypatch.setattr(service, "_read_json", lambda _url: [release])
|
|
|
|
with pytest.raises(UpdateFormatError, match="Prüfsumme|SyncVito.exe.sha256"):
|
|
service.check()
|