generated from john/python-template
108 lines
4.0 KiB
Python
108 lines
4.0 KiB
Python
"""Tests for the jobs page route."""
|
|
|
|
from pathlib import Path
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from transcription.db.models import JobStatus
|
|
|
|
|
|
@pytest.mark.integration
|
|
class TestPageRendering:
|
|
"""Verify jobs routes render correctly with real app wiring."""
|
|
|
|
def test_jobs_page_renders_empty_state(self, app_client):
|
|
"""GET /ui/jobs renders the page and empty-state text when no jobs exist."""
|
|
_, client = app_client
|
|
response = client.get("/ui/jobs")
|
|
|
|
assert response.status_code == 200
|
|
assert "No jobs yet." in response.text
|
|
|
|
def test_jobs_page_lists_seeded_jobs(self, app_client, seed_job):
|
|
"""GET /ui/jobs lists seeded jobs from the in-memory database."""
|
|
_, client = app_client
|
|
seed_job(filename="sample.pdf", status=JobStatus.TRANSCRIBED, transcription_text="done")
|
|
|
|
response = client.get("/ui/jobs")
|
|
|
|
assert response.status_code == 200
|
|
assert "sample.pdf" in response.text
|
|
assert "transcribed" in response.text
|
|
|
|
def test_job_detail_page_renders_seeded_job(self, app_client, seed_job):
|
|
"""GET /ui/jobs/{job_id} renders detail content for a real seeded job."""
|
|
_, client = app_client
|
|
fixture_path = Path(__file__).resolve().parents[1] / "fixtures" / "images" / "valid" / "single_page_pdf.pdf"
|
|
job_id = seed_job(
|
|
filename="detail.pdf",
|
|
status=JobStatus.TRANSCRIBED,
|
|
transcription_text="original text",
|
|
revision_text="hello",
|
|
source_file=fixture_path,
|
|
)
|
|
|
|
response = client.get(f"/ui/jobs/{job_id}")
|
|
|
|
assert response.status_code == 200
|
|
assert "Original Transcription" in response.text
|
|
assert "detail.pdf" in response.text
|
|
assert "Revision" in response.text
|
|
assert "Revision" in response.text
|
|
assert "hello" in response.text
|
|
assert "original text" in response.text
|
|
assert "Document preview" in response.text
|
|
assert "/uploads/detail.pdf" in response.text
|
|
|
|
def test_job_detail_page_rejects_invalid_id(self, app_client):
|
|
"""GET /ui/jobs/{job_id} shows validation feedback for malformed IDs."""
|
|
_, client = app_client
|
|
response = client.get("/ui/jobs/not-a-uuid")
|
|
|
|
assert response.status_code == 200
|
|
assert "Invalid job id" in response.text
|
|
|
|
def test_job_detail_page_handles_missing_job(self, app_client):
|
|
"""GET /ui/jobs/{job_id} shows not-found state for unknown IDs."""
|
|
_, client = app_client
|
|
missing_id = uuid4()
|
|
response = client.get(f"/ui/jobs/{missing_id}")
|
|
|
|
assert response.status_code == 200
|
|
assert "Job not found" in response.text
|
|
|
|
def test_job_detail_page_shows_revision_editor_when_none_exists(self, app_client, seed_job):
|
|
"""GET /ui/jobs/{job_id} renders revision editor and create action for sources with no revision."""
|
|
_, client = app_client
|
|
job_id = seed_job(
|
|
filename="no-revision.pdf",
|
|
status=JobStatus.TRANSCRIBED,
|
|
transcription_text="original text",
|
|
revision_text=None,
|
|
)
|
|
|
|
response = client.get(f"/ui/jobs/{job_id}")
|
|
|
|
assert response.status_code == 200
|
|
assert "Revision Editor" in response.text
|
|
assert "Create revision" in response.text
|
|
assert "No revision exists for this source." in response.text
|
|
|
|
def test_job_detail_page_shows_update_action_for_existing_revision(self, app_client, seed_job):
|
|
"""GET /ui/jobs/{job_id} renders revision editor with update action when revision exists."""
|
|
_, client = app_client
|
|
job_id = seed_job(
|
|
filename="with-revision.pdf",
|
|
status=JobStatus.TRANSCRIBED,
|
|
transcription_text="original text",
|
|
revision_text="hello",
|
|
)
|
|
|
|
response = client.get(f"/ui/jobs/{job_id}")
|
|
|
|
assert response.status_code == 200
|
|
assert "Revision Editor" in response.text
|
|
assert "Update revision" in response.text
|
|
assert "hello" in response.text
|