Spaces:
Paused
Paused
| 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() | |