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 00243f9a..a1abbfa1 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java @@ -96,6 +96,32 @@ class PersonMentionPropagationListenerTest { .containsExactly("Augusta Raddatz"); } + @Test + void doesNotMatchPartialName_whenAnotherMentionShares_a_substring_with_renamed_person() { + UUID hansPeterId = savedPersonId("Hans-Peter", "Müller"); + UUID hansId = savedPersonId("Hans", "Müller"); + TranscriptionBlock saved = saveBlock( + "Heute hat @Hans-Peter Müller wieder mit @Hans Müller gesprochen.", + List.of( + new PersonMention(hansPeterId, "Hans-Peter Müller"), + new PersonMention(hansId, "Hans Müller"))); + em.clear(); + + listener.onPersonDisplayNameChanged( + new PersonDisplayNameChangedEvent(hansId, "Hans Müller", "Hans Schmidt")); + blockRepository.flush(); + em.clear(); + + TranscriptionBlock reloaded = blockRepository.findById(saved.getId()).orElseThrow(); + assertThat(reloaded.getText()) + .isEqualTo("Heute hat @Hans-Peter Müller wieder mit @Hans Schmidt gesprochen."); + assertThat(reloaded.getMentionedPersons()) + .extracting(PersonMention::getPersonId, PersonMention::getDisplayName) + .containsExactlyInAnyOrder( + org.assertj.core.groups.Tuple.tuple(hansPeterId, "Hans-Peter Müller"), + org.assertj.core.groups.Tuple.tuple(hansId, "Hans Schmidt")); + } + @Test void leavesUnrelatedBlockUntouched_whenNoSidecarReferencesPerson() { UUID personId = savedPersonId("Auguste", "Raddatz");