Skip to content

Commit

Permalink
tests: 100% coverage for test_repository
Browse files Browse the repository at this point in the history
  • Loading branch information
b-kamphorst authored and neersighted committed Oct 10, 2022
1 parent 8a500f0 commit 6ae4855
Show file tree
Hide file tree
Showing 2 changed files with 156 additions and 22 deletions.
157 changes: 140 additions & 17 deletions tests/repositories/test_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,55 +8,62 @@
from poetry.repositories import Repository
from poetry.repositories.exceptions import PackageNotFound
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:
pool = Pool()
pool.add_repository(Repository("repo"))

with pytest.raises(PackageNotFound):
pool.package("foo", Version.parse("1.0.0"))


def test_pool():
def test_pool() -> None:
pool = Pool()

assert len(pool.repositories) == 0
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")
pool = Pool([repo])

assert len(pool.repositories) == 1
assert not pool.has_default()
assert pool.has_primary_repositories()


def test_repository_no_repository():
def test_repository_no_repository() -> None:
pool = Pool()

with pytest.raises(ValueError):
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")
pool = Pool()
pool.add_repository(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")
pool = Pool()
pool.add_repository(repo, secondary=True)

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")
default = LegacyRepository("default", "https://default.com")
repo1 = LegacyRepository("foo", "https://foo.bar")
Expand All @@ -73,9 +80,17 @@ def test_repository_with_normal_default_and_secondary_repositories():
assert pool.repository("foo") is repo1
assert pool.repository("bar") is repo2
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")
repo2 = LegacyRepository("bar", "https://bar.baz")
repo3 = LegacyRepository("baz", "https://baz.quux")
Expand All @@ -91,7 +106,7 @@ def test_remove_repository():
assert pool.repository("baz") is repo3


def test_remove_default_repository():
def test_remove_default_repository() -> None:
default = LegacyRepository("default", "https://default.com")
repo1 = LegacyRepository("foo", "https://foo.bar")
repo2 = LegacyRepository("bar", "https://bar.baz")
Expand All @@ -115,7 +130,7 @@ def test_remove_default_repository():
assert not pool.has_repository("default")


def test_repository_ordering():
def test_repository_ordering() -> None:
default1 = LegacyRepository("default1", "https://default1.com")
default2 = LegacyRepository("default2", "https://default2.com")
primary1 = LegacyRepository("primary1", "https://primary1.com")
Expand All @@ -141,3 +156,111 @@ def test_repository_ordering():
assert pool.repositories == [default1, primary1, primary3, secondary1, secondary3]
with pytest.raises(ValueError):
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]
21 changes: 16 additions & 5 deletions tests/repositories/test_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

import pytest

from poetry.core.constraints.version import Version
from poetry.core.packages.package import Package
from poetry.core.semver.version import Version

from poetry.factory import Factory
from poetry.repositories import Repository
from tests.helpers import get_package


@pytest.fixture(scope="module")
def black_repository() -> Repository:
repo = Repository("repo")
repo.add_package(Package("black", "19.10b0"))
repo.add_package(Package("black", "21.11b0", yanked="reason"))
repo.add_package(get_package("black", "19.10b0"))
repo.add_package(get_package("black", "21.11b0", yanked="reason"))
return repo


Expand Down Expand Up @@ -63,7 +63,18 @@ def test_package_yanked(
def test_package_pretty_name_is_kept() -> None:
pretty_name = "Not_canoni-calized.name"
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"))

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") == []

0 comments on commit 6ae4855

Please sign in to comment.