zenith-backend / tests /unit /test_case_repository_performance.py
teoat's picture
Upload folder using huggingface_hub
4ae946d verified
import unittest
from unittest.mock import MagicMock
from app.modules.cases.repository import CaseRepository
from core.database import CaseNote, User
class TestCaseNoteNPlus1(unittest.TestCase):
def test_get_notes_optimized(self):
"""
Verify that fetching notes now uses joinedload (options) to prevent N+1 queries.
"""
# Mock database session
mock_session = MagicMock()
# Setup test data
case_id = "test-case-id"
user1 = User(id="user-1", full_name="User 1")
user2 = User(id="user-2", full_name="User 2")
note1 = CaseNote(id="note-1", case_id=case_id, user_id=user1.id)
note2 = CaseNote(id="note-2", case_id=case_id, user_id=user2.id)
# Mock the initial query for notes
mock_query = mock_session.query.return_value
# In the optimized version, we expect .options(...) to be called
mock_options = mock_query.options.return_value
mock_filter = mock_options.filter.return_value
mock_order = mock_filter.order_by.return_value
mock_order.all.return_value = [note1, note2]
repo = CaseRepository(mock_session)
repo.get_notes(case_id)
# Initial query should be called
mock_session.query.assert_called_with(CaseNote)
# Check if 'options' was called on the query object
has_options_call = False
# We need to check calls on mock_query
for call_obj in mock_query.mock_calls:
if call_obj[0] == "options":
has_options_call = True
self.assertTrue(has_options_call, "options() SHOULD be called now (confirming optimized state)")
print("Confirmed: options() IS called in get_notes")
if __name__ == "__main__":
unittest.main()