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, timedelta
from unittest.mock import MagicMock, patch
from uuid import uuid4, UUID
from inference.data.admin_models import TrainingTask, TrainingLog, TrainingDocumentLink
from inference.data.repositories.training_task_repository import TrainingTaskRepository
from backend.data.admin_models import TrainingTask, TrainingLog, TrainingDocumentLink
from backend.data.repositories.training_task_repository import TrainingTaskRepository
class TestTrainingTaskRepository:
@@ -65,7 +65,7 @@ class TestTrainingTaskRepository:
def test_create_returns_task_id(self, repo):
"""Test create returns task ID."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -82,7 +82,7 @@ class TestTrainingTaskRepository:
def test_create_with_all_params(self, repo):
"""Test create with all parameters."""
scheduled_time = datetime.now(timezone.utc) + timedelta(hours=1)
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -108,7 +108,7 @@ class TestTrainingTaskRepository:
def test_create_pending_status_when_not_scheduled(self, repo):
"""Test create sets pending status when no scheduled_at."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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 TestTrainingTaskRepository:
def test_create_scheduled_status_when_scheduled(self, repo):
"""Test create sets scheduled status when scheduled_at is provided."""
scheduled_time = datetime.now(timezone.utc) + timedelta(hours=1)
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -144,7 +144,7 @@ class TestTrainingTaskRepository:
def test_get_returns_task(self, repo, sample_task):
"""Test get returns task when exists."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -158,7 +158,7 @@ class TestTrainingTaskRepository:
def test_get_returns_none_when_not_found(self, repo):
"""Test get returns None when task not found."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -175,7 +175,7 @@ class TestTrainingTaskRepository:
def test_get_by_token_returns_task(self, repo, sample_task):
"""Test get_by_token returns task (delegates to get)."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -187,7 +187,7 @@ class TestTrainingTaskRepository:
def test_get_by_token_without_token_param(self, repo, sample_task):
"""Test get_by_token works without token parameter."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -203,7 +203,7 @@ class TestTrainingTaskRepository:
def test_get_paginated_returns_tasks_and_total(self, repo, sample_task):
"""Test get_paginated returns list of tasks and total count."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.one.return_value = 1
mock_session.exec.return_value.all.return_value = [sample_task]
@@ -217,7 +217,7 @@ class TestTrainingTaskRepository:
def test_get_paginated_with_status_filter(self, repo, sample_task):
"""Test get_paginated filters by status."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.one.return_value = 1
mock_session.exec.return_value.all.return_value = [sample_task]
@@ -230,7 +230,7 @@ class TestTrainingTaskRepository:
def test_get_paginated_with_pagination(self, repo, sample_task):
"""Test get_paginated with limit and offset."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.one.return_value = 50
mock_session.exec.return_value.all.return_value = [sample_task]
@@ -243,7 +243,7 @@ class TestTrainingTaskRepository:
def test_get_paginated_empty_results(self, repo):
"""Test get_paginated with no results."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.one.return_value = 0
mock_session.exec.return_value.all.return_value = []
@@ -261,7 +261,7 @@ class TestTrainingTaskRepository:
def test_get_pending_returns_pending_tasks(self, repo, sample_task):
"""Test get_pending returns pending and scheduled tasks."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_task]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -273,7 +273,7 @@ class TestTrainingTaskRepository:
def test_get_pending_returns_empty_list(self, repo):
"""Test get_pending returns empty list when no pending tasks."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -289,7 +289,7 @@ class TestTrainingTaskRepository:
def test_update_status_updates_task(self, repo, sample_task):
"""Test update_status updates task status."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -302,7 +302,7 @@ class TestTrainingTaskRepository:
def test_update_status_sets_started_at_for_running(self, repo, sample_task):
"""Test update_status sets started_at when status is running."""
sample_task.started_at = None
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -315,7 +315,7 @@ class TestTrainingTaskRepository:
def test_update_status_sets_completed_at_for_completed(self, repo, sample_task):
"""Test update_status sets completed_at when status is completed."""
sample_task.completed_at = None
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -328,7 +328,7 @@ class TestTrainingTaskRepository:
def test_update_status_sets_completed_at_for_failed(self, repo, sample_task):
"""Test update_status sets completed_at when status is failed."""
sample_task.completed_at = None
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -341,7 +341,7 @@ class TestTrainingTaskRepository:
def test_update_status_with_result_metrics(self, repo, sample_task):
"""Test update_status with result metrics."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -357,7 +357,7 @@ class TestTrainingTaskRepository:
def test_update_status_with_model_path(self, repo, sample_task):
"""Test update_status with model path."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -373,7 +373,7 @@ class TestTrainingTaskRepository:
def test_update_status_not_found(self, repo):
"""Test update_status does nothing when task not found."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -390,7 +390,7 @@ class TestTrainingTaskRepository:
def test_cancel_returns_true_for_pending(self, repo, sample_task):
"""Test cancel returns True for pending task."""
sample_task.status = "pending"
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -404,7 +404,7 @@ class TestTrainingTaskRepository:
def test_cancel_returns_true_for_scheduled(self, repo, sample_task):
"""Test cancel returns True for scheduled task."""
sample_task.status = "scheduled"
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -418,7 +418,7 @@ class TestTrainingTaskRepository:
def test_cancel_returns_false_for_running(self, repo, sample_task):
"""Test cancel returns False for running task."""
sample_task.status = "running"
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.get.return_value = sample_task
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -430,7 +430,7 @@ class TestTrainingTaskRepository:
def test_cancel_returns_false_when_not_found(self, repo):
"""Test cancel returns False when task not found."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -446,7 +446,7 @@ class TestTrainingTaskRepository:
def test_add_log_creates_log_entry(self, repo):
"""Test add_log creates a log entry."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -464,7 +464,7 @@ class TestTrainingTaskRepository:
def test_add_log_with_details(self, repo):
"""Test add_log with details."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -485,7 +485,7 @@ class TestTrainingTaskRepository:
def test_get_logs_returns_list(self, repo, sample_log):
"""Test get_logs returns list of logs."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_log]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -498,7 +498,7 @@ class TestTrainingTaskRepository:
def test_get_logs_with_pagination(self, repo, sample_log):
"""Test get_logs with limit and offset."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_log]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -510,7 +510,7 @@ class TestTrainingTaskRepository:
def test_get_logs_returns_empty_list(self, repo):
"""Test get_logs returns empty list when no logs."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -526,7 +526,7 @@ class TestTrainingTaskRepository:
def test_create_document_link_returns_link(self, repo):
"""Test create_document_link returns created link."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -543,7 +543,7 @@ class TestTrainingTaskRepository:
def test_create_document_link_with_snapshot(self, repo):
"""Test create_document_link with annotation snapshot."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -564,7 +564,7 @@ class TestTrainingTaskRepository:
def test_get_document_links_returns_list(self, repo, sample_link):
"""Test get_document_links returns list of links."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_link]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -576,7 +576,7 @@ class TestTrainingTaskRepository:
def test_get_document_links_returns_empty_list(self, repo):
"""Test get_document_links returns empty list when no links."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)
@@ -592,7 +592,7 @@ class TestTrainingTaskRepository:
def test_get_document_training_tasks_returns_list(self, repo, sample_link):
"""Test get_document_training_tasks returns list of links."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_repository.get_session_context") as mock_ctx:
mock_session = MagicMock()
mock_session.exec.return_value.all.return_value = [sample_link]
mock_ctx.return_value.__enter__ = MagicMock(return_value=mock_session)
@@ -604,7 +604,7 @@ class TestTrainingTaskRepository:
def test_get_document_training_tasks_returns_empty_list(self, repo):
"""Test get_document_training_tasks returns empty list when no links."""
with patch("inference.data.repositories.training_task_repository.get_session_context") as mock_ctx:
with patch("backend.data.repositories.training_task_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)