diff --git a/tests/console/commands/test_add.py b/tests/console/commands/test_add.py index a3b3e331a91..dd9dd52177c 100644 --- a/tests/console/commands/test_add.py +++ b/tests/console/commands/test_add.py @@ -25,6 +25,21 @@ from tests.helpers import PoetryTestApplication from tests.helpers import TestRepository from tests.types import CommandTesterFactory + from tests.types import FixtureDirGetter + from tests.types import ProjectFactory + + +@pytest.fixture +def poetry_with_up_to_date_lockfile( + project_factory: ProjectFactory, fixture_dir: FixtureDirGetter +) -> Poetry: + source = fixture_dir("up_to_date_lock") + + return project_factory( + name="foobar", + pyproject_content=(source / "pyproject.toml").read_text(encoding="utf-8"), + poetry_lock_content=(source / "poetry.lock").read_text(encoding="utf-8"), + ) @pytest.fixture() @@ -1999,34 +2014,54 @@ def test_add_with_lock_old_installer( def test_add_keyboard_interrupt_restore_content( - app: PoetryTestApplication, + poetry_with_up_to_date_lockfile: Poetry, repo: TestRepository, - installer: NoopInstaller, - tester: CommandTester, + command_tester_factory: CommandTesterFactory, mocker: MockerFixture, ): + tester = command_tester_factory("add", poetry=poetry_with_up_to_date_lockfile) + mocker.patch( "poetry.installation.installer.Installer.run", side_effect=KeyboardInterrupt() ) - original_content = app.poetry.file.read() + original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("cachy", "0.2.0")) + repo.add_package(get_package("docker", "4.3.1")) - tester.execute("cachy --dry-run") + tester.execute("cachy") - assert original_content == app.poetry.file.read() + assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert ( + poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content + ) -def test_dry_run_restore_original_content( - app: PoetryTestApplication, +@pytest.mark.parametrize( + "command", + [ + "cachy --dry-run", + "cachy --lock --dry-run", + ], +) +def test_add_with_dry_run_keep_files_intact( + command: str, + poetry_with_up_to_date_lockfile: Poetry, repo: TestRepository, - installer: NoopInstaller, - tester: CommandTester, + command_tester_factory: CommandTesterFactory, ): - original_content = app.poetry.file.read() + tester = command_tester_factory("add", poetry=poetry_with_up_to_date_lockfile) + + original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("cachy", "0.2.0")) + repo.add_package(get_package("docker", "4.3.1")) - tester.execute("cachy --dry-run") + tester.execute(command) - assert original_content == app.poetry.file.read() + assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert ( + poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content + ) diff --git a/tests/console/commands/test_remove.py b/tests/console/commands/test_remove.py index a16854c4b89..4911fac7aba 100644 --- a/tests/console/commands/test_remove.py +++ b/tests/console/commands/test_remove.py @@ -8,16 +8,33 @@ from poetry.core.packages.package import Package from poetry.factory import Factory +from tests.helpers import get_package if TYPE_CHECKING: from cleo.testers.command_tester import CommandTester from pytest_mock import MockerFixture + from poetry.poetry import Poetry from poetry.repositories import Repository from tests.helpers import PoetryTestApplication from tests.helpers import TestRepository from tests.types import CommandTesterFactory + from tests.types import FixtureDirGetter + from tests.types import ProjectFactory + + +@pytest.fixture +def poetry_with_up_to_date_lockfile( + project_factory: ProjectFactory, fixture_dir: FixtureDirGetter +) -> Poetry: + source = fixture_dir("up_to_date_lock") + + return project_factory( + name="foobar", + pyproject_content=(source / "pyproject.toml").read_text(encoding="utf-8"), + poetry_lock_content=(source / "poetry.lock").read_text(encoding="utf-8"), + ) @pytest.fixture() @@ -256,3 +273,23 @@ def test_remove_command_should_not_write_changes_upon_installer_errors( tester.execute("foo") assert app.poetry.file.read().as_string() == original_content + + +def test_remove_with_dry_run_keep_files_intact( + poetry_with_up_to_date_lockfile: Poetry, + repo: TestRepository, + command_tester_factory: CommandTesterFactory, +): + tester = command_tester_factory("remove", poetry=poetry_with_up_to_date_lockfile) + + original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data + + repo.add_package(get_package("docker", "4.3.1")) + + tester.execute("docker --dry-run") + + assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert ( + poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content + ) diff --git a/tests/console/commands/test_update.py b/tests/console/commands/test_update.py new file mode 100644 index 00000000000..dd3306cf2ba --- /dev/null +++ b/tests/console/commands/test_update.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest + +from tests.helpers import get_package + + +if TYPE_CHECKING: + from poetry.poetry import Poetry + from tests.helpers import TestRepository + from tests.types import CommandTesterFactory + from tests.types import FixtureDirGetter + from tests.types import ProjectFactory + + +@pytest.fixture +def poetry_with_up_to_date_lockfile( + project_factory: ProjectFactory, fixture_dir: FixtureDirGetter +) -> Poetry: + source = fixture_dir("outdated_lock") + + return project_factory( + name="foobar", + pyproject_content=(source / "pyproject.toml").read_text(encoding="utf-8"), + poetry_lock_content=(source / "poetry.lock").read_text(encoding="utf-8"), + ) + + +@pytest.mark.parametrize( + "command", + [ + "--dry-run", + "docker --dry-run", + ], +) +def test_update_with_dry_run_keep_files_intact( + command: str, + poetry_with_up_to_date_lockfile: Poetry, + repo: TestRepository, + command_tester_factory: CommandTesterFactory, +): + tester = command_tester_factory("update", poetry=poetry_with_up_to_date_lockfile) + + original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data + + repo.add_package(get_package("docker", "4.3.0")) + repo.add_package(get_package("docker", "4.3.1")) + + tester.execute(command) + + assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert ( + poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content + )