generated from john/python-template
V4 implemented. Some tweaking left, but it is working
This commit is contained in:
+64
-5
@@ -8,6 +8,7 @@ import pytest
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from transcription.db.models import Document
|
||||
from transcription.db.models import DocumentType
|
||||
from transcription.db.models import DocumentPerson
|
||||
from transcription.db.models import DocumentPersonRole
|
||||
from transcription.db.models import Job
|
||||
@@ -15,21 +16,38 @@ from transcription.db.models import JobSource
|
||||
from transcription.db.models import JobSourceStatus
|
||||
from transcription.db.models import JobStatus
|
||||
from transcription.db.models import Person
|
||||
from transcription.db.models import PersonRole
|
||||
from transcription.db.models import Source
|
||||
|
||||
|
||||
def _make_document(**overrides) -> Document:
|
||||
defaults = {
|
||||
"name": "letter bundle",
|
||||
"document_type": "letter",
|
||||
"notes": "Family correspondence",
|
||||
}
|
||||
defaults.update(overrides)
|
||||
return Document(**defaults)
|
||||
|
||||
|
||||
def _persist_document_type(session, *, code: str = "letter", label: str = "Letter") -> DocumentType:
|
||||
document_type = DocumentType(code=code, label=label)
|
||||
session.add(document_type)
|
||||
session.commit()
|
||||
session.refresh(document_type)
|
||||
return document_type
|
||||
|
||||
|
||||
def _persist_person_role(session, *, code: str = "author", label: str = "Author") -> PersonRole:
|
||||
role = PersonRole(code=code, label=label)
|
||||
session.add(role)
|
||||
session.commit()
|
||||
session.refresh(role)
|
||||
return role
|
||||
|
||||
|
||||
def _persist_document(session) -> Document:
|
||||
document = _make_document()
|
||||
document_type = _persist_document_type(session)
|
||||
document = _make_document(document_type_id=document_type.id, document_type=document_type.code)
|
||||
session.add(document)
|
||||
session.commit()
|
||||
session.refresh(document)
|
||||
@@ -100,6 +118,14 @@ class TestDocumentModel:
|
||||
assert document.created_at is not None
|
||||
assert document.updated_at is not None
|
||||
|
||||
def test_can_reference_document_type_registry(self, session):
|
||||
document_type = _persist_document_type(session, code="record", label="Record")
|
||||
document = _make_document(document_type_id=document_type.id, document_type=document_type.code)
|
||||
session.add(document)
|
||||
session.commit()
|
||||
session.refresh(document)
|
||||
assert document.document_type_id == document_type.id
|
||||
|
||||
|
||||
class TestJobModel:
|
||||
def test_can_be_created_for_document(self, session):
|
||||
@@ -158,12 +184,23 @@ class TestPersonAndDocumentPersonModel:
|
||||
def test_document_person_role_is_unique_per_document_person(self, session):
|
||||
document = _persist_document(session)
|
||||
person = _persist_person(session)
|
||||
person_role = _persist_person_role(session)
|
||||
|
||||
first = DocumentPerson(document_id=document.id, person_id=person.id, role=DocumentPersonRole.AUTHOR)
|
||||
first = DocumentPerson(
|
||||
document_id=document.id,
|
||||
person_id=person.id,
|
||||
role=DocumentPersonRole.AUTHOR,
|
||||
role_id=person_role.id,
|
||||
)
|
||||
session.add(first)
|
||||
session.commit()
|
||||
|
||||
duplicate = DocumentPerson(document_id=document.id, person_id=person.id, role=DocumentPersonRole.AUTHOR)
|
||||
duplicate = DocumentPerson(
|
||||
document_id=document.id,
|
||||
person_id=person.id,
|
||||
role=DocumentPersonRole.AUTHOR,
|
||||
role_id=person_role.id,
|
||||
)
|
||||
session.add(duplicate)
|
||||
with pytest.raises(IntegrityError):
|
||||
session.commit()
|
||||
@@ -196,8 +233,14 @@ class TestRelationships:
|
||||
_persist_job(session, document)
|
||||
_persist_source(session, document)
|
||||
person = _persist_person(session)
|
||||
person_role = _persist_person_role(session)
|
||||
|
||||
link = DocumentPerson(document_id=document.id, person_id=person.id, role=DocumentPersonRole.AUTHOR)
|
||||
link = DocumentPerson(
|
||||
document_id=document.id,
|
||||
person_id=person.id,
|
||||
role=DocumentPersonRole.AUTHOR,
|
||||
role_id=person_role.id,
|
||||
)
|
||||
session.add(link)
|
||||
session.commit()
|
||||
|
||||
@@ -205,3 +248,19 @@ class TestRelationships:
|
||||
assert len(document.jobs) == 1
|
||||
assert len(document.sources) == 1
|
||||
assert len(document.document_people) == 1
|
||||
|
||||
|
||||
class TestRegistryModels:
|
||||
def test_person_role_code_is_unique(self, session):
|
||||
_persist_person_role(session, code="mentioned", label="Mentioned")
|
||||
duplicate = PersonRole(code="mentioned", label="Mentioned Again")
|
||||
session.add(duplicate)
|
||||
with pytest.raises(IntegrityError):
|
||||
session.commit()
|
||||
|
||||
def test_document_type_code_is_unique(self, session):
|
||||
_persist_document_type(session, code="journal", label="Journal")
|
||||
duplicate = DocumentType(code="journal", label="Journal Duplicate")
|
||||
session.add(duplicate)
|
||||
with pytest.raises(IntegrityError):
|
||||
session.commit()
|
||||
|
||||
Reference in New Issue
Block a user