V6.2 Add GEDCOM data
Quality Gate / gate (push) Successful in 1m27s

This commit is contained in:
Jim Lancaster
2026-09-03 05:34:13 -05:00
parent e54c2d9f26
commit 7eca9fe7dc
17 changed files with 1155 additions and 16 deletions
+69
View File
@@ -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