diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntity.java index 4d07790d..673d1fc5 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntity.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntity.java @@ -35,6 +35,8 @@ public class HsOfficePersonEntity implements RbacObject, Stringifyable { private static Stringify toString = stringify(HsOfficePersonEntity.class, "person") .withProp(Fields.personType, HsOfficePersonEntity::getPersonType) .withProp(Fields.tradeName, HsOfficePersonEntity::getTradeName) + .withProp(Fields.salutation, HsOfficePersonEntity::getSalutation) + .withProp(Fields.title, HsOfficePersonEntity::getTitle) .withProp(Fields.familyName, HsOfficePersonEntity::getFamilyName) .withProp(Fields.givenName, HsOfficePersonEntity::getGivenName); @@ -48,6 +50,12 @@ public class HsOfficePersonEntity implements RbacObject, Stringifyable { @Column(name = "tradename") private String tradeName; + @Column(name = "salutation") + private String salutation; + + @Column(name = "title") + private String title; + @Column(name = "familyname") private String familyName; @@ -68,7 +76,7 @@ public class HsOfficePersonEntity implements RbacObject, Stringifyable { public static RbacView rbac() { return rbacViewFor("person", HsOfficePersonEntity.class) .withIdentityView(SQL.projection("concat(tradeName, familyName, givenName)")) - .withUpdatableColumns("personType", "tradeName", "givenName", "familyName") + .withUpdatableColumns("personType", "title", "salutation", "tradeName", "givenName", "familyName") .toRole("global", GUEST).grantPermission(INSERT) .createRole(OWNER, (with) -> { diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityPatcher.java index d1d3fa8c..ede3fc03 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityPatcher.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityPatcher.java @@ -22,6 +22,8 @@ class HsOfficePersonEntityPatcher implements EntityPatcher( + "title", + HsOfficePersonPatchResource::setTitle, + "Dr. Patch.", + HsOfficePersonEntity::setTitle), + new JsonNullableProperty<>( + "salutation", + HsOfficePersonPatchResource::setSalutation, + "Hallo Ini", + HsOfficePersonEntity::setSalutation), new JsonNullableProperty<>( "familyName", HsOfficePersonPatchResource::setFamilyName, diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityUnitTest.java index 1eec872b..19aa3988 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonEntityUnitTest.java @@ -60,19 +60,63 @@ class HsOfficePersonEntityUnitTest { assertThat(actualDisplay).isEqualTo("NP some family name, some given name"); } + @Test + void toShortStringWithSalutationAndTitleReturnsSalutationAndTitle() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .personType(HsOfficePersonType.NATURAL_PERSON) + .salutation("Frau") + .title("Dr.") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toShortString(); + + assertThat(actualDisplay).isEqualTo("NP some family name, some given name"); + } + + @Test + void toShortStringWithSalutationAndWithoutTitleReturnsSalutation() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .personType(HsOfficePersonType.NATURAL_PERSON) + .salutation("Frau") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toShortString(); + + assertThat(actualDisplay).isEqualTo("NP Frau some family name, some given name"); + } + + @Test + void toShortStringWithoutSalutationAndWithTitleReturnsTitle() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .personType(HsOfficePersonType.NATURAL_PERSON) + .title("Dr. Dr.") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toShortString(); + + assertThat(actualDisplay).isEqualTo("NP some family name, some given name"); + } + @Test void toStringWithAllFieldsReturnsAllButUuid() { final var givenPersonEntity = HsOfficePersonEntity.builder() .uuid(UUID.randomUUID()) .personType(HsOfficePersonType.NATURAL_PERSON) .tradeName("some trade name") + .title("Dr.") .familyName("some family name") .givenName("some given name") .build(); final var actualDisplay = givenPersonEntity.toString(); - assertThat(actualDisplay).isEqualTo("person(personType='NP', tradeName='some trade name', familyName='some family name', givenName='some given name')"); + assertThat(actualDisplay).isEqualTo("person(personType='NP', tradeName='some trade name', title='Dr.', familyName='some family name', givenName='some given name')"); } @Test @@ -86,4 +130,42 @@ class HsOfficePersonEntityUnitTest { assertThat(actualDisplay).isEqualTo("person(familyName='some family name', givenName='some given name')"); } + @Test + void toStringWithSalutationAndTitleRetursSalutationAndTitle() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .salutation("Herr") + .title("Prof. Dr.") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toString(); + + assertThat(actualDisplay).isEqualTo("person(salutation='Herr', title='Prof. Dr.', familyName='some family name', givenName='some given name')"); + } + @Test + void toStringWithSalutationAndWithoutTitleSkipsTitle() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .salutation("Herr") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toString(); + + assertThat(actualDisplay).isEqualTo("person(salutation='Herr', familyName='some family name', givenName='some given name')"); + } + @Test + void toStringWithoutSalutationAndWithTitleSkipsSalutation() { + final var givenPersonEntity = HsOfficePersonEntity.builder() + .title("some title") + .familyName("some family name") + .givenName("some given name") + .build(); + + final var actualDisplay = givenPersonEntity.toString(); + + assertThat(actualDisplay).isEqualTo("person(title='some title', familyName='some family name', givenName='some given name')"); + } + }