Skip to content

Commit 12b09a7

Browse files
committed
ADD Start adding tests for embedding_services"
1 parent 3ffb74a commit 12b09a7

2 files changed

Lines changed: 89 additions & 4 deletions

File tree

server/api/services/embedding_services.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def build_query(user, embedding_vector, document_name=None, guid=None, num_resul
6060
return queryset[:num_results]
6161

6262

63-
def format_results(queryset):
63+
def evaluate_query(queryset):
6464
"""
6565
Evaluate a QuerySet and return a list of result dicts.
6666
@@ -89,7 +89,7 @@ def format_results(queryset):
8989
]
9090

9191

92-
def log_search_usage(
92+
def log_usage(
9393
results, message_data, user, guid, document_name, num_results, encoding_time, db_query_time
9494
):
9595
"""
@@ -190,10 +190,10 @@ def get_closest_embeddings(
190190

191191
db_query_start = time.time()
192192
queryset = build_query(user, embedding_vector, document_name, guid, num_results)
193-
results = format_results(queryset)
193+
results = evaluate_query(queryset)
194194
db_query_time = time.time() - db_query_start
195195

196-
log_search_usage(
196+
log_usage(
197197
results, message_data, user, guid, document_name, num_results, encoding_time, db_query_time
198198
)
199199

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from unittest.mock import MagicMock, patch
2+
3+
from api.services.embedding_services import evaluate_query, log_usage
4+
5+
6+
def test_evaluate_query_maps_fields():
7+
obj = MagicMock()
8+
obj.name = "doc.pdf"
9+
obj.text = "some text"
10+
obj.page_num = 3
11+
obj.chunk_number = 1
12+
obj.distance = 0.42
13+
obj.upload_file.guid = "abc-123"
14+
15+
results = evaluate_query([obj])
16+
17+
assert results == [
18+
{
19+
"name": "doc.pdf",
20+
"text": "some text",
21+
"page_number": 3,
22+
"chunk_number": 1,
23+
"distance": 0.42,
24+
"file_id": "abc-123",
25+
}
26+
]
27+
28+
29+
def test_evaluate_query_none_upload_file():
30+
obj = MagicMock()
31+
obj.name = "doc.pdf"
32+
obj.text = "some text"
33+
obj.page_num = 1
34+
obj.chunk_number = 0
35+
obj.distance = 1.0
36+
obj.upload_file = None
37+
38+
results = evaluate_query([obj])
39+
40+
assert results[0]["file_id"] is None
41+
42+
43+
@patch("api.services.embedding_services.SemanticSearchUsage.objects.create")
44+
def test_log_usage_computes_distance_stats(mock_create):
45+
results = [{"distance": 1.0}, {"distance": 3.0}, {"distance": 2.0}]
46+
user = MagicMock(is_authenticated=True)
47+
48+
log_usage(
49+
results,
50+
message_data="test query",
51+
user=user,
52+
guid=None,
53+
document_name=None,
54+
num_results=10,
55+
encoding_time=0.1,
56+
db_query_time=0.2,
57+
)
58+
59+
mock_create.assert_called_once()
60+
kwargs = mock_create.call_args.kwargs
61+
assert kwargs["min_distance"] == 1.0
62+
assert kwargs["max_distance"] == 3.0
63+
assert kwargs["median_distance"] == 2.0
64+
assert kwargs["num_results_returned"] == 3
65+
66+
67+
@patch(
68+
"api.services.embedding_services.SemanticSearchUsage.objects.create",
69+
side_effect=Exception("DB error"),
70+
)
71+
def test_log_usage_swallows_exceptions(mock_create):
72+
results = [{"distance": 1.0}]
73+
user = MagicMock(is_authenticated=True)
74+
75+
# pytest fails the test if it catches unhandled Exception
76+
log_usage(
77+
results,
78+
message_data="test query",
79+
user=user,
80+
guid=None,
81+
document_name=None,
82+
num_results=10,
83+
encoding_time=0.1,
84+
db_query_time=0.2,
85+
)

0 commit comments

Comments
 (0)