Skip to content

Commit f2cdc56

Browse files
feat: added test cases for auth_utils and utils file
1 parent 3f531bf commit f2cdc56

4 files changed

Lines changed: 139 additions & 18 deletions

File tree

src/tests/backend/api/auth/__init__.py

Whitespace-only changes.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import base64
2+
import json
3+
from unittest.mock import MagicMock
4+
5+
from api.auth.auth_utils import UserDetails, get_authenticated_user, get_tenant_id
6+
7+
from fastapi import HTTPException, Request
8+
9+
import pytest
10+
11+
12+
def test_get_tenant_id_valid():
13+
payload = {"tid": "tenant123"}
14+
encoded = base64.b64encode(json.dumps(payload).encode("utf-8")).decode("utf-8")
15+
16+
result = get_tenant_id(encoded)
17+
assert result == "tenant123"
18+
19+
20+
def test_get_tenant_id_invalid():
21+
invalid_b64 = "invalid_base64_string"
22+
result = get_tenant_id(invalid_b64)
23+
assert result == ""
24+
25+
26+
def test_user_details_initialization_with_tenant():
27+
payload = {"tid": "tenant456"}
28+
encoded = base64.b64encode(json.dumps(payload).encode("utf-8")).decode("utf-8")
29+
30+
user_data = {
31+
"user_principal_id": "user1",
32+
"user_name": "John Doe",
33+
"auth_provider": "aad",
34+
"auth_token": "fake_token",
35+
"client_principal_b64": encoded,
36+
}
37+
38+
user = UserDetails(user_data)
39+
assert user.user_principal_id == "user1"
40+
assert user.user_name == "John Doe"
41+
assert user.tenant_id == "tenant456"
42+
43+
44+
def test_user_details_initialization_without_tenant():
45+
user_data = {
46+
"user_principal_id": "user2",
47+
"user_name": "Jane Doe",
48+
"auth_provider": "aad",
49+
"auth_token": "fake_token",
50+
"client_principal_b64": "your_base_64_encoded_token",
51+
}
52+
53+
user = UserDetails(user_data)
54+
assert user.tenant_id is None
55+
56+
57+
def test_get_authenticated_user_valid():
58+
headers = {
59+
"x-ms-client-principal-id": "user3",
60+
}
61+
62+
mock_request = MagicMock(spec=Request)
63+
mock_request.headers = headers
64+
65+
user = get_authenticated_user(mock_request)
66+
assert isinstance(user, UserDetails)
67+
assert user.user_principal_id == "user3"
68+
69+
70+
def test_get_authenticated_user_raises_http_exception(monkeypatch):
71+
# Mocking a development environment with no user principal in sample_user
72+
sample_user_mock = {"some-header": "some-value"}
73+
74+
monkeypatch.setattr("api.auth.auth_utils.sample_user", sample_user_mock)
75+
76+
mock_request = MagicMock(spec=Request)
77+
mock_request.headers = {}
78+
79+
with pytest.raises(HTTPException) as exc_info:
80+
get_authenticated_user(mock_request)
81+
82+
assert exc_info.value.status_code == 401
83+
assert exc_info.value.detail == "User not authenticated"

src/tests/backend/common/database/cosmosdb_test.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,24 @@
1-
import os
2-
import sys
3-
# Add backend directory to sys.path
4-
sys.path.insert(
5-
0,
6-
os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../..", "backend")),
7-
)
8-
from datetime import datetime, timezone # noqa: E402
9-
from unittest import mock # noqa: E402
10-
from unittest.mock import AsyncMock # noqa: E402
11-
from uuid import uuid4 # noqa: E402
1+
from datetime import datetime, timezone
2+
from unittest import mock
3+
from unittest.mock import AsyncMock
4+
from uuid import uuid4
125

13-
from azure.cosmos.aio import CosmosClient # noqa: E402
14-
from azure.cosmos.exceptions import CosmosResourceExistsError # noqa: E402
6+
from azure.cosmos.aio import CosmosClient
7+
from azure.cosmos.exceptions import CosmosResourceExistsError
158

16-
from common.database.cosmosdb import ( # noqa: E402
9+
from common.database.cosmosdb import (
1710
CosmosDBClient,
1811
)
19-
from common.models.api import ( # noqa: E402
12+
from common.models.api import (
2013
AgentType,
2114
AuthorRole,
2215
BatchRecord,
2316
FileRecord,
2417
LogType,
25-
ProcessStatus,
26-
) # noqa: E402
18+
ProcessStatus
19+
)
2720

28-
import pytest # noqa: E402
21+
import pytest
2922

3023
# Mocked data for the test
3124
endpoint = "https://fake.cosmosdb.azure.com"
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from unittest import mock
2+
3+
import pytest
4+
5+
from sql_agents.helpers.utils import get_prompt, is_text
6+
7+
8+
def test_get_prompt_valid_agent_type():
9+
agent_type = "agent1"
10+
11+
# Mock the file reading
12+
with mock.patch("builtins.open", mock.mock_open(read_data="This is the prompt")):
13+
prompt = get_prompt(agent_type)
14+
15+
# Assert the prompt returned is correct
16+
assert prompt == "This is the prompt"
17+
18+
19+
def test_get_prompt_invalid_agent_type():
20+
agent_type = "invalid-agent!" # Invalid agent type with a non-alphanumeric character
21+
22+
# Expect a ValueError to be raised for an invalid agent type
23+
with pytest.raises(ValueError):
24+
get_prompt(agent_type)
25+
26+
27+
def test_get_prompt_file_not_found():
28+
agent_type = "agent1"
29+
30+
# Mock os.path.join and the file not being found
31+
with mock.patch("builtins.open", mock.mock_open()) as mock_file:
32+
mock_file.side_effect = FileNotFoundError
33+
with pytest.raises(FileNotFoundError):
34+
get_prompt(agent_type)
35+
36+
37+
# Test for the is_text function
38+
def test_is_text_empty_string():
39+
"""Test when the content is an empty string."""
40+
assert not is_text("")
41+
42+
43+
def test_is_text_non_empty_string():
44+
"""Test when the content is a non-empty string."""
45+
assert is_text("Hello, world!")

0 commit comments

Comments
 (0)