diff --git a/api/src/backend/api/tests/test_utils.py b/api/src/backend/api/tests/test_utils.py index bfeec54852..02a97249c6 100644 --- a/api/src/backend/api/tests/test_utils.py +++ b/api/src/backend/api/tests/test_utils.py @@ -1,25 +1,24 @@ from datetime import datetime, timedelta, timezone -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch import pytest +from rest_framework.exceptions import NotFound, ValidationError + +from api.db_router import MainRouter +from api.exceptions import InvitationTokenExpiredException +from api.models import Invitation, Provider +from api.utils import ( + get_prowler_provider_kwargs, + initialize_prowler_provider, + merge_dicts, + prowler_provider_connection_test, + return_prowler_provider, + validate_invitation, +) from prowler.providers.aws.aws_provider import AwsProvider from prowler.providers.azure.azure_provider import AzureProvider from prowler.providers.gcp.gcp_provider import GcpProvider from prowler.providers.kubernetes.kubernetes_provider import KubernetesProvider -from rest_framework.exceptions import ValidationError, NotFound - -from api.db_router import MainRouter -from api.exceptions import InvitationTokenExpiredException -from api.models import Invitation -from api.models import Provider -from api.utils import ( - merge_dicts, - return_prowler_provider, - initialize_prowler_provider, - prowler_provider_connection_test, - get_prowler_provider_kwargs, -) -from api.utils import validate_invitation class TestMergeDicts: @@ -144,6 +143,18 @@ class TestProwlerProviderConnectionTest: key="value", provider_id="1234567890", raise_on_exception=False ) + @pytest.mark.django_db + @patch("api.utils.return_prowler_provider") + def test_prowler_provider_connection_test_without_secret( + self, mock_return_prowler_provider, providers_fixture + ): + mock_return_prowler_provider.return_value = MagicMock() + connection = prowler_provider_connection_test(providers_fixture[0]) + + assert connection.is_connected is False + assert isinstance(connection.error, Provider.secret.RelatedObjectDoesNotExist) + assert str(connection.error) == "Provider has no secret." + class TestGetProwlerProviderKwargs: @pytest.mark.parametrize( diff --git a/api/src/backend/api/utils.py b/api/src/backend/api/utils.py index 9dd86daeaf..31d009dba5 100644 --- a/api/src/backend/api/utils.py +++ b/api/src/backend/api/utils.py @@ -130,7 +130,10 @@ def prowler_provider_connection_test(provider: Provider) -> Connection: Connection: A connection object representing the result of the connection test for the specified provider. """ prowler_provider = return_prowler_provider(provider) - prowler_provider_kwargs = provider.secret.secret + try: + prowler_provider_kwargs = provider.secret.secret + except Provider.secret.RelatedObjectDoesNotExist as secret_error: + return Connection(is_connected=False, error=secret_error) return prowler_provider.test_connection( **prowler_provider_kwargs, provider_id=provider.uid, raise_on_exception=False )