diff --git a/tests/config/test_config_source.py b/tests/config/test_config_source.py index fcfdf78ca61..3dd226e99c4 100644 --- a/tests/config/test_config_source.py +++ b/tests/config/test_config_source.py @@ -1,21 +1,30 @@ from __future__ import annotations +from copy import deepcopy + +import pytest + +from cleo.io.buffered_io import BufferedIO + from poetry.config.config_source import UNSET from poetry.config.config_source import ConfigSourceMigration from poetry.config.dict_config_source import DictConfigSource -def test_config_source_migration_rename_key() -> None: - config_data = { +@pytest.fixture +def config_source() -> DictConfigSource: + config_source = DictConfigSource() + config_source._config = { "virtualenvs": { "prefer-active-python": True, }, "system-git-client": True, } - config_source = DictConfigSource() - config_source._config = config_data + return config_source + +def test_config_source_migration_rename_key(config_source: DictConfigSource) -> None: migration = ConfigSourceMigration( old_key="virtualenvs.prefer-active-python", new_key="virtualenvs.use-poetry-python", @@ -23,7 +32,7 @@ def test_config_source_migration_rename_key() -> None: migration.apply(config_source) - assert config_source._config == { + assert config_source.config == { "virtualenvs": { "use-poetry-python": True, }, @@ -31,17 +40,7 @@ def test_config_source_migration_rename_key() -> None: } -def test_config_source_migration_remove_key() -> None: - config_data = { - "virtualenvs": { - "prefer-active-python": True, - }, - "system-git-client": True, - } - - config_source = DictConfigSource() - config_source._config = config_data - +def test_config_source_migration_remove_key(config_source: DictConfigSource) -> None: migration = ConfigSourceMigration( old_key="virtualenvs.prefer-active-python", new_key=None, @@ -49,23 +48,13 @@ def test_config_source_migration_remove_key() -> None: migration.apply(config_source) - assert config_source._config == { + assert config_source.config == { "virtualenvs": {}, "system-git-client": True, } -def test_config_source_migration_unset_value() -> None: - config_data = { - "virtualenvs": { - "prefer-active-python": True, - }, - "system-git-client": True, - } - - config_source = DictConfigSource() - config_source._config = config_data - +def test_config_source_migration_unset_value(config_source: DictConfigSource) -> None: migration = ConfigSourceMigration( old_key="virtualenvs.prefer-active-python", new_key="virtualenvs.use-poetry-python", @@ -74,23 +63,15 @@ def test_config_source_migration_unset_value() -> None: migration.apply(config_source) - assert config_source._config == { + assert config_source.config == { "virtualenvs": {}, "system-git-client": True, } -def test_config_source_migration_complex_migration() -> None: - config_data = { - "virtualenvs": { - "prefer-active-python": True, - }, - "system-git-client": True, - } - - config_source = DictConfigSource() - config_source._config = config_data - +def test_config_source_migration_complex_migration( + config_source: DictConfigSource, +) -> None: migration = ConfigSourceMigration( old_key="virtualenvs.prefer-active-python", new_key="virtualenvs.use-poetry-python", @@ -99,9 +80,71 @@ def test_config_source_migration_complex_migration() -> None: migration.apply(config_source) - assert config_source._config == { + assert config_source.config == { "virtualenvs": { "use-poetry-python": None, }, "system-git-client": True, } + + +@pytest.mark.parametrize( + ("migration", "expected_result", "expected_output"), + [ + pytest.param( + ConfigSourceMigration( + old_key="virtualenvs.prefer-active-python", + new_key="virtualenvs.use-poetry-python", + ), + True, + ( + "virtualenvs.prefer-active-python = true -> " + "virtualenvs.use-poetry-python = true" + ), + id="rename-key", + ), + pytest.param( + ConfigSourceMigration( + old_key="virtualenvs.prefer-active-python", + new_key=None, + ), + True, + "virtualenvs.prefer-active-python = true -> Removed from config", + id="remove-key", + ), + pytest.param( + ConfigSourceMigration( + old_key="virtualenvs.prefer-active-python", + new_key="virtualenvs.use-poetry-python", + value_migration={True: UNSET, False: True}, + ), + True, + ( + "virtualenvs.prefer-active-python = true -> " + "virtualenvs.use-poetry-python = Not explicit set" + ), + id="unset-value", + ), + pytest.param( + ConfigSourceMigration( + old_key="virtualenvs.missing-key", + new_key="virtualenvs.use-poetry-python", + ), + False, + "", + id="missing-key", + ), + ], +) +def test_config_source_migration_dry_run( + config_source: DictConfigSource, + migration: ConfigSourceMigration, + expected_result: bool, + expected_output: str, +) -> None: + original_config = deepcopy(config_source.config) + io = BufferedIO() + + assert migration.dry_run(config_source, io) is expected_result + assert io.fetch_output().strip() == expected_output + assert config_source.config == original_config