feat: persist ocr_quality_score and use it for numeric filtering

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-01 13:46:43 +00:00
parent 705b970522
commit 83c3405c98
8 changed files with 120 additions and 42 deletions
+58 -32
View File
@@ -464,57 +464,83 @@ class TestBulkReprocessCloudOcr:
class TestOcrQualityFilter:
"""Tests for the ocr_quality filter on the /files view."""
def test_ocr_quality_no_ocr_filter(self, client: TestClient, db_session):
"""Files without OCR text appear when filtering no_ocr."""
rec_no_ocr = FileRecord(
filehash="hash_noocr1",
original_filename="no_ocr.pdf",
local_filename="/tmp/no_ocr.pdf",
def test_ocr_quality_poor_filter(self, client: TestClient, db_session):
"""Files with a low ocr_quality_score appear when filtering poor."""
rec_poor = FileRecord(
filehash="hash_poor1",
original_filename="poor_quality.pdf",
local_filename="/tmp/poor_quality.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_text=None,
ocr_quality_score=40,
)
rec_has_ocr = FileRecord(
filehash="hash_hasocr1",
original_filename="has_ocr.pdf",
local_filename="/tmp/has_ocr.pdf",
rec_good = FileRecord(
filehash="hash_good1",
original_filename="good_quality.pdf",
local_filename="/tmp/good_quality.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_text="Some extracted text",
ocr_quality_score=95,
)
db_session.add_all([rec_no_ocr, rec_has_ocr])
db_session.add_all([rec_poor, rec_good])
db_session.commit()
response = client.get("/files?ocr_quality=no_ocr")
response = client.get("/files?ocr_quality=poor")
assert response.status_code == 200
assert "no_ocr.pdf" in response.text
assert "has_ocr.pdf" not in response.text
assert "poor_quality.pdf" in response.text
assert "good_quality.pdf" not in response.text
def test_ocr_quality_has_ocr_filter(self, client: TestClient, db_session):
"""Files with OCR text appear when filtering has_ocr."""
rec_no_ocr = FileRecord(
filehash="hash_noocr2",
original_filename="no_ocr2.pdf",
local_filename="/tmp/no_ocr2.pdf",
def test_ocr_quality_good_filter(self, client: TestClient, db_session):
"""Files with a high ocr_quality_score appear when filtering good."""
rec_poor = FileRecord(
filehash="hash_poor2",
original_filename="poor_quality2.pdf",
local_filename="/tmp/poor_quality2.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_text=None,
ocr_quality_score=40,
)
rec_has_ocr = FileRecord(
filehash="hash_hasocr2",
original_filename="has_ocr2.pdf",
local_filename="/tmp/has_ocr2.pdf",
rec_good = FileRecord(
filehash="hash_good2",
original_filename="good_quality2.pdf",
local_filename="/tmp/good_quality2.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_text="Meaningful extracted text",
ocr_quality_score=95,
)
db_session.add_all([rec_no_ocr, rec_has_ocr])
db_session.add_all([rec_poor, rec_good])
db_session.commit()
response = client.get("/files?ocr_quality=has_ocr")
response = client.get("/files?ocr_quality=good")
assert response.status_code == 200
assert "has_ocr2.pdf" in response.text
assert "no_ocr2.pdf" not in response.text
assert "good_quality2.pdf" in response.text
assert "poor_quality2.pdf" not in response.text
def test_ocr_quality_unchecked_filter(self, client: TestClient, db_session):
"""Files with no score appear when filtering unchecked."""
rec_unchecked = FileRecord(
filehash="hash_unch1",
original_filename="unchecked.pdf",
local_filename="/tmp/unchecked.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_quality_score=None,
)
rec_scored = FileRecord(
filehash="hash_scored1",
original_filename="scored.pdf",
local_filename="/tmp/scored.pdf",
file_size=1024,
mime_type="application/pdf",
ocr_quality_score=90,
)
db_session.add_all([rec_unchecked, rec_scored])
db_session.commit()
response = client.get("/files?ocr_quality=unchecked")
assert response.status_code == 200
assert "unchecked.pdf" in response.text
assert "scored.pdf" not in response.text
def test_ocr_quality_no_filter(self, client: TestClient, db_session):
"""All files appear when no ocr_quality filter is applied."""