From 32622b9b4f8fa59616ad93f501463d652a9e7223 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 28 Apr 2026 13:03:20 +0200 Subject: [PATCH] test(stammbaum): getFamilyNetwork excludes edges with non-family endpoints Proves the in-memory filter correctly drops edges where one Person is not in findAllFamilyMembers(), preventing non-family relationships from leaking into the graph. Co-Authored-By: Claude Sonnet 4.6 --- .../relationship/RelationshipServiceTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/relationship/RelationshipServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/relationship/RelationshipServiceTest.java index be915e3b..0844a5a5 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/relationship/RelationshipServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/relationship/RelationshipServiceTest.java @@ -13,7 +13,10 @@ import org.raddatz.familienarchiv.relationship.dto.CreateRelationshipRequest; import org.raddatz.familienarchiv.service.PersonService; import org.springframework.dao.DataIntegrityViolationException; +import org.raddatz.familienarchiv.relationship.dto.NetworkDTO; + import java.time.Instant; +import java.util.List; import java.util.Optional; import java.util.UUID; @@ -167,6 +170,27 @@ class RelationshipServiceTest { .isEqualTo(ErrorCode.RELATIONSHIP_NOT_FOUND); } + @Test + void getFamilyNetwork_excludes_edges_where_one_endpoint_is_not_a_family_member() { + // alice and bob are family members; charlie is NOT (not in findAllFamilyMembers result). + // Two edges exist: alice→bob (both family) and alice→charlie (one non-family). + // Only the alice→bob edge must appear in the returned NetworkDTO. + UUID aliceBobRelId = UUID.randomUUID(); + UUID aliceCharlieRelId = UUID.randomUUID(); + PersonRelationship aliceBob = parentOf(alice, bob, aliceBobRelId); + PersonRelationship aliceCharlie = parentOf(alice, charlie, aliceCharlieRelId); + + when(personService.findAllFamilyMembers()).thenReturn(List.of(alice, bob)); + when(relationshipRepository.findAllByRelationTypeIn(any())).thenReturn(List.of(aliceBob, aliceCharlie)); + + NetworkDTO result = service.getFamilyNetwork(); + + assertThat(result.nodes()).hasSize(2); + assertThat(result.edges()).hasSize(1); + assertThat(result.edges().get(0).personId()).isEqualTo(alice.getId()); + assertThat(result.edges().get(0).relatedPersonId()).isEqualTo(bob.getId()); + } + // --- helpers --- private static Person person(String name) {