re-structure

This commit is contained in:
Yaojia Wang
2026-02-01 22:55:31 +01:00
parent 400b12a967
commit b602d0a340
176 changed files with 856 additions and 853 deletions

View File

@@ -9,8 +9,8 @@ from datetime import datetime, timezone
from unittest.mock import MagicMock, patch
from uuid import uuid4, UUID
from inference.data.admin_models import AdminAnnotation, AnnotationHistory
from inference.data.repositories.annotation_repository import AnnotationRepository
from backend.data.admin_models import AdminAnnotation, AnnotationHistory
from backend.data.repositories.annotation_repository import AnnotationRepository
class TestAnnotationRepository:
@@ -66,7 +66,7 @@ class TestAnnotationRepository:
def test_create_returns_annotation_id(self, repo):
"""Test create returns annotation ID."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -92,7 +92,7 @@ class TestAnnotationRepository:
def test_create_with_optional_params(self, repo):
"""Test create with optional text_value and confidence."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -124,7 +124,7 @@ class TestAnnotationRepository:
def test_create_default_source_is_manual(self, repo):
"""Test create uses manual as default source."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -153,7 +153,7 @@ class TestAnnotationRepository:
def test_create_batch_returns_ids(self, repo):
"""Test create_batch returns list of annotation IDs."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -195,7 +195,7 @@ class TestAnnotationRepository:
def test_create_batch_default_page_number(self, repo):
"""Test create_batch uses page_number=1 by default."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -224,7 +224,7 @@ class TestAnnotationRepository:
def test_create_batch_with_all_optional_params(self, repo):
"""Test create_batch with all optional parameters."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -259,7 +259,7 @@ class TestAnnotationRepository:
def test_create_batch_empty_list(self, repo):
"""Test create_batch with empty list returns empty."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -275,7 +275,7 @@ class TestAnnotationRepository:
def test_get_returns_annotation(self, repo, sample_annotation):
"""Test get returns annotation when exists."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -289,7 +289,7 @@ class TestAnnotationRepository:
def test_get_returns_none_when_not_found(self, repo):
"""Test get returns None when annotation not found."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = None
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -306,7 +306,7 @@ class TestAnnotationRepository:
def test_get_for_document_returns_all_annotations(self, repo, sample_annotation):
"""Test get_for_document returns all annotations for document."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_annotation]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -319,7 +319,7 @@ class TestAnnotationRepository:
def test_get_for_document_with_page_filter(self, repo, sample_annotation):
"""Test get_for_document filters by page number."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_annotation]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -331,7 +331,7 @@ class TestAnnotationRepository:
def test_get_for_document_returns_empty_list(self, repo):
"""Test get_for_document returns empty list when no annotations."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = []
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -347,7 +347,7 @@ class TestAnnotationRepository:
def test_update_returns_true(self, repo, sample_annotation):
"""Test update returns True when annotation exists."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -363,7 +363,7 @@ class TestAnnotationRepository:
def test_update_returns_false_when_not_found(self, repo):
"""Test update returns False when annotation not found."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = None
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -375,7 +375,7 @@ class TestAnnotationRepository:
def test_update_all_fields(self, repo, sample_annotation):
"""Test update can update all fields."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -412,7 +412,7 @@ class TestAnnotationRepository:
def test_update_partial_fields(self, repo, sample_annotation):
"""Test update only updates provided fields."""
original_x = sample_annotation.x_center
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -433,7 +433,7 @@ class TestAnnotationRepository:
def test_delete_returns_true(self, repo, sample_annotation):
"""Test delete returns True when annotation exists."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -446,7 +446,7 @@ class TestAnnotationRepository:
def test_delete_returns_false_when_not_found(self, repo):
"""Test delete returns False when annotation not found."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = None
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -463,7 +463,7 @@ class TestAnnotationRepository:
def test_delete_for_document_returns_count(self, repo, sample_annotation):
"""Test delete_for_document returns count of deleted annotations."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_annotation]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -476,7 +476,7 @@ class TestAnnotationRepository:
def test_delete_for_document_with_source_filter(self, repo, sample_annotation):
"""Test delete_for_document filters by source."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_annotation]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -488,7 +488,7 @@ class TestAnnotationRepository:
def test_delete_for_document_returns_zero(self, repo):
"""Test delete_for_document returns 0 when no annotations."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = []
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -506,7 +506,7 @@ class TestAnnotationRepository:
def test_verify_marks_annotation_verified(self, repo, sample_annotation):
"""Test verify marks annotation as verified."""
sample_annotation.is_verified = False
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -521,7 +521,7 @@ class TestAnnotationRepository:
def test_verify_returns_none_when_not_found(self, repo):
"""Test verify returns None when annotation not found."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = None
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -538,7 +538,7 @@ class TestAnnotationRepository:
def test_override_updates_annotation(self, repo, sample_annotation):
"""Test override updates annotation and creates history."""
sample_annotation.source = "auto"
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -559,7 +559,7 @@ class TestAnnotationRepository:
def test_override_returns_none_when_not_found(self, repo):
"""Test override returns None when annotation not found."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = None
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -573,7 +573,7 @@ class TestAnnotationRepository:
"""Test override does not change override_source if already manual."""
sample_annotation.source = "manual"
sample_annotation.override_source = None
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -591,7 +591,7 @@ class TestAnnotationRepository:
def test_override_skips_unknown_attributes(self, repo, sample_annotation):
"""Test override ignores unknown attributes."""
sample_annotation.source = "auto"
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_annotation
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -614,7 +614,7 @@ class TestAnnotationRepository:
def test_create_history_returns_history(self, repo):
"""Test create_history returns created history record."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -636,7 +636,7 @@ class TestAnnotationRepository:
def test_create_history_with_minimal_params(self, repo):
"""Test create_history with minimal parameters."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
mock_ctx.return_value.__exit__ = MagicMock(return_value=False)
@@ -659,7 +659,7 @@ class TestAnnotationRepository:
def test_get_history_returns_list(self, repo, sample_history):
"""Test get_history returns list of history records."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_history]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -672,7 +672,7 @@ class TestAnnotationRepository:
def test_get_history_returns_empty_list(self, repo):
"""Test get_history returns empty list when no history."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = []
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -688,7 +688,7 @@ class TestAnnotationRepository:
def test_get_document_history_returns_list(self, repo, sample_history):
"""Test get_document_history returns list of history records."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_history]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -700,7 +700,7 @@ class TestAnnotationRepository:
def test_get_document_history_returns_empty_list(self, repo):
"""Test get_document_history returns empty list when no history."""
with patch("inference.data.repositories.annotation_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.annotation_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = []
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)