generated from john/python-template
@@ -1,5 +1,7 @@
|
||||
"""Tests for the sources page routes and Source model properties."""
|
||||
|
||||
from datetime import UTC
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from uuid import uuid4
|
||||
|
||||
@@ -10,6 +12,7 @@ from transcription.db import session_scope
|
||||
from transcription.db.loading import orm_attribute
|
||||
from transcription.db.loading import selectinload
|
||||
from transcription.db.models import Document
|
||||
from transcription.db.models import ExecutionAttempt
|
||||
from transcription.db.models import Job
|
||||
from transcription.db.models import JobSource
|
||||
from transcription.db.models import JobSourceStatus
|
||||
@@ -71,6 +74,51 @@ class TestSourceModelProperties:
|
||||
assert source.latest_error_detail == "Timeout during OCR parsing"
|
||||
assert source.latest_job_source is not None
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_latest_error_detail_ignores_older_failures_when_latest_attempt_succeeds(self):
|
||||
source = Source(
|
||||
document_id=uuid4(),
|
||||
page_number=1,
|
||||
upload_name="page_one.png",
|
||||
filename="stored_page_one.png",
|
||||
file_path="/tmp/stored_page_one.png",
|
||||
file_hash="b" * 64,
|
||||
file_size_bytes=1,
|
||||
)
|
||||
job_source = JobSource(
|
||||
job_id=uuid4(),
|
||||
source_id=source.id,
|
||||
status=JobSourceStatus.TRANSCRIBED,
|
||||
)
|
||||
failed_attempt = ExecutionAttempt(
|
||||
job_source_id=job_source.id,
|
||||
job_id=job_source.job_id,
|
||||
source_id=source.id,
|
||||
attempt_number=1,
|
||||
status=JobSourceStatus.FAILED,
|
||||
provider="openrouter",
|
||||
error_detail="Provider timeout",
|
||||
started_at=datetime.now(UTC),
|
||||
finished_at=datetime.now(UTC),
|
||||
duration_ms=10,
|
||||
)
|
||||
successful_attempt = ExecutionAttempt(
|
||||
job_source_id=job_source.id,
|
||||
job_id=job_source.job_id,
|
||||
source_id=source.id,
|
||||
attempt_number=2,
|
||||
status=JobSourceStatus.TRANSCRIBED,
|
||||
provider="openrouter",
|
||||
error_detail=None,
|
||||
started_at=datetime.now(UTC),
|
||||
finished_at=datetime.now(UTC),
|
||||
duration_ms=10,
|
||||
)
|
||||
job_source.execution_attempts = [failed_attempt, successful_attempt]
|
||||
source.job_sources = [job_source]
|
||||
|
||||
assert source.latest_error_detail is None
|
||||
|
||||
|
||||
# --- Integration Tests for Page Rendering ---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user