1+ import pytest
2+ import sys
3+ import os
4+ from unittest .mock import patch , MagicMock
5+
6+ # Ensure src/backend is on the Python path for imports
7+ sys .path .insert (0 , os .path .abspath (os .path .join (os .path .dirname (__file__ ), '..' , '..' )))
8+
9+ import helpers .azure_credential_utils as azure_credential_utils
10+
11+ # Synchronous tests
12+
13+ @patch ("helpers.azure_credential_utils.os.getenv" )
14+ @patch ("helpers.azure_credential_utils.DefaultAzureCredential" )
15+ @patch ("helpers.azure_credential_utils.ManagedIdentityCredential" )
16+ def test_get_azure_credential_dev_env (mock_managed_identity_credential , mock_default_azure_credential , mock_getenv ):
17+ """Test get_azure_credential in dev environment."""
18+ mock_getenv .return_value = "dev"
19+ mock_default_credential = MagicMock ()
20+ mock_default_azure_credential .return_value = mock_default_credential
21+
22+ credential = azure_credential_utils .get_azure_credential ()
23+
24+ mock_getenv .assert_called_once_with ("APP_ENV" , "prod" )
25+ mock_default_azure_credential .assert_called_once ()
26+ mock_managed_identity_credential .assert_not_called ()
27+ assert credential == mock_default_credential
28+
29+ @patch ("helpers.azure_credential_utils.os.getenv" )
30+ @patch ("helpers.azure_credential_utils.DefaultAzureCredential" )
31+ @patch ("helpers.azure_credential_utils.ManagedIdentityCredential" )
32+ def test_get_azure_credential_non_dev_env (mock_managed_identity_credential , mock_default_azure_credential , mock_getenv ):
33+ """Test get_azure_credential in non-dev environment."""
34+ mock_getenv .return_value = "prod"
35+ mock_managed_credential = MagicMock ()
36+ mock_managed_identity_credential .return_value = mock_managed_credential
37+ credential = azure_credential_utils .get_azure_credential (client_id = "test-client-id" )
38+
39+ mock_getenv .assert_called_once_with ("APP_ENV" , "prod" )
40+ mock_managed_identity_credential .assert_called_once_with (client_id = "test-client-id" )
41+ mock_default_azure_credential .assert_not_called ()
42+ assert credential == mock_managed_credential
43+
44+ # Asynchronous tests
45+
46+ @pytest .mark .asyncio
47+ @patch ("helpers.azure_credential_utils.os.getenv" )
48+ @patch ("helpers.azure_credential_utils.AioDefaultAzureCredential" )
49+ @patch ("helpers.azure_credential_utils.AioManagedIdentityCredential" )
50+ async def test_get_azure_credential_async_dev_env (mock_aio_managed_identity_credential , mock_aio_default_azure_credential , mock_getenv ):
51+ """Test get_azure_credential_async in dev environment."""
52+ mock_getenv .return_value = "dev"
53+ mock_aio_default_credential = MagicMock ()
54+ mock_aio_default_azure_credential .return_value = mock_aio_default_credential
55+
56+ credential = await azure_credential_utils .get_azure_credential_async ()
57+
58+ mock_getenv .assert_called_once_with ("APP_ENV" , "prod" )
59+ mock_aio_default_azure_credential .assert_called_once ()
60+ mock_aio_managed_identity_credential .assert_not_called ()
61+ assert credential == mock_aio_default_credential
62+
63+ @pytest .mark .asyncio
64+ @patch ("helpers.azure_credential_utils.os.getenv" )
65+ @patch ("helpers.azure_credential_utils.AioDefaultAzureCredential" )
66+ @patch ("helpers.azure_credential_utils.AioManagedIdentityCredential" )
67+ async def test_get_azure_credential_async_non_dev_env (mock_aio_managed_identity_credential , mock_aio_default_azure_credential , mock_getenv ):
68+ """Test get_azure_credential_async in non-dev environment."""
69+ mock_getenv .return_value = "prod"
70+ mock_aio_managed_credential = MagicMock ()
71+ mock_aio_managed_identity_credential .return_value = mock_aio_managed_credential
72+
73+ credential = await azure_credential_utils .get_azure_credential_async (client_id = "test-client-id" )
74+
75+ mock_getenv .assert_called_once_with ("APP_ENV" , "prod" )
76+ mock_aio_managed_identity_credential .assert_called_once_with (client_id = "test-client-id" )
77+ mock_aio_default_azure_credential .assert_not_called ()
78+ assert credential == mock_aio_managed_credential
0 commit comments