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 <noreply@anthropic.com>
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user