aboutsummaryrefslogtreecommitdiff
path: root/tests/test_tools_metadata_common.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_tools_metadata_common.py')
-rw-r--r--tests/test_tools_metadata_common.py59
1 files changed, 47 insertions, 12 deletions
diff --git a/tests/test_tools_metadata_common.py b/tests/test_tools_metadata_common.py
index fefb024..9811852 100644
--- a/tests/test_tools_metadata_common.py
+++ b/tests/test_tools_metadata_common.py
@@ -46,7 +46,7 @@ def get_installation_mock(
name: str,
already_installed: bool = False,
could_be_installed: bool = False,
- supported_install_type: type | None = None,
+ supported_install_type: type | tuple | None = None,
) -> MagicMock:
"""Get mock instance for the installation."""
mock = MagicMock(spec=Installation)
@@ -74,6 +74,7 @@ def _already_installed_mock() -> MagicMock:
return get_installation_mock(
name="already_installed",
already_installed=True,
+ supported_install_type=(DownloadAndInstall, InstallFromPath),
)
@@ -136,32 +137,38 @@ def test_installation_manager_filtering() -> None:
ready_for_installation,
could_be_downloaded_and_installed,
]
- assert manager.could_be_downloaded_and_installed(
- "could_be_downloaded_and_installed"
- ) == [could_be_downloaded_and_installed]
- assert manager.could_be_downloaded_and_installed("some_installation") == []
@pytest.mark.parametrize("noninteractive", [True, False])
@pytest.mark.parametrize(
- "install_mock, eula_agreement, backend_name, expected_call",
+ "install_mock, eula_agreement, backend_name, force, expected_call",
[
[
_could_be_downloaded_and_installed_mock(),
True,
- None,
+ "could_be_downloaded_and_installed",
+ False,
[call(DownloadAndInstall(eula_agreement=True))],
],
[
_could_be_downloaded_and_installed_mock(),
False,
- None,
+ "could_be_downloaded_and_installed",
+ True,
+ [call(DownloadAndInstall(eula_agreement=False))],
+ ],
+ [
+ _already_installed_mock(),
+ False,
+ "already_installed",
+ True,
[call(DownloadAndInstall(eula_agreement=False))],
],
[
_could_be_downloaded_and_installed_mock(),
False,
"unknown",
+ True,
[],
],
],
@@ -171,6 +178,7 @@ def test_installation_manager_download_and_install(
noninteractive: bool,
eula_agreement: bool,
backend_name: str,
+ force: bool,
expected_call: Any,
monkeypatch: pytest.MonkeyPatch,
) -> None:
@@ -179,35 +187,58 @@ def test_installation_manager_download_and_install(
manager = get_installation_manager(noninteractive, [install_mock], monkeypatch)
- manager.download_and_install(backend_name, eula_agreement=eula_agreement)
+ manager.download_and_install(
+ backend_name, eula_agreement=eula_agreement, force=force
+ )
+
assert install_mock.install.mock_calls == expected_call
+ if force and install_mock.already_installed:
+ install_mock.uninstall.assert_called_once()
+ else:
+ install_mock.uninstall.assert_not_called()
@pytest.mark.parametrize("noninteractive", [True, False])
@pytest.mark.parametrize(
- "install_mock, backend_name, expected_call",
+ "install_mock, backend_name, force, expected_call",
[
[
_could_be_installed_from_mock(),
- None,
+ "could_be_installed_from",
+ False,
[call(InstallFromPath(Path("some_path")))],
],
[
_could_be_installed_from_mock(),
"unknown",
+ False,
+ [],
+ ],
+ [
+ _could_be_installed_from_mock(),
+ "unknown",
+ True,
[],
],
[
_already_installed_mock(),
"already_installed",
+ False,
[],
],
+ [
+ _already_installed_mock(),
+ "already_installed",
+ True,
+ [call(InstallFromPath(Path("some_path")))],
+ ],
],
)
def test_installation_manager_install_from(
install_mock: MagicMock,
noninteractive: bool,
backend_name: str,
+ force: bool,
expected_call: Any,
monkeypatch: pytest.MonkeyPatch,
) -> None:
@@ -215,9 +246,13 @@ def test_installation_manager_install_from(
install_mock.reset_mock()
manager = get_installation_manager(noninteractive, [install_mock], monkeypatch)
- manager.install_from(Path("some_path"), backend_name)
+ manager.install_from(Path("some_path"), backend_name, force=force)
assert install_mock.install.mock_calls == expected_call
+ if force and install_mock.already_installed:
+ install_mock.uninstall.assert_called_once()
+ else:
+ install_mock.uninstall.assert_not_called()
@pytest.mark.parametrize("noninteractive", [True, False])