Files
parenthese/backend/test/gedcom-notes.test.ts
IliesAllaliandClaude Opus 5.5 dd738c483a Import GEDCOM : vraies dates, toutes les notes
Dates : « vers », « avant », « après », « entre … et … », dates juliennes,
calendrier républicain converti en grégorien, doubles années (1700/01).
« BET 1794 AND 1796 » ou « @#DFRENCH R@ 18 BRUM 8 » étaient perdues, « ABT
1900 » devient au moins 1900. La précision est déjà lue pour la suite.

Notes : notes partagées (« 1 NOTE @N1@ »), plusieurs notes, RTF nettoyé. Le
lecteur garde la valeur brute de chaque ligne : une note coupée en CONC se
recolle avec ses espaces (« pendant trente-cinq ans », plus « pendanttrente »).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 22:12:16 +02:00

46 lines
1.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, expect, it } from 'vitest'
import { indexGedcomRecords } from '../src/lib/gedcom-photos'
import { parseGedcom, personNotes } from '../src/routes/gedcom'
function notesOf(text: string) {
const roots = parseGedcom(text)
const records = indexGedcomRecords(roots)
const indi = roots.find((n) => n.tag === 'INDI')!
return personNotes(indi as never, records)
}
describe('notes d’une personne', () => {
it('note écrite sous la personne, sur plusieurs lignes (CONT) et coupée (CONC)', () => {
expect(notesOf([
'0 @I1@ INDI',
'1 NOTE Instituteur à Limoges pendant',
'2 CONC trente-cinq ans.',
'2 CONT Il aimait la pêche.',
].join('\n'))).toBe('Instituteur à Limoges pendant trente-cinq ans.\nIl aimait la pêche.')
})
it('note partagée par renvoi (Gramps, Geneatique, Ancestry)', () => {
expect(notesOf([
'0 @I1@ INDI',
'1 NOTE @N7@',
'0 @N7@ NOTE Revenu du front en 1919.',
'1 CONT Blessé à Verdun.',
].join('\n'))).toBe('Revenu du front en 1919.\nBlessé à Verdun.')
})
it('plusieurs notes, séparées par une ligne vide', () => {
expect(notesOf([
'0 @I1@ INDI',
'1 NOTE Première note.',
'1 NOTE @N1@',
'0 @N1@ NOTE Deuxième note.',
].join('\n'))).toBe('Première note.\n\nDeuxième note.')
})
it('aucune note, ou renvoi cassé', () => {
expect(notesOf('0 @I1@ INDI\n1 NAME Jean /Dupont/')).toBeNull()
expect(notesOf('0 @I1@ INDI\n1 NOTE @N404@')).toBeNull()
})
})