From 5dd4a019955ec43825f634c4e5a29a8906f20280 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 25 Apr 2026 20:57:15 +0200 Subject: [PATCH] feat(persons): createPerson(DTO) rejects SKIP with INVALID_PERSON_TYPE Co-Authored-By: Claude Sonnet 4.6 --- .../raddatz/familienarchiv/service/PersonService.java | 3 +++ .../familienarchiv/service/PersonServiceTest.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/PersonService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/PersonService.java index c5b63939..db71d24c 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/PersonService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/PersonService.java @@ -109,6 +109,9 @@ public class PersonService { @Transactional public Person createPerson(PersonUpdateDTO dto) { + if (dto.getPersonType() == PersonType.SKIP) { + throw DomainException.badRequest(ErrorCode.INVALID_PERSON_TYPE, "SKIP is not a valid person type for manual creation"); + } validateYears(dto.getBirthYear(), dto.getDeathYear()); Person person = Person.builder() .personType(dto.getPersonType()) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonServiceTest.java index 692e2596..cb059e4e 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonServiceTest.java @@ -128,6 +128,17 @@ class PersonServiceTest { assertThat(result.getPersonType()).isEqualTo(PersonType.INSTITUTION); } + @Test + void createPerson_dto_throwsInvalidPersonType_whenSkip() { + PersonUpdateDTO dto = new PersonUpdateDTO(); + dto.setFirstName("Anna"); dto.setLastName("Test"); dto.setPersonType(PersonType.SKIP); + + assertThatThrownBy(() -> personService.createPerson(dto)) + .isInstanceOf(DomainException.class) + .extracting(e -> ((DomainException) e).getStatus().value()) + .isEqualTo(400); + } + @Test void createPerson_dto_persistsTitle() { when(personRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));