diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java index 38568cc1..3cd98ea2 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java @@ -143,6 +143,28 @@ class PersonMentionPropagationListenerTest { .containsExactly("Augusta Raddatz"); } + @Test + void noOps_whenPersonIdNoLongerExists_orphanedSidecarGuard() { + UUID orphanId = UUID.randomUUID(); + when(personService.existsById(orphanId)).thenReturn(false); + + TranscriptionBlock saved = saveBlock( + "Stale reference to @Ghost Name should not be rewritten.", + List.of(new PersonMention(orphanId, "Ghost Name"))); + em.clear(); + + listener.onPersonDisplayNameChanged( + new PersonDisplayNameChangedEvent(orphanId, "Ghost Name", "Resurrected Name")); + blockRepository.flush(); + em.clear(); + + TranscriptionBlock reloaded = blockRepository.findById(saved.getId()).orElseThrow(); + assertThat(reloaded.getText()).isEqualTo("Stale reference to @Ghost Name should not be rewritten."); + assertThat(reloaded.getMentionedPersons()) + .extracting(PersonMention::getDisplayName) + .containsExactly("Ghost Name"); + } + @Test void leavesUnrelatedBlockUntouched_whenNoSidecarReferencesPerson() { UUID personId = savedPersonId("Auguste", "Raddatz");