hugin/server/tests/test_resolution.py
2026-10-27 08:33:21 +01:00

51 lines
1.9 KiB
Python

import pytest
from hugin_core.resolution import Subscription, ResolutionError, Available, resolve
V = {
"pub-a": [Available("1.0.0"), Available("1.2.0"), Available("2.0.0"), Available("2.1.0", channel="test")],
"pub-b": [Available("1.0.0", deprecated=True), Available("1.1.0")],
"pub-pflicht": [Available("3.0.0")],
}
def versions(subscriptions, installed=None, major=False, mandatory=(), unsubscribed=()):
result = resolve([Subscription.read(a) for a in subscriptions], list(mandatory), list(unsubscribed), V,
installed or {}, major)
return result
@pytest.mark.parametrize("subscription, installed, major, expected", [
("pub-a", None, False, "2.0.0"),
("pub-a@stable", {"pub-a": "1.0.0"}, False, "1.2.0"),
("pub-a@stable", {"pub-a": "1.0.0"}, True, "2.0.0"),
("pub-a@test", None, False, "2.1.0"),
("pub-a@^1", None, False, "1.2.0"),
("pub-a@1.0.0", None, False, "1.0.0"),
("pub-b@1.0.0", None, False, "1.0.0"), # veraltet bleibt abrufbar (→ 9.1)
("pub-b", None, False, "1.1.0"),
])
def test_choose(subscription, installed, major, expected):
assert versions([subscription], installed, major).versions[subscription.split("@")[0]] == expected
def test_major_is_reported():
result = versions(["pub-a"], {"pub-a": "1.0.0"})
assert result.major_available == {"pub-a": "2.0.0"}
def test_mandatory_comes_always():
result = versions(["pub-b"], mandatory=["pub-pflicht"], unsubscribed=["pub-pflicht", "pub-b"])
assert result.versions == {"pub-pflicht": "3.0.0"}
assert result.mandatory == {"pub-pflicht"}
@pytest.mark.parametrize("subscription", ["pub-x", "pub-a@^9", "pub-a@9.9.9"])
def test_not_resolvable(subscription):
with pytest.raises(ResolutionError):
versions([subscription])
def test_invalid_subscription():
with pytest.raises(ResolutionError):
Subscription.read("pub-a@latest")