Commit 6ae4855d by Bart Kamphorst Committed by Bjorn Neergaard

tests: 100% coverage for test_repository

parent 8a500f05
...@@ -8,39 +8,46 @@ from poetry.repositories import Pool ...@@ -8,39 +8,46 @@ from poetry.repositories import Pool
from poetry.repositories import Repository from poetry.repositories import Repository
from poetry.repositories.exceptions import PackageNotFound from poetry.repositories.exceptions import PackageNotFound
from poetry.repositories.legacy_repository import LegacyRepository from poetry.repositories.legacy_repository import LegacyRepository
from tests.helpers import get_dependency
from tests.helpers import get_package
def test_pool_raises_package_not_found_when_no_package_is_found() -> None: def test_pool() -> None:
pool = Pool()
pool.add_repository(Repository("repo"))
with pytest.raises(PackageNotFound):
pool.package("foo", Version.parse("1.0.0"))
def test_pool():
pool = Pool() pool = Pool()
assert len(pool.repositories) == 0 assert len(pool.repositories) == 0
assert not pool.has_default() assert not pool.has_default()
assert not pool.has_primary_repositories()
def test_pool_with_initial_repositories(): def test_pool_with_initial_repositories() -> None:
repo = Repository("repo") repo = Repository("repo")
pool = Pool([repo]) pool = Pool([repo])
assert len(pool.repositories) == 1 assert len(pool.repositories) == 1
assert not pool.has_default() assert not pool.has_default()
assert pool.has_primary_repositories()
def test_repository_no_repository(): def test_repository_no_repository() -> None:
pool = Pool() pool = Pool()
with pytest.raises(ValueError): with pytest.raises(ValueError):
pool.repository("foo") pool.repository("foo")
def test_repository_from_normal_pool(): def test_adding_repositories_with_same_name_twice_raises_value_error() -> None:
repo1 = Repository("repo")
repo2 = Repository("repo")
with pytest.raises(ValueError):
Pool([repo1, repo2])
with pytest.raises(ValueError):
Pool([repo1]).add_repository(repo2)
def test_repository_from_normal_pool() -> None:
repo = LegacyRepository("foo", "https://foo.bar") repo = LegacyRepository("foo", "https://foo.bar")
pool = Pool() pool = Pool()
pool.add_repository(repo) pool.add_repository(repo)
...@@ -48,7 +55,7 @@ def test_repository_from_normal_pool(): ...@@ -48,7 +55,7 @@ def test_repository_from_normal_pool():
assert pool.repository("foo") is repo assert pool.repository("foo") is repo
def test_repository_from_secondary_pool(): def test_repository_from_secondary_pool() -> None:
repo = LegacyRepository("foo", "https://foo.bar") repo = LegacyRepository("foo", "https://foo.bar")
pool = Pool() pool = Pool()
pool.add_repository(repo, secondary=True) pool.add_repository(repo, secondary=True)
...@@ -56,7 +63,7 @@ def test_repository_from_secondary_pool(): ...@@ -56,7 +63,7 @@ def test_repository_from_secondary_pool():
assert pool.repository("foo") is repo assert pool.repository("foo") is repo
def test_repository_with_normal_default_and_secondary_repositories(): def test_repository_with_normal_default_and_secondary_repositories() -> None:
secondary = LegacyRepository("secondary", "https://secondary.com") secondary = LegacyRepository("secondary", "https://secondary.com")
default = LegacyRepository("default", "https://default.com") default = LegacyRepository("default", "https://default.com")
repo1 = LegacyRepository("foo", "https://foo.bar") repo1 = LegacyRepository("foo", "https://foo.bar")
...@@ -73,9 +80,17 @@ def test_repository_with_normal_default_and_secondary_repositories(): ...@@ -73,9 +80,17 @@ def test_repository_with_normal_default_and_secondary_repositories():
assert pool.repository("foo") is repo1 assert pool.repository("foo") is repo1
assert pool.repository("bar") is repo2 assert pool.repository("bar") is repo2
assert pool.has_default() assert pool.has_default()
assert pool.has_primary_repositories()
def test_remove_repository(): def test_remove_non_existing_repository_raises_indexerror() -> None:
pool = Pool()
with pytest.raises(IndexError):
pool.remove_repository("foo")
def test_remove_existing_repository_successful() -> None:
repo1 = LegacyRepository("foo", "https://foo.bar") repo1 = LegacyRepository("foo", "https://foo.bar")
repo2 = LegacyRepository("bar", "https://bar.baz") repo2 = LegacyRepository("bar", "https://bar.baz")
repo3 = LegacyRepository("baz", "https://baz.quux") repo3 = LegacyRepository("baz", "https://baz.quux")
...@@ -91,7 +106,7 @@ def test_remove_repository(): ...@@ -91,7 +106,7 @@ def test_remove_repository():
assert pool.repository("baz") is repo3 assert pool.repository("baz") is repo3
def test_remove_default_repository(): def test_remove_default_repository() -> None:
default = LegacyRepository("default", "https://default.com") default = LegacyRepository("default", "https://default.com")
repo1 = LegacyRepository("foo", "https://foo.bar") repo1 = LegacyRepository("foo", "https://foo.bar")
repo2 = LegacyRepository("bar", "https://bar.baz") repo2 = LegacyRepository("bar", "https://bar.baz")
...@@ -115,7 +130,7 @@ def test_remove_default_repository(): ...@@ -115,7 +130,7 @@ def test_remove_default_repository():
assert not pool.has_repository("default") assert not pool.has_repository("default")
def test_repository_ordering(): def test_repository_ordering() -> None:
default1 = LegacyRepository("default1", "https://default1.com") default1 = LegacyRepository("default1", "https://default1.com")
default2 = LegacyRepository("default2", "https://default2.com") default2 = LegacyRepository("default2", "https://default2.com")
primary1 = LegacyRepository("primary1", "https://primary1.com") primary1 = LegacyRepository("primary1", "https://primary1.com")
...@@ -141,3 +156,111 @@ def test_repository_ordering(): ...@@ -141,3 +156,111 @@ def test_repository_ordering():
assert pool.repositories == [default1, primary1, primary3, secondary1, secondary3] assert pool.repositories == [default1, primary1, primary3, secondary1, secondary3]
with pytest.raises(ValueError): with pytest.raises(ValueError):
pool.add_repository(default2, default=True) pool.add_repository(default2, default=True)
def test_pool_get_package_in_any_repository() -> None:
package1 = get_package("foo", "1.0.0")
repo1 = Repository("repo1", [package1])
package2 = get_package("bar", "1.0.0")
repo2 = Repository("repo2", [package1, package2])
pool = Pool([repo1, repo2])
returned_package1 = pool.package("foo", Version.parse("1.0.0"))
returned_package2 = pool.package("bar", Version.parse("1.0.0"))
assert returned_package1 == package1
assert returned_package2 == package2
def test_pool_get_package_in_specified_repository() -> None:
package = get_package("foo", "1.0.0")
repo1 = Repository("repo1")
repo2 = Repository("repo2", [package])
pool = Pool([repo1, repo2])
returned_package = pool.package("foo", Version.parse("1.0.0"), repository="repo2")
assert returned_package == package
def test_pool_no_package_from_any_repository_raises_package_not_found() -> None:
pool = Pool()
pool.add_repository(Repository("repo"))
with pytest.raises(PackageNotFound):
pool.package("foo", Version.parse("1.0.0"))
def test_pool_no_package_from_specified_repository_raises_package_not_found() -> None:
package = get_package("foo", "1.0.0")
repo1 = Repository("repo1")
repo2 = Repository("repo2", [package])
pool = Pool([repo1, repo2])
with pytest.raises(PackageNotFound):
pool.package("foo", Version.parse("1.0.0"), repository="repo1")
def test_pool_find_packages_in_any_repository() -> None:
package1 = get_package("foo", "1.1.1")
package2 = get_package("foo", "1.2.3")
package3 = get_package("foo", "2.0.0")
package4 = get_package("bar", "1.2.3")
repo1 = Repository("repo1", [package1, package3])
repo2 = Repository("repo2", [package1, package2, package4])
pool = Pool([repo1, repo2])
available_dependency = get_dependency("foo", "^1.0.0")
returned_packages_available = pool.find_packages(available_dependency)
unavailable_dependency = get_dependency("foo", "999.9.9")
returned_packages_unavailable = pool.find_packages(unavailable_dependency)
assert returned_packages_available == [package1, package1, package2]
assert returned_packages_unavailable == []
def test_pool_find_packages_in_specified_repository() -> None:
package_foo1 = get_package("foo", "1.1.1")
package_foo2 = get_package("foo", "1.2.3")
package_foo3 = get_package("foo", "2.0.0")
package_bar = get_package("bar", "1.2.3")
repo1 = Repository("repo1", [package_foo1, package_foo3])
repo2 = Repository("repo2", [package_foo1, package_foo2, package_bar])
pool = Pool([repo1, repo2])
available_dependency = get_dependency("foo", "^1.0.0")
available_dependency.source_name = "repo2"
returned_packages_available = pool.find_packages(available_dependency)
unavailable_dependency = get_dependency("foo", "999.9.9")
unavailable_dependency.source_name = "repo2"
returned_packages_unavailable = pool.find_packages(unavailable_dependency)
assert returned_packages_available == [package_foo1, package_foo2]
assert returned_packages_unavailable == []
def test_search_no_legacy_repositories() -> None:
package_foo1 = get_package("foo", "1.0.0")
package_foo2 = get_package("foo", "2.0.0")
package_foobar = get_package("foobar", "1.0.0")
repo1 = Repository("repo1", [package_foo1, package_foo2])
repo2 = Repository("repo2", [package_foo1, package_foobar])
pool = Pool([repo1, repo2])
assert pool.search("foo") == [
package_foo1,
package_foo2,
package_foo1,
package_foobar,
]
assert pool.search("bar") == [package_foobar]
assert pool.search("nothing") == []
def test_search_legacy_repositories_are_skipped() -> None:
package = get_package("foo", "1.0.0")
repo1 = Repository("repo1", [package])
repo2 = LegacyRepository("repo2", "https://fake.repo/")
pool = Pool([repo1, repo2])
assert pool.search("foo") == [package]
...@@ -2,18 +2,18 @@ from __future__ import annotations ...@@ -2,18 +2,18 @@ from __future__ import annotations
import pytest import pytest
from poetry.core.constraints.version import Version from poetry.core.semver.version import Version
from poetry.core.packages.package import Package
from poetry.factory import Factory from poetry.factory import Factory
from poetry.repositories import Repository from poetry.repositories import Repository
from tests.helpers import get_package
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def black_repository() -> Repository: def black_repository() -> Repository:
repo = Repository("repo") repo = Repository("repo")
repo.add_package(Package("black", "19.10b0")) repo.add_package(get_package("black", "19.10b0"))
repo.add_package(Package("black", "21.11b0", yanked="reason")) repo.add_package(get_package("black", "21.11b0", yanked="reason"))
return repo return repo
...@@ -63,7 +63,18 @@ def test_package_yanked( ...@@ -63,7 +63,18 @@ def test_package_yanked(
def test_package_pretty_name_is_kept() -> None: def test_package_pretty_name_is_kept() -> None:
pretty_name = "Not_canoni-calized.name" pretty_name = "Not_canoni-calized.name"
repo = Repository("repo") repo = Repository("repo")
repo.add_package(Package(pretty_name, "1.0")) repo.add_package(get_package(pretty_name, "1.0"))
package = repo.package(pretty_name, Version.parse("1.0")) package = repo.package(pretty_name, Version.parse("1.0"))
assert package.pretty_name == pretty_name assert package.pretty_name == pretty_name
def test_search() -> None:
package_foo1 = get_package("foo", "1.0.0")
package_foo2 = get_package("foo", "2.0.0")
package_foobar = get_package("foobar", "1.0.0")
repo = Repository("repo", [package_foo1, package_foo2, package_foobar])
assert repo.search("foo") == [package_foo1, package_foo2, package_foobar]
assert repo.search("bar") == [package_foobar]
assert repo.search("nothing") == []
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment