generated from john/python-template
V5.1 Modify Person table: split full name into first & last, added tags support
Quality Gate / gate (push) Failing after 11s
Quality Gate / gate (push) Failing after 11s
This commit is contained in:
+52
-6
@@ -20,6 +20,7 @@ from transcription.db import dispose_database_runtime
|
||||
from transcription.db import initialize_database_runtime
|
||||
from transcription.db import reconcile_canonical_media_paths
|
||||
from transcription.db import reconcile_legacy_job_source_columns
|
||||
from transcription.db import reconcile_person_name_columns
|
||||
from transcription.db import session_scope
|
||||
from transcription.db.models import DocumentType
|
||||
from transcription.db.models import PersonRole
|
||||
@@ -55,6 +56,7 @@ async def test_create_all_creates_expected_tables(tmp_path):
|
||||
assert "person_role" in table_names
|
||||
assert "document_person" in table_names
|
||||
assert "document_tag" in table_names
|
||||
assert "person_tag" in table_names
|
||||
assert "job" in table_names
|
||||
assert "source" in table_names
|
||||
assert "job_source" in table_names
|
||||
@@ -141,7 +143,7 @@ async def test_create_all_declares_hot_path_indexes(tmp_path):
|
||||
database = inspect(sync_connection)
|
||||
indexes = {
|
||||
table: [index["column_names"] for index in database.get_indexes(table)]
|
||||
for table in ("job", "source", "job_source", "document", "document_person", "document_tag")
|
||||
for table in ("job", "source", "job_source", "document", "document_person", "document_tag", "person_tag")
|
||||
}
|
||||
job_source_unique = [
|
||||
constraint["column_names"]
|
||||
@@ -151,9 +153,13 @@ async def test_create_all_declares_hot_path_indexes(tmp_path):
|
||||
constraint["column_names"]
|
||||
for constraint in database.get_unique_constraints("document_tag")
|
||||
]
|
||||
return indexes, job_source_unique, document_tag_unique
|
||||
person_tag_unique = [
|
||||
constraint["column_names"]
|
||||
for constraint in database.get_unique_constraints("person_tag")
|
||||
]
|
||||
return indexes, job_source_unique, document_tag_unique, person_tag_unique
|
||||
|
||||
indexes, job_source_unique, document_tag_unique = await connection.run_sync(collect)
|
||||
indexes, job_source_unique, document_tag_unique, person_tag_unique = await connection.run_sync(collect)
|
||||
|
||||
assert ["status", "date_created"] in indexes["job"]
|
||||
assert ["document_id"] in indexes["job"]
|
||||
@@ -168,6 +174,46 @@ async def test_create_all_declares_hot_path_indexes(tmp_path):
|
||||
assert ["document_id"] in indexes["document_tag"]
|
||||
assert ["tag_id"] in indexes["document_tag"]
|
||||
assert ["document_id", "tag_id"] in document_tag_unique
|
||||
assert ["person_id"] in indexes["person_tag"]
|
||||
assert ["tag_id"] in indexes["person_tag"]
|
||||
assert ["person_id", "tag_id"] in person_tag_unique
|
||||
finally:
|
||||
await dispose_database_runtime()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_reconcile_person_name_columns_backfills_split_names(tmp_path):
|
||||
settings = Settings(
|
||||
openrouter_api_key="test-key",
|
||||
database=SqliteSettings(path=str(tmp_path / "legacy-person-name.db")),
|
||||
environment="test",
|
||||
)
|
||||
runtime = initialize_database_runtime(settings=settings)
|
||||
|
||||
try:
|
||||
await create_all(engine=runtime.engine)
|
||||
async with runtime.engine.begin() as connection:
|
||||
await connection.execute(text('alter table "person" add column "full_name" varchar'))
|
||||
await connection.execute(
|
||||
text(
|
||||
'insert into "person" (id, full_name, given_names, last_name, created_at, updated_at) '
|
||||
"values (:id, :full_name, '', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)"
|
||||
),
|
||||
{"id": "55" * 16, "full_name": "Ada Lovelace"},
|
||||
)
|
||||
|
||||
changed = await reconcile_person_name_columns(engine=runtime.engine)
|
||||
assert changed >= 1
|
||||
|
||||
async with runtime.engine.connect() as connection:
|
||||
row = (
|
||||
await connection.execute(
|
||||
text('select given_names, last_name from "person" where id = :id'),
|
||||
{"id": "55" * 16},
|
||||
)
|
||||
).one()
|
||||
assert row[0] == "Ada"
|
||||
assert row[1] == "Lovelace"
|
||||
finally:
|
||||
await dispose_database_runtime()
|
||||
|
||||
@@ -227,10 +273,10 @@ async def test_reconcile_canonical_media_paths_normalizes_source_and_photo_paths
|
||||
async with runtime.engine.begin() as connection:
|
||||
await connection.execute(
|
||||
text(
|
||||
'insert into "person" (id, full_name, created_at, updated_at) '
|
||||
'values (:id, :full_name, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)'
|
||||
'insert into "person" (id, given_names, last_name, created_at, updated_at) '
|
||||
'values (:id, :given_names, :last_name, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)'
|
||||
),
|
||||
{"id": "11" * 16, "full_name": "Portrait"},
|
||||
{"id": "11" * 16, "given_names": "Portrait", "last_name": "Person"},
|
||||
)
|
||||
await connection.execute(
|
||||
text(
|
||||
|
||||
Reference in New Issue
Block a user