From ed6185748f8fbdb25f269ed90e878e34258eb290 Mon Sep 17 00:00:00 2001 From: Adam Stus Date: Wed, 12 Jun 2024 12:13:08 +0200 Subject: [PATCH] Added better error when docker is not installed (#1191) --- RELEASE-NOTES.md | 1 + .../plugins/spcs/image_registry/manager.py | 2 ++ tests/spcs/test_registry.py | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index b8f74a044..52a81545a 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -35,6 +35,7 @@ * Deploying function/procedure with `--replace` flag now copies all grants * Fixed MFA caching * Fixed `DeprerationWarning`/`SyntaxWarning` due to invalid escape sequences +* Improved error message in `snow spcs image-registry login` when docker is not installed. # v2.4.0 ## Backward incompatibility diff --git a/src/snowflake/cli/plugins/spcs/image_registry/manager.py b/src/snowflake/cli/plugins/spcs/image_registry/manager.py index 4c522afc0..493b434d9 100644 --- a/src/snowflake/cli/plugins/spcs/image_registry/manager.py +++ b/src/snowflake/cli/plugins/spcs/image_registry/manager.py @@ -101,3 +101,5 @@ def docker_registry_login(self) -> str: ) except subprocess.CalledProcessError as e: raise ClickException(f"Login Failed: {e.stderr}".strip()) + except FileNotFoundError: + raise ClickException("Docker is not installed.") diff --git a/tests/spcs/test_registry.py b/tests/spcs/test_registry.py index 9fa582496..416c01d94 100644 --- a/tests/spcs/test_registry.py +++ b/tests/spcs/test_registry.py @@ -216,3 +216,25 @@ def test_docker_registry_login_subprocess_error( RegistryManager().docker_registry_login() assert e.value.message == snapshot + + +@mock.patch( + "snowflake.cli.plugins.spcs.image_registry.manager.RegistryManager.get_token" +) +@mock.patch( + "snowflake.cli.plugins.spcs.image_registry.manager.RegistryManager.get_registry_url" +) +@mock.patch("snowflake.cli.plugins.spcs.image_registry.manager.subprocess.check_output") +def test_docker_registry_login_docker_not_installed_error( + mock_check_output, mock_get_url, mock_get_token +): + mock_get_token.return_value = { + "token": "ver:1-hint:abc", + "expires_in": 3600, + } + + mock_check_output.side_effect = FileNotFoundError() + with pytest.raises(ClickException) as e: + RegistryManager().docker_registry_login() + + assert e.value.message == "Docker is not installed."