feat(model): add title, personType, displayName to Person entity

- Add title (nullable VARCHAR) and personType (enum, default PERSON)
- Make firstName nullable for non-person entities
- Add @Transient getDisplayName() as single source of truth for
  name display, exposed via @Schema(READ_ONLY, REQUIRED)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-08 11:53:07 +02:00
parent 8101ddb697
commit 9f14648dc3
2 changed files with 73 additions and 2 deletions

View File

@@ -0,0 +1,53 @@
package org.raddatz.familienarchiv.model;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class PersonTest {
@Test
void getDisplayName_withAllFields() {
Person person = Person.builder()
.title("Dr.")
.firstName("Walter")
.lastName("de Gruyter")
.build();
assertThat(person.getDisplayName()).isEqualTo("Dr. Walter de Gruyter");
}
@Test
void getDisplayName_withoutTitle() {
Person person = Person.builder()
.firstName("Clara")
.lastName("Cram")
.build();
assertThat(person.getDisplayName()).isEqualTo("Clara Cram");
}
@Test
void getDisplayName_withNullFirstName() {
Person person = Person.builder()
.lastName("Gesellschafter des Verlages")
.build();
assertThat(person.getDisplayName()).isEqualTo("Gesellschafter des Verlages");
}
@Test
void getDisplayName_withTitleAndNullFirstName() {
Person person = Person.builder()
.title("Tante")
.lastName("Molly")
.build();
assertThat(person.getDisplayName()).isEqualTo("Tante Molly");
}
@Test
void personType_defaultsToPerson() {
Person person = Person.builder()
.firstName("Clara")
.lastName("Cram")
.build();
assertThat(person.getPersonType()).isEqualTo(PersonType.PERSON);
}
}