generated from john/python-template
V4.4 Complete
This commit is contained in:
@@ -6,8 +6,8 @@ import pytest
|
||||
|
||||
from transcription.db.models import Document
|
||||
from transcription.db.models import DocumentPerson
|
||||
from transcription.db.models import DocumentPersonRole
|
||||
from transcription.db.models import Person
|
||||
from transcription.db.models import PersonRole
|
||||
from transcription.errors import ErrorCategory
|
||||
from transcription.services.documents import DocumentService
|
||||
from transcription.services.documents import DocumentTypeError
|
||||
@@ -73,24 +73,27 @@ async def test_document_type_delete_allows_unreferenced_and_blocks_referenced(de
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_person_role_maintenance_orders_by_label_then_code(default_session_factory):
|
||||
async def test_person_role_maintenance_orders_by_normalized_label(default_session_factory):
|
||||
service = PeopleService(session_factory=default_session_factory)
|
||||
second = await service.create_person_role(code="witness", label="Witness")
|
||||
first = await service.create_person_role(code="author", label="Author")
|
||||
second = await service.create_person_role(label="Witness")
|
||||
first = await service.create_person_role(label="Archivist")
|
||||
|
||||
updated = await service.update_person_role(second.id, label="Attestor", is_active=False)
|
||||
|
||||
assert updated.code == "witness"
|
||||
assert [item.id for item in await service.list_person_roles(active_only=False)] == [second.id, first.id]
|
||||
assert updated.semantic_key is None
|
||||
assert [item.id for item in await service.list_person_roles(active_only=False)] == [first.id, second.id]
|
||||
assert [item.id for item in await service.list_person_roles()] == [first.id]
|
||||
summaries = {item.id: item for item in await service.list_person_role_summaries()}
|
||||
assert summaries[second.id].link_count == 0
|
||||
assert summaries[second.id].is_built_in is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_person_role_delete_allows_unreferenced_and_blocks_referenced(default_session_factory):
|
||||
documents = DocumentService(session_factory=default_session_factory)
|
||||
people = PeopleService(session_factory=default_session_factory)
|
||||
unused = await people.create_person_role(code="witness", label="Witness")
|
||||
referenced = await people.create_person_role(code="author", label="Author")
|
||||
unused = await people.create_person_role(label="Witness")
|
||||
referenced = await people.create_person_role(label="Creator")
|
||||
document = await documents.create_document(Document(name="Role document"))
|
||||
person = await people.create_person(Person(full_name="Role Person"))
|
||||
await people.create_document_person(
|
||||
@@ -98,7 +101,6 @@ async def test_person_role_delete_allows_unreferenced_and_blocks_referenced(defa
|
||||
document_id=document.id,
|
||||
person_id=person.id,
|
||||
role_id=referenced.id,
|
||||
role=DocumentPersonRole.AUTHOR,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -113,12 +115,12 @@ async def test_person_role_delete_allows_unreferenced_and_blocks_referenced(defa
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_person_role_duplicate_code_is_conflict(default_session_factory):
|
||||
async def test_person_role_duplicate_normalized_label_is_conflict(default_session_factory):
|
||||
service = PeopleService(session_factory=default_session_factory)
|
||||
await service.create_person_role(code="author", label="Author")
|
||||
await service.create_person_role(label="Witness")
|
||||
|
||||
with pytest.raises(PersonRoleError) as caught:
|
||||
await service.create_person_role(code=" AUTHOR ", label="Duplicate")
|
||||
await service.create_person_role(label=" witness ")
|
||||
|
||||
assert caught.value.category == ErrorCategory.CONFLICT
|
||||
|
||||
@@ -127,7 +129,7 @@ async def test_person_role_duplicate_code_is_conflict(default_session_factory):
|
||||
async def test_custom_person_role_can_be_used_for_document_link(default_session_factory):
|
||||
documents = DocumentService(session_factory=default_session_factory)
|
||||
people = PeopleService(session_factory=default_session_factory)
|
||||
role = await people.create_person_role(code="witness", label="Witness")
|
||||
role = await people.create_person_role(label="Witness")
|
||||
document = await documents.create_document(Document(name="Witnessed document"))
|
||||
person = await people.create_person(Person(full_name="Archive Witness"))
|
||||
|
||||
@@ -138,30 +140,24 @@ async def test_custom_person_role_can_be_used_for_document_link(default_session_
|
||||
)
|
||||
loaded = await people.list_document_people(document_id=document.id)
|
||||
|
||||
assert link.role == "witness"
|
||||
assert link.role_id == role.id
|
||||
assert loaded[0].role_ref is not None
|
||||
assert loaded[0].role_ref.code == "witness"
|
||||
assert loaded[0].role_ref.label == "Witness"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_custom_person_role_delete_blocks_legacy_only_reference(default_session_factory):
|
||||
documents = DocumentService(session_factory=default_session_factory)
|
||||
async def test_built_in_person_role_cannot_be_deleted(default_session_factory):
|
||||
people = PeopleService(session_factory=default_session_factory)
|
||||
role = await people.create_person_role(code="witness", label="Witness")
|
||||
document = await documents.create_document(Document(name="Legacy role document"))
|
||||
person = await people.create_person(Person(full_name="Legacy Witness"))
|
||||
async with people._session_scope() as session:
|
||||
session.add(
|
||||
DocumentPerson(
|
||||
document_id=document.id,
|
||||
person_id=person.id,
|
||||
role="witness",
|
||||
role_id=None,
|
||||
)
|
||||
role = PersonRole(
|
||||
semantic_key="author",
|
||||
label="Author",
|
||||
normalized_label="author",
|
||||
)
|
||||
session.add(role)
|
||||
await session.commit()
|
||||
await session.refresh(role)
|
||||
|
||||
assert await people.is_person_role_referenced(role.id) is True
|
||||
with pytest.raises(PersonRoleError) as caught:
|
||||
await people.delete_person_role(role.id)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user