From e021261300eb7f8f51e90edc094f7d9aba629617 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 28 Apr 2026 20:29:45 +0200 Subject: [PATCH] test(transcription): all in-block mention occurrences rewrite on rename MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the same person is mentioned twice in one block, both substrings flip to the new display name. String.replace(String, String) is documented to replace every occurrence, but a future regex-based refactor or a typo could silently regress to first-match-only — this test guards against that. Refs #362 Co-Authored-By: Claude Opus 4.7 --- .../PersonMentionPropagationListenerTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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 a1abbfa1..38568cc1 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonMentionPropagationListenerTest.java @@ -122,6 +122,27 @@ class PersonMentionPropagationListenerTest { org.assertj.core.groups.Tuple.tuple(hansId, "Hans Schmidt")); } + @Test + void rewritesAllOccurrences_whenSameMentionAppearsTwiceInBlock() { + UUID personId = savedPersonId("Auguste", "Raddatz"); + TranscriptionBlock saved = saveBlock( + "Heute hat @Auguste Raddatz geschrieben, dann hat @Auguste Raddatz nochmal geschrieben.", + List.of(new PersonMention(personId, "Auguste Raddatz"))); + em.clear(); + + listener.onPersonDisplayNameChanged( + new PersonDisplayNameChangedEvent(personId, "Auguste Raddatz", "Augusta Raddatz")); + blockRepository.flush(); + em.clear(); + + TranscriptionBlock reloaded = blockRepository.findById(saved.getId()).orElseThrow(); + assertThat(reloaded.getText()) + .isEqualTo("Heute hat @Augusta Raddatz geschrieben, dann hat @Augusta Raddatz nochmal geschrieben."); + assertThat(reloaded.getMentionedPersons()) + .extracting(PersonMention::getDisplayName) + .containsExactly("Augusta Raddatz"); + } + @Test void leavesUnrelatedBlockUntouched_whenNoSidecarReferencesPerson() { UUID personId = savedPersonId("Auguste", "Raddatz");