generated from john/python-template
78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
"""Tests for the jobs page route."""
|
|
|
|
from pathlib import Path
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
|
|
from transcription.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 "Transcription Jobs" in response.text
|
|
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, transcript_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,
|
|
transcript_revisions=[
|
|
(0, None, "first attempt failed"),
|
|
(1, "hello", None),
|
|
],
|
|
source_file=fixture_path,
|
|
)
|
|
|
|
response = client.get(f"/ui/jobs/{job_id}")
|
|
|
|
assert response.status_code == 200
|
|
assert "Job Detail" in response.text
|
|
assert "Job overview" in response.text
|
|
assert "detail.pdf" in response.text
|
|
assert "Transcripts" in response.text
|
|
assert "Revision" in response.text
|
|
assert "first attempt failed" in response.text
|
|
assert "hello" 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
|