diff --git a/tests/fixtures.py b/tests/fixtures.py index 6129209..8d0b142 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1,3 +1,4 @@ +# pylint: disable=missing-module-docstring, missing-function-docstring, unused-argument, too-few-public-methods import time from pathlib import Path @@ -17,18 +18,23 @@ FAKE_VENV_PATH = Path("nowhere") class MockVirtualEnv: - class MockTestenvConfig: + """Mock class for the :class:`poetry.utils.env.VirtualEnv` and :class:`tox.venv.VirtualEnv`""" + + class MockTestenvConfig: # pylint: disable=missing-class-docstring envdir = FAKE_VENV_PATH def __init__(self, *args, **kwargs): self.envconfig = self.MockTestenvConfig() self.installed = [] - def is_valid_for_marker(self, *args, **kwargs): + @staticmethod + def is_valid_for_marker(*args, **kwargs): return True class MockPipInstaller: + """Mock class for the :class:`poetry.installation.pip_installer.PipInstaller`""" + def __init__(self, env: MockVirtualEnv, **kwargs): self.env = env diff --git a/tests/test_installer.py b/tests/test_installer.py index 59e8563..45c9d68 100644 --- a/tests/test_installer.py +++ b/tests/test_installer.py @@ -1,4 +1,4 @@ -# pylint: disable=missing-module-docstring +# pylint: disable=missing-module-docstring, redefined-outer-name, unused-argument, wrong-import-order, unused-import import time import tox.venv @@ -22,7 +22,7 @@ def test_deduplication(mock_venv, mock_poetry_factory): installer.install(poetry, venv, to_install) - assert len(set(to_install)) == len(venv.installed) + assert len(set(to_install)) == len(venv.installed) # pylint: disable=no-member def test_parallelization(mock_venv, mock_poetry_factory): diff --git a/tests/test_transients.py b/tests/test_transients.py index 53f7039..1b1c88b 100644 --- a/tests/test_transients.py +++ b/tests/test_transients.py @@ -1,3 +1,4 @@ +# pylint: disable=missing-module-docstring, redefined-outer-name, unused-argument, wrong-import-order, unused-import import poetry.factory import poetry.utils.env import pytest @@ -12,6 +13,10 @@ from tox_poetry_installer import utilities def test_exclude_unsafe(): + """Test that the unsafe packages are properly excluded + + Also ensure that the internal constant matches the value from Poetry + """ assert Provider.UNSAFE_PACKAGES == constants.UNSAFE_PACKAGES for dep in constants.UNSAFE_PACKAGES: @@ -19,6 +24,7 @@ def test_exclude_unsafe(): def test_allow_missing(): + """Test that the ``allow_missing`` parameter works as expected""" with pytest.raises(exceptions.LockedDepNotFoundError): utilities.identify_transients("luke-skywalker", dict(), None) @@ -31,6 +37,7 @@ def test_allow_missing(): def test_exclude_pep508(): + """Test that dependencies specified in PEP508 format are properly excluded""" for version in [ "foo==1.0", "foo==1", @@ -48,11 +55,16 @@ def test_exclude_pep508(): def test_functional(mock_poetry_factory, mock_venv): + """Integration tests for the :func:`identify_transients` function + + Trivially test that it resolves dependencies properly and that the parent package + is always the last in the returned list. + """ pypoetry = poetry.factory.Factory().create_poetry(None) packages: datatypes.PackageMap = { item.name: item for item in pypoetry.locker.locked_repository(False).packages } - venv = poetry.utils.env.VirtualEnv() + venv = poetry.utils.env.VirtualEnv() # pylint: disable=no-value-for-parameter requests_requires = [ packages["certifi"], @@ -70,3 +82,4 @@ def test_functional(mock_poetry_factory, mock_venv): for package in [packages["requests"], packages["tox"], packages["flask"]]: transients = utilities.identify_transients(package, packages, venv) assert transients[-1] == package + assert len(transients) == len(set(transients))