generated from john/python-template
@@ -0,0 +1,69 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from sqlmodel import select
|
||||
|
||||
from transcription.db.models import GenealogyCitation
|
||||
from transcription.db.models import GenealogyFamily
|
||||
from transcription.db.models import GenealogyFamilyChild
|
||||
from transcription.db.models import GenealogyPerson
|
||||
from transcription.services.gedcom_import import import_gedcom_file
|
||||
from transcription.services.gedcom_import import parse_gedcom
|
||||
|
||||
_FIXTURE_PATH = Path(__file__).resolve().parents[1] / "fixtures" / "gedcom" / "sample_familysearch.ged"
|
||||
|
||||
|
||||
def test_parse_gedcom_extracts_people_families_and_citations():
|
||||
parsed = parse_gedcom(file_path=_FIXTURE_PATH)
|
||||
|
||||
assert len(parsed.people) == 3
|
||||
john = next(person for person in parsed.people if person.fs_id == "KWC1-ABC")
|
||||
assert john.full_name == "John Doe"
|
||||
assert john.birth_date == date(1900, 1, 1)
|
||||
assert john.birth_place == "Springfield, Illinois"
|
||||
assert john.death_date == date(1970, 2, 5)
|
||||
assert len(john.citations) == 2
|
||||
assert "Birth Register" in john.citations[0].raw_citation_text
|
||||
|
||||
assert len(parsed.families) == 1
|
||||
family = parsed.families[0]
|
||||
assert family.fs_family_id == "FAM-001"
|
||||
assert family.marriage_date == date(1925, 4, 4)
|
||||
assert family.marriage_place == "Springfield, Illinois"
|
||||
assert len(family.children) == 1
|
||||
assert family.children[0].relationship_type == "adopted"
|
||||
assert len(family.citations) == 1
|
||||
assert "Marriage License" in family.citations[0].raw_citation_text
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_import_gedcom_file_is_idempotent(default_session_factory):
|
||||
async with default_session_factory() as session:
|
||||
first = await import_gedcom_file(session=session, file_path=_FIXTURE_PATH)
|
||||
async with default_session_factory() as session:
|
||||
second = await import_gedcom_file(session=session, file_path=_FIXTURE_PATH)
|
||||
async with default_session_factory() as session:
|
||||
people = (await session.exec(select(GenealogyPerson))).all()
|
||||
families = (await session.exec(select(GenealogyFamily))).all()
|
||||
children = (await session.exec(select(GenealogyFamilyChild))).all()
|
||||
citations = (await session.exec(select(GenealogyCitation))).all()
|
||||
|
||||
assert first.new_people == 3
|
||||
assert first.new_families == 1
|
||||
assert first.family_children == 1
|
||||
assert first.citations == 3
|
||||
|
||||
assert second.new_people == 0
|
||||
assert second.updated_people == 0
|
||||
assert second.new_families == 0
|
||||
assert second.updated_families == 0
|
||||
assert second.family_children == 1
|
||||
assert second.citations == 3
|
||||
|
||||
assert len(people) == 3
|
||||
assert len(families) == 1
|
||||
assert len(children) == 1
|
||||
assert len(citations) == 3
|
||||
Reference in New Issue
Block a user