Skip to content

Commit

Permalink
tests(console): add tests for --dry-run option
Browse files Browse the repository at this point in the history
  • Loading branch information
mkniewallner committed May 29, 2022
1 parent 3ee8584 commit a0c605a
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 13 deletions.
61 changes: 48 additions & 13 deletions tests/console/commands/test_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
)
37 changes: 37 additions & 0 deletions tests/console/commands/test_remove.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
)
57 changes: 57 additions & 0 deletions tests/console/commands/test_update.py
Original file line number Diff line number Diff line change
@@ -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
)

0 comments on commit a0c605a

Please sign in to comment.