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.raddatz.familienarchiv.service.PersonService;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
|
|
||||||
|
import org.raddatz.familienarchiv.relationship.dto.NetworkDTO;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -167,6 +170,27 @@ class RelationshipServiceTest {
|
|||||||
.isEqualTo(ErrorCode.RELATIONSHIP_NOT_FOUND);
|
.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 ---
|
// --- helpers ---
|
||||||
|
|
||||||
private static Person person(String name) {
|
private static Person person(String name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user