51 lines
1.9 KiB
Python
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")
|