Compare commits

..

No commits in common. "d34e1f9e142e0b24cec859d4b7cb829f04234f0f" and "06657f26bb2a2d8866648778fca32b9f488c8e61" have entirely different histories.

35 changed files with 159 additions and 234 deletions

View File

@ -60,7 +60,7 @@ public class HsOfficeCoopSharesTransactionEntity implements Stringifyable, HasUu
private int shareCount; private int shareCount;
/** /**
* The Booking reference. * The ooking reference.
*/ */
@Column(name = "reference") @Column(name = "reference")
private String reference; private String reference;

View File

@ -35,6 +35,7 @@ public class HsOfficePersonEntity implements HasUuid, Stringifyable {
private UUID uuid; private UUID uuid;
@Column(name = "persontype") @Column(name = "persontype")
@Enumerated(EnumType.STRING)
private HsOfficePersonType personType; private HsOfficePersonType personType;
@Column(name = "tradename") @Column(name = "tradename")

View File

@ -1,21 +1,9 @@
package net.hostsharing.hsadminng.hs.office.person; package net.hostsharing.hsadminng.hs.office.person;
public enum HsOfficePersonType { public enum HsOfficePersonType {
UNKNOWN_PERSON_TYPE("??"), UNKNOWN,
NATURAL_PERSON("NP"), // a human being NATURAL,
LEGAL_PERSON("LP"), // incorporated legal entity like A/S, GmbH, e.K., eG, e.V. LEGAL,
INCORPORATED_FIRM("IF"), // registered business partnership like OHG, Partnerschaftsgesellschaft SOLE_REPRESENTATION,
UNINCORPORATED_FIRM("UF"), // unregistered partnership, association etc. like GbR, ARGE, community of heirs JOINT_REPRESENTATION
PUBLIC_INSTITUTION("PI"); // entities under public law like government entities, KdöR, AöR
public final String shortName;
HsOfficePersonType(final String shortName) {
this.shortName = shortName;
}
@Override
public String toString() {
return shortName;
}
} }

View File

@ -1,29 +0,0 @@
package net.hostsharing.hsadminng.hs.office.person;
import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import java.util.stream.Stream;
@Converter(autoApply = true)
public class HsOfficePersonTypeConverter implements AttributeConverter<HsOfficePersonType, String> {
@Override
public String convertToDatabaseColumn(HsOfficePersonType category) {
if (category == null) {
return null;
}
return category.shortName;
}
@Override
public HsOfficePersonType convertToEntityAttribute(String code) {
if (code == null) {
return null;
}
return Stream.of(HsOfficePersonType.values())
.filter(c -> c.shortName.equals(code))
.findFirst()
.orElseThrow(IllegalArgumentException::new);
}
}

View File

@ -6,12 +6,10 @@ components:
HsOfficePersonType: HsOfficePersonType:
type: string type: string
enum: enum:
- UNKNOWN_PERSON - NATURAL # a human
- NATURAL_PERSON - LEGAL # e.g. Corp., Inc., AG, GmbH, eG
- LEGAL_PERSON - SOLE_REPRESENTATION # e.g. OHG, GbR
- INCORPORATED_FIRM - JOINT_REPRESENTATION # e.g. community of heirs
- UNINCORPORATED_FIRM
- PUBLIC_INSTITUTION
HsOfficePerson: HsOfficePerson:
type: object type: object

View File

@ -770,8 +770,8 @@ do $$
if '${HSADMINNG_POSTGRES_RESTRICTED_USERNAME}'='restricted' then if '${HSADMINNG_POSTGRES_RESTRICTED_USERNAME}'='restricted' then
create role restricted; create role restricted;
grant all privileges on all tables in schema public to restricted;
end if; end if;
-- grant all privileges on all tables in schema public to ${HSADMINNG_POSTGRES_RESTRICTED_USERNAME};
end $$ end $$
--// --//

View File

@ -4,13 +4,7 @@
--changeset hs-office-person-MAIN-TABLE:1 endDelimiter:--// --changeset hs-office-person-MAIN-TABLE:1 endDelimiter:--//
-- ---------------------------------------------------------------------------- -- ----------------------------------------------------------------------------
CREATE TYPE HsOfficePersonType AS ENUM ( CREATE TYPE HsOfficePersonType AS ENUM ('UNKNOWN', 'NATURAL', 'LEGAL', 'SOLE_REPRESENTATION', 'JOINT_REPRESENTATION');
'??', -- unknown
'NP', -- natural person
'LP', -- legal person
'IF', -- incorporated firm
'UF', -- unincorporated firm
'PI'); -- public institution
CREATE CAST (character varying as HsOfficePersonType) WITH INOUT AS IMPLICIT; CREATE CAST (character varying as HsOfficePersonType) WITH INOUT AS IMPLICIT;

View File

@ -59,14 +59,14 @@ end; $$;
do language plpgsql $$ do language plpgsql $$
begin begin
call createHsOfficePersonTestData('LP', 'First GmbH'); call createHsOfficePersonTestData('LEGAL', 'First GmbH');
call createHsOfficePersonTestData('NP', null, 'Smith', 'Peter'); call createHsOfficePersonTestData('NATURAL', null, 'Smith', 'Peter');
call createHsOfficePersonTestData('LP', 'Second e.K.', 'Sandra', 'Miller'); call createHsOfficePersonTestData('LEGAL', 'Second e.K.', 'Sandra', 'Miller');
call createHsOfficePersonTestData('IF', 'Third OHG'); call createHsOfficePersonTestData('SOLE_REPRESENTATION', 'Third OHG');
call createHsOfficePersonTestData('IF', 'Fourth e.G.'); call createHsOfficePersonTestData('SOLE_REPRESENTATION', 'Fourth e.G.');
call createHsOfficePersonTestData('UF', 'Erben Bessler', 'Mel', 'Bessler'); call createHsOfficePersonTestData('JOINT_REPRESENTATION', 'Erben Bessler', 'Mel', 'Bessler');
call createHsOfficePersonTestData('NP', null, 'Bessler', 'Anita'); call createHsOfficePersonTestData('NATURAL', null, 'Bessler', 'Anita');
call createHsOfficePersonTestData('NP', null, 'Winkler', 'Paul'); call createHsOfficePersonTestData('NATURAL', null, 'Winkler', 'Paul');
end; end;
$$; $$;
--// --//

View File

@ -179,6 +179,7 @@ call generateRbacIdentityView('hs_office_partner', $idName$
call generateRbacRestrictedView('hs_office_partner', call generateRbacRestrictedView('hs_office_partner',
'(select idName from hs_office_person_iv p where p.uuid = target.personUuid)', '(select idName from hs_office_person_iv p where p.uuid = target.personUuid)',
$updates$ $updates$
partnerNumber = new.partnerNumber,
personUuid = new.personUuid, personUuid = new.personUuid,
contactUuid = new.contactUuid contactUuid = new.contactUuid
$updates$); $updates$);

View File

@ -19,6 +19,7 @@ declare
relatedPerson hs_office_person; relatedPerson hs_office_person;
relatedContact hs_office_contact; relatedContact hs_office_contact;
relatedDetailsUuid uuid; relatedDetailsUuid uuid;
birthday date;
begin begin
idName := cleanIdentifier( personTradeOrFamilyName|| '-' || contactLabel); idName := cleanIdentifier( personTradeOrFamilyName|| '-' || contactLabel);
currentTask := 'creating partner test-data ' || idName; currentTask := 'creating partner test-data ' || idName;
@ -32,14 +33,18 @@ begin
where c.label = contactLabel where c.label = contactLabel
into relatedContact; into relatedContact;
if relatedPerson.persontype = 'NATURAL' then
birthday := '1987-10-31'::date;
end if;
raise notice 'creating test partner: %', idName; raise notice 'creating test partner: %', idName;
raise notice '- using person (%): %', relatedPerson.uuid, relatedPerson; raise notice '- using person (%): %', relatedPerson.uuid, relatedPerson;
raise notice '- using contact (%): %', relatedContact.uuid, relatedContact; raise notice '- using contact (%): %', relatedContact.uuid, relatedContact;
if relatedPerson.persontype = 'NP' then if relatedPerson.persontype = 'NATURAL' then
insert insert
into hs_office_partner_details (uuid, birthName, birthday, birthPlace) into hs_office_partner_details (uuid, birthName, birthday)
values (uuid_generate_v4(), 'Meyer', '1987-10-31', 'Hamburg') values (uuid_generate_v4(), 'Meyer', '1987-10-31')
returning uuid into relatedDetailsUuid; returning uuid into relatedDetailsUuid;
else else
insert insert

View File

@ -17,9 +17,7 @@ create table if not exists hs_office_membership
memberNumberSuffix::text ~ '^[0-9][0-9]$'), memberNumberSuffix::text ~ '^[0-9][0-9]$'),
validity daterange not null, validity daterange not null,
reasonForTermination HsOfficeReasonForTermination not null default 'NONE', reasonForTermination HsOfficeReasonForTermination not null default 'NONE',
membershipFeeBillable boolean not null default true, membershipFeeBillable boolean not null default true
UNIQUE(partnerUuid, memberNumberSuffix)
); );
--// --//

View File

@ -72,7 +72,7 @@ class HsOfficeCoopAssetsTransactionControllerAcceptanceTest {
} }
@Test @Test
void globalAdmin_canFindCoopAssetsTransactionsByMemberNumber() { void globalAdmin_canFindCoopAssetsTransactionsByMemberNumberSuffix() {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202); final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202);
@ -114,7 +114,7 @@ class HsOfficeCoopAssetsTransactionControllerAcceptanceTest {
} }
@Test @Test
void globalAdmin_canFindCoopAssetsTransactionsByMembershipUuidAndDateRange() { void globalAdmin_canFindCoopAssetsTransactionsByMemberNumberSuffixAndDateRange() {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202); final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202);

View File

@ -72,7 +72,7 @@ class HsOfficeCoopSharesTransactionControllerAcceptanceTest {
} }
@Test @Test
void globalAdmin_canFindCoopSharesTransactionsByMemberNumber() { void globalAdmin_canFindCoopSharesTransactionsByMemberNumberSuffix() {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202); final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202);
@ -106,14 +106,13 @@ class HsOfficeCoopSharesTransactionControllerAcceptanceTest {
} }
@Test @Test
void globalAdmin_canFindCoopSharesTransactionsByMembershipUuidAndDateRange() { void globalAdmin_canFindCoopSharesTransactionsByMemberNumberSuffixAndDateRange() {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202); final var givenMembership = membershipRepo.findMembershipByMemberNumber(1000202);
RestAssured // @formatter:off RestAssured // @formatter:off
.given().header("current-user", "superuser-alex@hostsharing.net").port(port).when() .given().header("current-user", "superuser-alex@hostsharing.net").port(port).when().get("http://localhost/api/hs/office/coopsharestransactions?membershipUuid=" + givenMembership.getUuid() + "&fromValueDate=2020-01-01&toValueDate=2021-12-31").then().log().all().assertThat().statusCode(200).contentType("application/json").body("", lenientlyEquals("""
.get("http://localhost/api/hs/office/coopsharestransactions?membershipUuid=" + givenMembership.getUuid() + "&fromValueDate=2020-01-01&toValueDate=2021-12-31").then().log().all().assertThat().statusCode(200).contentType("application/json").body("", lenientlyEquals("""
[ [
{ {
"transactionType": "CANCELLATION", "transactionType": "CANCELLATION",

View File

@ -83,7 +83,7 @@ class HsOfficeDebitorControllerAcceptanceTest {
{ {
"debitorNumber": 1000111, "debitorNumber": 1000111,
"debitorNumberSuffix": 11, "debitorNumberSuffix": 11,
"partner": { "person": { "personType": "LEGAL_PERSON" } }, "partner": { "person": { "personType": "LEGAL" } },
"billingContact": { "label": "first contact" }, "billingContact": { "label": "first contact" },
"vatId": null, "vatId": null,
"vatCountryCode": null, "vatCountryCode": null,

View File

@ -104,6 +104,12 @@ class HsOfficeDebitorEntityPatcherUnitTest extends PatchUnitTestBase<
HsOfficeDebitorEntity::setBillingContact, HsOfficeDebitorEntity::setBillingContact,
newBillingContact(PATCHED_CONTACT_UUID)) newBillingContact(PATCHED_CONTACT_UUID))
.notNullable(), .notNullable(),
new SimpleProperty<>(
"personType",
HsOfficeDebitorPatchResource::setBillable,
PATCHED_BILLABLE,
HsOfficeDebitorEntity::setBillable)
.notNullable(),
new SimpleProperty<>( new SimpleProperty<>(
"billable", "billable",
HsOfficeDebitorPatchResource::setBillable, HsOfficeDebitorPatchResource::setBillable,

View File

@ -17,7 +17,7 @@ class HsOfficeDebitorEntityUnitTest {
.debitorNumberSuffix((byte)67) .debitorNumberSuffix((byte)67)
.partner(HsOfficePartnerEntity.builder() .partner(HsOfficePartnerEntity.builder()
.person(HsOfficePersonEntity.builder() .person(HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.build()) .build())
.details(HsOfficePartnerDetailsEntity.builder().birthName("some birth name").build()) .details(HsOfficePartnerDetailsEntity.builder().birthName("some birth name").build())
@ -29,7 +29,7 @@ class HsOfficeDebitorEntityUnitTest {
final var result = given.toString(); final var result = given.toString();
assertThat(result).isEqualTo("debitor(D-1234567: LP some trade name: som)"); assertThat(result).isEqualTo("debitor(D-1234567: LEGAL some trade name: som)");
} }
@Test @Test

View File

@ -211,9 +211,9 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTest {
// then // then
allTheseDebitorsAreReturned( allTheseDebitorsAreReturned(
result, result,
"debitor(D-1000111: LP First GmbH: fir)", "debitor(D-1000111: LEGAL First GmbH: fir)",
"debitor(D-1000212: LP Second e.K.: sec)", "debitor(D-1000212: LEGAL Second e.K.: sec)",
"debitor(D-1000313: IF Third OHG: thi)"); "debitor(D-1000313: SOLE_REPRESENTATION Third OHG: thi)");
} }
@ParameterizedTest @ParameterizedTest
@ -231,8 +231,8 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTest {
// then: // then:
exactlyTheseDebitorsAreReturned(result, exactlyTheseDebitorsAreReturned(result,
"debitor(D-1000111: LP First GmbH: fir)", "debitor(D-1000111: LEGAL First GmbH: fir)",
"debitor(D-1000120: LP First GmbH: fif)"); "debitor(D-1000120: LEGAL First GmbH: fif)");
} }
@Test @Test
@ -260,7 +260,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTest {
final var result = debitorRepo.findDebitorByDebitorNumber(1000313); final var result = debitorRepo.findDebitorByDebitorNumber(1000313);
// then // then
exactlyTheseDebitorsAreReturned(result, "debitor(D-1000313: IF Third OHG: thi)"); exactlyTheseDebitorsAreReturned(result, "debitor(D-1000313: SOLE_REPRESENTATION Third OHG: thi)");
} }
} }
@ -276,7 +276,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTest {
final var result = debitorRepo.findDebitorByOptionalNameLike("third contact"); final var result = debitorRepo.findDebitorByOptionalNameLike("third contact");
// then // then
exactlyTheseDebitorsAreReturned(result, "debitor(D-1000313: IF Third OHG: thi)"); exactlyTheseDebitorsAreReturned(result, "debitor(D-1000313: SOLE_REPRESENTATION Third OHG: thi)");
} }
} }

View File

@ -345,7 +345,7 @@ class HsOfficeMembershipControllerAcceptanceTest {
// finally, the Membership is actually updated // finally, the Membership is actually updated
assertThat(membershipRepo.findByUuid(givenMembership.getUuid())).isPresent().get() assertThat(membershipRepo.findByUuid(givenMembership.getUuid())).isPresent().get()
.matches(mandate -> { .matches(mandate -> {
assertThat(mandate.getPartner().toShortString()).isEqualTo("LP First GmbH"); assertThat(mandate.getPartner().toShortString()).isEqualTo("LEGAL First GmbH");
assertThat(mandate.getMainDebitor().toString()).isEqualTo(givenMembership.getMainDebitor().toString()); assertThat(mandate.getMainDebitor().toString()).isEqualTo(givenMembership.getMainDebitor().toString());
assertThat(mandate.getMemberNumberSuffix()).isEqualTo(givenMembership.getMemberNumberSuffix()); assertThat(mandate.getMemberNumberSuffix()).isEqualTo(givenMembership.getMemberNumberSuffix());
assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,2024-01-01)"); assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,2024-01-01)");
@ -388,7 +388,7 @@ class HsOfficeMembershipControllerAcceptanceTest {
// finally, the Membership is actually updated // finally, the Membership is actually updated
assertThat(membershipRepo.findByUuid(givenMembership.getUuid())).isPresent().get() assertThat(membershipRepo.findByUuid(givenMembership.getUuid())).isPresent().get()
.matches(mandate -> { .matches(mandate -> {
assertThat(mandate.getPartner().toShortString()).isEqualTo("LP First GmbH"); assertThat(mandate.getPartner().toShortString()).isEqualTo("LEGAL First GmbH");
assertThat(mandate.getMainDebitor().toString()).isEqualTo(givenMembership.getMainDebitor().toString()); assertThat(mandate.getMainDebitor().toString()).isEqualTo(givenMembership.getMainDebitor().toString());
assertThat(mandate.getMemberNumberSuffix()).isEqualTo(givenMembership.getMemberNumberSuffix()); assertThat(mandate.getMemberNumberSuffix()).isEqualTo(givenMembership.getMemberNumberSuffix());
assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,)"); assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,)");

View File

@ -27,7 +27,7 @@ class HsOfficeMembershipEntityUnitTest {
@Test @Test
void toStringContainsAllProps() { void toStringContainsAllProps() {
final var result = givenMembership.toString(); final var result = givenMembership.toString();
assertThat(result).isEqualTo("Membership(M-1000101, LP Test Ltd., D-1000100, [2020-01-01,))"); assertThat(result).isEqualTo("Membership(M-1000101, LEGAL Test Ltd., D-1000100, [2020-01-01,))");
} }
@Test @Test

View File

@ -77,7 +77,7 @@ class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTest {
// when // when
final var result = attempt(em, () -> { final var result = attempt(em, () -> {
final var newMembership = toCleanup(HsOfficeMembershipEntity.builder() final var newMembership = toCleanup(HsOfficeMembershipEntity.builder()
.memberNumberSuffix("11") .memberNumberSuffix("01")
.partner(givenPartner) .partner(givenPartner)
.mainDebitor(givenDebitor) .mainDebitor(givenDebitor)
.validity(Range.closedInfinite(LocalDate.parse("2020-01-01"))) .validity(Range.closedInfinite(LocalDate.parse("2020-01-01")))
@ -184,9 +184,9 @@ class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTest {
// then // then
exactlyTheseMembershipsAreReturned( exactlyTheseMembershipsAreReturned(
result, result,
"Membership(M-1000101, LP First GmbH, D-1000111, [2022-10-01,), NONE)", "Membership(M-1000101, LEGAL First GmbH, D-1000111, [2022-10-01,), NONE)",
"Membership(M-1000202, LP Second e.K., D-1000212, [2022-10-01,), NONE)", "Membership(M-1000202, LEGAL Second e.K., D-1000212, [2022-10-01,), NONE)",
"Membership(M-1000303, IF Third OHG, D-1000313, [2022-10-01,), NONE)"); "Membership(M-1000303, SOLE_REPRESENTATION Third OHG, D-1000313, [2022-10-01,), NONE)");
} }
@Test @Test
@ -200,7 +200,7 @@ class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTest {
// then // then
exactlyTheseMembershipsAreReturned(result, exactlyTheseMembershipsAreReturned(result,
"Membership(M-1000101, LP First GmbH, D-1000111, [2022-10-01,), NONE)"); "Membership(M-1000101, LEGAL First GmbH, D-1000111, [2022-10-01,), NONE)");
} }
@Test @Test
@ -215,7 +215,7 @@ class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTest {
assertThat(result) assertThat(result)
.isNotNull() .isNotNull()
.extracting(Object::toString) .extracting(Object::toString)
.isEqualTo("Membership(M-1000202, LP Second e.K., D-1000212, [2022-10-01,), NONE)"); .isEqualTo("Membership(M-1000202, LEGAL Second e.K., D-1000212, [2022-10-01,), NONE)");
} }
} }

View File

@ -208,9 +208,9 @@ public class ImportOfficeData extends ContextBasedTest {
assertThat(toFormattedString(partners)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(partners)).isEqualToIgnoringWhitespace("""
{ {
17=partner(NP Mellies, Michael: Herr Michael Mellies ), 17=partner(NATURAL Mellies, Michael: Herr Michael Mellies ),
20=partner(LP JM GmbH: Herr Philip Meyer-Contract , JM GmbH), 20=partner(LEGAL JM GmbH: Herr Philip Meyer-Contract , JM GmbH),
22=partner(?? Test PS: Petra Schmidt , Test PS) 22=partner(LEGAL Test PS: Petra Schmidt , Test PS)
} }
"""); """);
assertThat(toFormattedString(contacts)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(contacts)).isEqualToIgnoringWhitespace("""
@ -225,38 +225,38 @@ public class ImportOfficeData extends ContextBasedTest {
"""); """);
assertThat(toFormattedString(persons)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(persons)).isEqualToIgnoringWhitespace("""
{ {
1101=person(personType='NP', tradeName='', familyName='Mellies', givenName='Michael'), 1101=person(personType='NATURAL', tradeName='', familyName='Mellies', givenName='Michael'),
1200=person(personType='LP', tradeName='JM e.K.', familyName='', givenName=''), 1200=person(personType='LEGAL', tradeName='JM e.K.', familyName='', givenName=''),
1201=person(personType='LP', tradeName='JM GmbH', familyName='Meyer-Billing', givenName='Jenny'), 1201=person(personType='LEGAL', tradeName='JM GmbH', familyName='Meyer-Billing', givenName='Jenny'),
1202=person(personType='LP', tradeName='JM GmbH', familyName='Meyer-Operation', givenName='Andrew'), 1202=person(personType='LEGAL', tradeName='JM GmbH', familyName='Meyer-Operation', givenName='Andrew'),
1203=person(personType='LP', tradeName='JM GmbH', familyName='Meyer-Contract', givenName='Philip'), 1203=person(personType='LEGAL', tradeName='JM GmbH', familyName='Meyer-Contract', givenName='Philip'),
1301=person(personType='??', tradeName='Test PS', familyName='Schmidt', givenName='Petra') 1301=person(personType='LEGAL', tradeName='Test PS', familyName='Schmidt', givenName='Petra')
} }
"""); """);
assertThat(toFormattedString(debitors)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(debitors)).isEqualToIgnoringWhitespace("""
{ {
17=debitor(D-1001700: NP Mellies, Michael: mih), 17=debitor(D-1001700: NATURAL Mellies, Michael: mih),
20=debitor(D-1002000: LP JM GmbH: xyz), 20=debitor(D-1002000: LEGAL JM GmbH: xyz),
22=debitor(D-1102200: ?? Test PS: xxx) 22=debitor(D-1102200: LEGAL Test PS: xxx)
} }
"""); """);
assertThat(toFormattedString(memberships)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(memberships)).isEqualToIgnoringWhitespace("""
{ {
17=Membership(M-1001700, NP Mellies, Michael, D-1001700, [2000-12-06,), NONE), 17=Membership(M-1001700, NATURAL Mellies, Michael, D-1001700, [2000-12-06,), NONE),
20=Membership(M-1002000, LP JM GmbH, D-1002000, [2000-12-06,2016-01-01), UNKNOWN), 20=Membership(M-1002000, LEGAL JM GmbH, D-1002000, [2000-12-06,2016-01-01), UNKNOWN),
22=Membership(M-1102200, ?? Test PS, D-1102200, [2021-04-01,), NONE) 22=Membership(M-1102200, LEGAL Test PS, D-1102200, [2021-04-01,), NONE)
} }
"""); """);
assertThat(toFormattedString(relationships)).isEqualToIgnoringWhitespace(""" assertThat(toFormattedString(relationships)).isEqualToIgnoringWhitespace("""
{ {
2000000=rel(relAnchor='NP Mellies, Michael', relType='OPERATIONS', relHolder='NP Mellies, Michael', contact='Herr Michael Mellies '), 2000000=rel(relAnchor='NATURAL Mellies, Michael', relType='OPERATIONS', relHolder='NATURAL Mellies, Michael', contact='Herr Michael Mellies '),
2000001=rel(relAnchor='LP JM GmbH', relType='EX_PARTNER', relHolder='LP JM e.K.', contact='JM e.K.'), 2000001=rel(relAnchor='LEGAL JM GmbH', relType='EX_PARTNER', relHolder='LEGAL JM e.K.', contact='JM e.K.'),
2000002=rel(relAnchor='LP JM GmbH', relType='OPERATIONS', relHolder='LP JM GmbH', contact='Herr Andrew Meyer-Operation , JM GmbH'), 2000002=rel(relAnchor='LEGAL JM GmbH', relType='OPERATIONS', relHolder='LEGAL JM GmbH', contact='Herr Andrew Meyer-Operation , JM GmbH'),
2000003=rel(relAnchor='LP JM GmbH', relType='VIP_CONTACT', relHolder='LP JM GmbH', contact='Herr Andrew Meyer-Operation , JM GmbH'), 2000003=rel(relAnchor='LEGAL JM GmbH', relType='VIP_CONTACT', relHolder='LEGAL JM GmbH', contact='Herr Andrew Meyer-Operation , JM GmbH'),
2000004=rel(relAnchor='LP JM GmbH', relType='REPRESENTATIVE', relHolder='LP JM GmbH', contact='Herr Philip Meyer-Contract , JM GmbH'), 2000004=rel(relAnchor='LEGAL JM GmbH', relType='REPRESENTATIVE', relHolder='LEGAL JM GmbH', contact='Herr Philip Meyer-Contract , JM GmbH'),
2000005=rel(relAnchor='?? Test PS', relType='OPERATIONS', relHolder='?? Test PS', contact='Petra Schmidt , Test PS'), 2000005=rel(relAnchor='LEGAL Test PS', relType='OPERATIONS', relHolder='LEGAL Test PS', contact='Petra Schmidt , Test PS'),
2000006=rel(relAnchor='?? Test PS', relType='REPRESENTATIVE', relHolder='?? Test PS', contact='Petra Schmidt , Test PS'), 2000006=rel(relAnchor='LEGAL Test PS', relType='REPRESENTATIVE', relHolder='LEGAL Test PS', contact='Petra Schmidt , Test PS'),
2000007=rel(relAnchor='NP Mellies, Michael', relType='REPRESENTATIVE', relHolder='NP Mellies, Michael', contact='Herr Michael Mellies ') 2000007=rel(relAnchor='NATURAL Mellies, Michael', relType='REPRESENTATIVE', relHolder='NATURAL Mellies, Michael', contact='Herr Michael Mellies ')
} }
"""); """);
} }
@ -794,22 +794,17 @@ public class ImportOfficeData extends ContextBasedTest {
private static void determinePersonType(final HsOfficePersonEntity person, final String roles) { private static void determinePersonType(final HsOfficePersonEntity person, final String roles) {
if (person.getTradeName().isBlank()) { if (person.getTradeName().isBlank()) {
person.setPersonType(HsOfficePersonType.NATURAL_PERSON); person.setPersonType(HsOfficePersonType.NATURAL);
} else } else if (roles.contains("partner")) {
// contractual && !partner with a firm and a natural person name person.setPersonType(HsOfficePersonType.LEGAL);
// should actually be split up into two persons } else if (roles.contains("contractual") &&
// but the legacy database consists such records
if (roles.contains("contractual") && !roles.contains("partner") &&
!person.getFamilyName().isBlank() && !person.getGivenName().isBlank()) { !person.getFamilyName().isBlank() && !person.getGivenName().isBlank()) {
person.setPersonType(HsOfficePersonType.NATURAL_PERSON); person.setPersonType(HsOfficePersonType.NATURAL);
} else if ( endsWithWord(person.getTradeName(), "e.K.", "e.G.", "eG", "GmbH", "AG") ) { } else if ( endsWithWord(person.getTradeName(), "e.K.", "e.G.", "eG", "GmbH", "AG") ) {
person.setPersonType(HsOfficePersonType.LEGAL_PERSON); person.setPersonType(HsOfficePersonType.LEGAL);
} else if ( endsWithWord(person.getTradeName(), "OHG") ) {
person.setPersonType(HsOfficePersonType.INCORPORATED_FIRM);
} else if ( endsWithWord(person.getTradeName(), "GbR") ) {
person.setPersonType(HsOfficePersonType.INCORPORATED_FIRM);
} else { } else {
person.setPersonType(HsOfficePersonType.UNKNOWN_PERSON_TYPE); // TODO: detect the other person types as soon as we've switche to the new person types
person.setPersonType(HsOfficePersonType.UNKNOWN);
} }
} }
@ -1035,7 +1030,10 @@ class OrderedDependedTestsExtension implements TestWatcher, BeforeEachCallback {
} }
@Override @Override
public void beforeEach(final ExtensionContext extensionContext) throws Exception { public void beforeEach(final ExtensionContext extensionContext) {
if (!previousTestsPassed) {
System.err.println("ignoring because previous fest has failed");
}
assumeThat(previousTestsPassed).isTrue(); assumeThat(previousTestsPassed).isTrue();
} }
} }

View File

@ -97,7 +97,7 @@ class HsOfficePartnerControllerAcceptanceTest {
"details": { "registrationOffice": "Hamburg" } "details": { "registrationOffice": "Hamburg" }
}, },
{ {
"person": { "personType": "INCORPORATED_FIRM" }, "person": { "personType": "SOLE_REPRESENTATION" },
"contact": { "label": "forth contact" }, "contact": { "label": "forth contact" },
"details": { "registrationOffice": "Hamburg" } "details": { "registrationOffice": "Hamburg" }
} }

View File

@ -13,7 +13,7 @@ class HsOfficePartnerEntityUnitTest {
void toStringContainsPersonAndContact() { void toStringContainsPersonAndContact() {
final var given = HsOfficePartnerEntity.builder() final var given = HsOfficePartnerEntity.builder()
.person(HsOfficePersonEntity.builder() .person(HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.build()) .build())
.contact(HsOfficeContactEntity.builder().label("some label").build()) .contact(HsOfficeContactEntity.builder().label("some label").build())
@ -21,14 +21,14 @@ class HsOfficePartnerEntityUnitTest {
final var result = given.toString(); final var result = given.toString();
assertThat(result).isEqualTo("partner(LP some trade name: some label)"); assertThat(result).isEqualTo("partner(LEGAL some trade name: some label)");
} }
@Test @Test
void toShortStringContainsPersonAndContact() { void toShortStringContainsPersonAndContact() {
final var given = HsOfficePartnerEntity.builder() final var given = HsOfficePartnerEntity.builder()
.person(HsOfficePersonEntity.builder() .person(HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.build()) .build())
.contact(HsOfficeContactEntity.builder().label("some label").build()) .contact(HsOfficeContactEntity.builder().label("some label").build())
@ -36,6 +36,6 @@ class HsOfficePartnerEntityUnitTest {
final var result = given.toShortString(); final var result = given.toShortString();
assertThat(result).isEqualTo("LP some trade name"); assertThat(result).isEqualTo("LEGAL some trade name");
} }
} }

View File

@ -177,9 +177,9 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTest {
// then // then
allThesePartnersAreReturned( allThesePartnersAreReturned(
result, result,
"partner(IF Third OHG: third contact)", "partner(SOLE_REPRESENTATION Third OHG: third contact)",
"partner(LP Second e.K.: second contact)", "partner(LEGAL Second e.K.: second contact)",
"partner(LP First GmbH: first contact)"); "partner(LEGAL First GmbH: first contact)");
} }
@Test @Test
@ -191,7 +191,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTest {
final var result = partnerRepo.findPartnerByOptionalNameLike(null); final var result = partnerRepo.findPartnerByOptionalNameLike(null);
// then: // then:
exactlyThesePartnersAreReturned(result, "partner(LP First GmbH: first contact)"); exactlyThesePartnersAreReturned(result, "partner(LEGAL First GmbH: first contact)");
} }
} }
@ -207,7 +207,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTest {
final var result = partnerRepo.findPartnerByOptionalNameLike("third contact"); final var result = partnerRepo.findPartnerByOptionalNameLike("third contact");
// then // then
exactlyThesePartnersAreReturned(result, "partner(IF Third OHG: third contact)"); exactlyThesePartnersAreReturned(result, "partner(SOLE_REPRESENTATION Third OHG: third contact)");
} }
} }
@ -226,7 +226,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTest {
assertThat(result) assertThat(result)
.isNotNull() .isNotNull()
.extracting(Object::toString) .extracting(Object::toString)
.isEqualTo("partner(LP First GmbH: first contact)"); .isEqualTo("partner(LEGAL First GmbH: first contact)");
} }
} }

View File

@ -4,7 +4,7 @@ import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity;
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity; import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonEntity;
import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.LEGAL_PERSON; import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.LEGAL;
public class TestHsOfficePartner { public class TestHsOfficePartner {
@ -14,7 +14,7 @@ public class TestHsOfficePartner {
return HsOfficePartnerEntity.builder() return HsOfficePartnerEntity.builder()
.partnerNumber(10001) .partnerNumber(10001)
.person(HsOfficePersonEntity.builder() .person(HsOfficePersonEntity.builder()
.personType(LEGAL_PERSON) .personType(LEGAL)
.tradeName(tradeName) .tradeName(tradeName)
.build()) .build())
.contact(HsOfficeContactEntity.builder() .contact(HsOfficeContactEntity.builder()

View File

@ -69,49 +69,49 @@ class HsOfficePersonControllerAcceptanceTest {
.body("", lenientlyEquals(""" .body("", lenientlyEquals("""
[ [
{ {
"personType": "LEGAL_PERSON", "personType": "LEGAL",
"tradeName": "First GmbH", "tradeName": "First GmbH",
"givenName": null, "givenName": null,
"familyName": null "familyName": null
}, },
{ {
"personType": "LEGAL_PERSON", "personType": "LEGAL",
"tradeName": "Second e.K.", "tradeName": "Second e.K.",
"givenName": "Miller", "givenName": "Miller",
"familyName": "Sandra" "familyName": "Sandra"
}, },
{ {
"personType": "INCORPORATED_FIRM", "personType": "SOLE_REPRESENTATION",
"tradeName": "Third OHG", "tradeName": "Third OHG",
"givenName": null, "givenName": null,
"familyName": null "familyName": null
}, },
{ {
"personType": "INCORPORATED_FIRM", "personType": "SOLE_REPRESENTATION",
"tradeName": "Fourth e.G.", "tradeName": "Fourth e.G.",
"givenName": null, "givenName": null,
"familyName": null "familyName": null
}, },
{ {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"tradeName": null, "tradeName": null,
"givenName": "Anita", "givenName": "Anita",
"familyName": "Bessler" "familyName": "Bessler"
}, },
{ {
"personType": "UNINCORPORATED_FIRM", "personType": "JOINT_REPRESENTATION",
"tradeName": "Erben Bessler", "tradeName": "Erben Bessler",
"givenName": "Bessler", "givenName": "Bessler",
"familyName": "Mel" "familyName": "Mel"
}, },
{ {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"tradeName": null, "tradeName": null,
"givenName": "Peter", "givenName": "Peter",
"familyName": "Smith" "familyName": "Smith"
}, },
{ {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"tradeName": null, "tradeName": null,
"givenName": "Paul", "givenName": "Paul",
"familyName": "Winkler" "familyName": "Winkler"
@ -136,7 +136,7 @@ class HsOfficePersonControllerAcceptanceTest {
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body(""" .body("""
{ {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"familyName": "Tester", "familyName": "Tester",
"givenName": "Temp Testi" "givenName": "Temp Testi"
} }
@ -148,7 +148,7 @@ class HsOfficePersonControllerAcceptanceTest {
.statusCode(201) .statusCode(201)
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body("uuid", isUuidValid()) .body("uuid", isUuidValid())
.body("personType", is("NATURAL_PERSON")) .body("personType", is("NATURAL"))
.body("familyName", is("Tester")) .body("familyName", is("Tester"))
.body("givenName", is("Temp Testi")) .body("givenName", is("Temp Testi"))
.header("Location", startsWith("http://localhost")) .header("Location", startsWith("http://localhost"))
@ -224,7 +224,7 @@ class HsOfficePersonControllerAcceptanceTest {
.contentType("application/json") .contentType("application/json")
.body("", lenientlyEquals(""" .body("", lenientlyEquals("""
{ {
"personType": "UNINCORPORATED_FIRM", "personType": "JOINT_REPRESENTATION",
"tradeName": "Erben Bessler", "tradeName": "Erben Bessler",
"givenName": "Bessler", "givenName": "Bessler",
"familyName": "Mel" "familyName": "Mel"
@ -249,7 +249,7 @@ class HsOfficePersonControllerAcceptanceTest {
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body(""" .body("""
{ {
"personType": "UNINCORPORATED_FIRM", "personType": "JOINT_REPRESENTATION",
"tradeName": "Temp Trade Name - patched", "tradeName": "Temp Trade Name - patched",
"familyName": "Temp Family Name - patched", "familyName": "Temp Family Name - patched",
"givenName": "Temp Given Name - patched" "givenName": "Temp Given Name - patched"
@ -262,7 +262,7 @@ class HsOfficePersonControllerAcceptanceTest {
.statusCode(200) .statusCode(200)
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body("uuid", isUuidValid()) .body("uuid", isUuidValid())
.body("personType", is("UNINCORPORATED_FIRM")) .body("personType", is("JOINT_REPRESENTATION"))
.body("tradeName", is("Temp Trade Name - patched")) .body("tradeName", is("Temp Trade Name - patched"))
.body("familyName", is("Temp Family Name - patched")) .body("familyName", is("Temp Family Name - patched"))
.body("givenName", is("Temp Given Name - patched")); .body("givenName", is("Temp Given Name - patched"));
@ -272,7 +272,7 @@ class HsOfficePersonControllerAcceptanceTest {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
assertThat(personRepo.findByUuid(givenPerson.getUuid())).isPresent().get() assertThat(personRepo.findByUuid(givenPerson.getUuid())).isPresent().get()
.matches(person -> { .matches(person -> {
assertThat(person.getPersonType()).isEqualTo(HsOfficePersonType.UNINCORPORATED_FIRM); assertThat(person.getPersonType()).isEqualTo(HsOfficePersonType.JOINT_REPRESENTATION);
assertThat(person.getTradeName()).isEqualTo("Temp Trade Name - patched"); assertThat(person.getTradeName()).isEqualTo("Temp Trade Name - patched");
assertThat(person.getFamilyName()).isEqualTo("Temp Family Name - patched"); assertThat(person.getFamilyName()).isEqualTo("Temp Family Name - patched");
assertThat(person.getGivenName()).isEqualTo("Temp Given Name - patched"); assertThat(person.getGivenName()).isEqualTo("Temp Given Name - patched");
@ -302,7 +302,7 @@ class HsOfficePersonControllerAcceptanceTest {
.statusCode(200) .statusCode(200)
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body("uuid", isUuidValid()) .body("uuid", isUuidValid())
.body("personType", is(givenPerson.getPersonType().name())) .body("personType", is(givenPerson.getPersonType().toString()))
.body("tradeName", is(givenPerson.getTradeName())) .body("tradeName", is(givenPerson.getTradeName()))
.body("familyName", is("Temp Family Name - patched")) .body("familyName", is("Temp Family Name - patched"))
.body("givenName", is("Temp Given Name - patched")); .body("givenName", is("Temp Given Name - patched"));
@ -389,7 +389,7 @@ class HsOfficePersonControllerAcceptanceTest {
context.define(creatingUser); context.define(creatingUser);
final var newPerson = HsOfficePersonEntity.builder() final var newPerson = HsOfficePersonEntity.builder()
.uuid(UUID.randomUUID()) .uuid(UUID.randomUUID())
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("Temp " + Context.getCallerMethodNameFromStackFrame(2)) .tradeName("Temp " + Context.getCallerMethodNameFromStackFrame(2))
.familyName(RandomStringUtils.randomAlphabetic(10) + "@example.org") .familyName(RandomStringUtils.randomAlphabetic(10) + "@example.org")
.givenName("Temp Given Name " + RandomStringUtils.randomAlphabetic(10)) .givenName("Temp Given Name " + RandomStringUtils.randomAlphabetic(10))

View File

@ -22,7 +22,7 @@ class HsOfficePersonEntityPatcherUnitTest extends PatchUnitTestBase<
protected HsOfficePersonEntity newInitialEntity() { protected HsOfficePersonEntity newInitialEntity() {
final var entity = new HsOfficePersonEntity(); final var entity = new HsOfficePersonEntity();
entity.setUuid(INITIAL_PERSON_UUID); entity.setUuid(INITIAL_PERSON_UUID);
entity.setPersonType(HsOfficePersonType.LEGAL_PERSON); entity.setPersonType(HsOfficePersonType.LEGAL);
entity.setTradeName("initial@example.org"); entity.setTradeName("initial@example.org");
entity.setFamilyName("initial postal address"); entity.setFamilyName("initial postal address");
entity.setGivenName("+01 100 123456789"); entity.setGivenName("+01 100 123456789");
@ -45,9 +45,9 @@ class HsOfficePersonEntityPatcherUnitTest extends PatchUnitTestBase<
new SimpleProperty<>( new SimpleProperty<>(
"personType", "personType",
HsOfficePersonPatchResource::setPersonType, HsOfficePersonPatchResource::setPersonType,
HsOfficePersonTypeResource.INCORPORATED_FIRM, HsOfficePersonTypeResource.SOLE_REPRESENTATION,
HsOfficePersonEntity::setPersonType, HsOfficePersonEntity::setPersonType,
HsOfficePersonType.INCORPORATED_FIRM) HsOfficePersonType.SOLE_REPRESENTATION)
.notNullable(), .notNullable(),
new JsonNullableProperty<>( new JsonNullableProperty<>(
"tradeName", "tradeName",

View File

@ -11,32 +11,32 @@ class HsOfficePersonEntityUnitTest {
@Test @Test
void getDisplayReturnsTradeNameIfAvailable() { void getDisplayReturnsTradeNameIfAvailable() {
final var givenPersonEntity = HsOfficePersonEntity.builder() final var givenPersonEntity = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.build(); .build();
final var actualDisplay = givenPersonEntity.toShortString(); final var actualDisplay = givenPersonEntity.toShortString();
assertThat(actualDisplay).isEqualTo("LP some trade name"); assertThat(actualDisplay).isEqualTo("LEGAL some trade name");
} }
@Test @Test
void getDisplayReturnsFamilyAndGivenNameIfNoTradeNameAvailable() { void getDisplayReturnsFamilyAndGivenNameIfNoTradeNameAvailable() {
final var givenPersonEntity = HsOfficePersonEntity.builder() final var givenPersonEntity = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.NATURAL_PERSON) .personType(HsOfficePersonType.NATURAL)
.familyName("some family name") .familyName("some family name")
.givenName("some given name") .givenName("some given name")
.build(); .build();
final var actualDisplay = givenPersonEntity.toShortString(); final var actualDisplay = givenPersonEntity.toShortString();
assertThat(actualDisplay).isEqualTo("NP some family name, some given name"); assertThat(actualDisplay).isEqualTo("NATURAL some family name, some given name");
} }
@Test @Test
void toShortStringWithTradeNameReturnsTradeName() { void toShortStringWithTradeNameReturnsTradeName() {
final var givenPersonEntity = HsOfficePersonEntity.builder() final var givenPersonEntity = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.familyName("some family name") .familyName("some family name")
.givenName("some given name") .givenName("some given name")
@ -44,27 +44,27 @@ class HsOfficePersonEntityUnitTest {
final var actualDisplay = givenPersonEntity.toShortString(); final var actualDisplay = givenPersonEntity.toShortString();
assertThat(actualDisplay).isEqualTo("LP some trade name"); assertThat(actualDisplay).isEqualTo("LEGAL some trade name");
} }
@Test @Test
void toShortStringWithoutTradeNameReturnsFamilyAndGivenName() { void toShortStringWithoutTradeNameReturnsFamilyAndGivenName() {
final var givenPersonEntity = HsOfficePersonEntity.builder() final var givenPersonEntity = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.NATURAL_PERSON) .personType(HsOfficePersonType.NATURAL)
.familyName("some family name") .familyName("some family name")
.givenName("some given name") .givenName("some given name")
.build(); .build();
final var actualDisplay = givenPersonEntity.toShortString(); final var actualDisplay = givenPersonEntity.toShortString();
assertThat(actualDisplay).isEqualTo("NP some family name, some given name"); assertThat(actualDisplay).isEqualTo("NATURAL some family name, some given name");
} }
@Test @Test
void toStringWithAllFieldsReturnsAllButUuid() { void toStringWithAllFieldsReturnsAllButUuid() {
final var givenPersonEntity = HsOfficePersonEntity.builder() final var givenPersonEntity = HsOfficePersonEntity.builder()
.uuid(UUID.randomUUID()) .uuid(UUID.randomUUID())
.personType(HsOfficePersonType.NATURAL_PERSON) .personType(HsOfficePersonType.NATURAL)
.tradeName("some trade name") .tradeName("some trade name")
.familyName("some family name") .familyName("some family name")
.givenName("some given name") .givenName("some given name")
@ -72,7 +72,7 @@ class HsOfficePersonEntityUnitTest {
final var actualDisplay = givenPersonEntity.toString(); 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='NATURAL', tradeName='some trade name', familyName='some family name', givenName='some given name')");
} }
@Test @Test

View File

@ -144,10 +144,10 @@ class HsOfficePersonRepositoryIntegrationTest extends ContextBasedTest {
// then // then
allThesePersonsAreReturned( allThesePersonsAreReturned(
result, result,
"NP Smith, Peter", "NATURAL Smith, Peter",
"LP Second e.K.", "LEGAL Second e.K.",
"IF Third OHG", "SOLE_REPRESENTATION Third OHG",
"UF Erben Bessler"); "JOINT_REPRESENTATION Erben Bessler");
} }
@Test @Test

View File

@ -1,34 +0,0 @@
package net.hostsharing.hsadminng.hs.office.person;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
class HsOfficePersonTypeConverterUnitTest {
final HsOfficePersonTypeConverter converter = new HsOfficePersonTypeConverter();
@ParameterizedTest
@EnumSource(HsOfficePersonType.class)
void mapsToDatabaseValue(final HsOfficePersonType given) {
assertThat(converter.convertToDatabaseColumn(given)).isEqualTo(given.shortName);
}
@Test
void mapsNullToDatabaseValue() {
assertThat(converter.convertToDatabaseColumn(null)).isEqualTo(null);
}
@ParameterizedTest
@EnumSource(HsOfficePersonType.class)
void mapsFromDatabaseValue(final HsOfficePersonType given) {
assertThat(converter.convertToEntityAttribute(given.shortName)).isEqualTo(given);
}
@Test
void mapsNullFromDatabaseValue() {
assertThat(converter.convertToEntityAttribute(null)).isEqualTo(null);
}
}

View File

@ -7,7 +7,7 @@ public class TestHsOfficePerson {
static public HsOfficePersonEntity hsOfficePerson(final String tradeName) { static public HsOfficePersonEntity hsOfficePerson(final String tradeName) {
return HsOfficePersonEntity.builder() return HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.NATURAL_PERSON) .personType(HsOfficePersonType.NATURAL)
.tradeName(tradeName) .tradeName(tradeName)
.build(); .build();
} }

View File

@ -83,11 +83,11 @@ class HsOfficeRelationshipControllerAcceptanceTest {
[ [
{ {
"relAnchor": { "relAnchor": {
"personType": "INCORPORATED_FIRM", "personType": "SOLE_REPRESENTATION",
"tradeName": "Third OHG" "tradeName": "Third OHG"
}, },
"relHolder": { "relHolder": {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"givenName": "Peter", "givenName": "Peter",
"familyName": "Smith" "familyName": "Smith"
}, },
@ -96,13 +96,13 @@ class HsOfficeRelationshipControllerAcceptanceTest {
}, },
{ {
"relAnchor": { "relAnchor": {
"personType": "LEGAL_PERSON", "personType": "LEGAL",
"tradeName": "Second e.K.", "tradeName": "Second e.K.",
"givenName": "Miller", "givenName": "Miller",
"familyName": "Sandra" "familyName": "Sandra"
}, },
"relHolder": { "relHolder": {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"givenName": "Peter", "givenName": "Peter",
"familyName": "Smith" "familyName": "Smith"
}, },
@ -111,11 +111,11 @@ class HsOfficeRelationshipControllerAcceptanceTest {
}, },
{ {
"relAnchor": { "relAnchor": {
"personType": "LEGAL_PERSON", "personType": "LEGAL",
"tradeName": "First GmbH" "tradeName": "First GmbH"
}, },
"relHolder": { "relHolder": {
"personType": "NATURAL_PERSON", "personType": "NATURAL",
"tradeName": null, "tradeName": null,
"givenName": "Peter", "givenName": "Peter",
"familyName": "Smith" "familyName": "Smith"

View File

@ -10,11 +10,11 @@ import static org.junit.jupiter.api.Assertions.*;
class HsOfficeRelationshipEntityUnitTest { class HsOfficeRelationshipEntityUnitTest {
private HsOfficePersonEntity anchor = HsOfficePersonEntity.builder() private HsOfficePersonEntity anchor = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.LEGAL_PERSON) .personType(HsOfficePersonType.LEGAL)
.tradeName("some trade name") .tradeName("some trade name")
.build(); .build();
private HsOfficePersonEntity holder = HsOfficePersonEntity.builder() private HsOfficePersonEntity holder = HsOfficePersonEntity.builder()
.personType(HsOfficePersonType.NATURAL_PERSON) .personType(HsOfficePersonType.NATURAL)
.familyName("Meier") .familyName("Meier")
.givenName("Mellie") .givenName("Mellie")
.build(); .build();
@ -27,6 +27,6 @@ class HsOfficeRelationshipEntityUnitTest {
.relHolder(holder) .relHolder(holder)
.build(); .build();
assertThat(given.toShortString()).isEqualTo("rel(relAnchor='LP some trade name', relType='REPRESENTATIVE', relHolder='NP Meier, Mellie')"); assertThat(given.toShortString()).isEqualTo("rel(relAnchor='LEGAL some trade name', relType='REPRESENTATIVE', relHolder='NATURAL Meier, Mellie')");
} }
} }

View File

@ -159,9 +159,9 @@ class HsOfficeRelationshipRepositoryIntegrationTest extends ContextBasedTest {
// then // then
allTheseRelationshipsAreReturned( allTheseRelationshipsAreReturned(
result, result,
"rel(relAnchor='LP First GmbH', relType='REPRESENTATIVE', relHolder='NP Smith, Peter', contact='first contact')", "rel(relAnchor='LEGAL First GmbH', relType='REPRESENTATIVE', relHolder='NATURAL Smith, Peter', contact='first contact')",
"rel(relAnchor='IF Third OHG', relType='REPRESENTATIVE', relHolder='NP Smith, Peter', contact='third contact')", "rel(relAnchor='SOLE_REPRESENTATION Third OHG', relType='REPRESENTATIVE', relHolder='NATURAL Smith, Peter', contact='third contact')",
"rel(relAnchor='LP Second e.K.', relType='REPRESENTATIVE', relHolder='NP Smith, Peter', contact='second contact')"); "rel(relAnchor='LEGAL Second e.K.', relType='REPRESENTATIVE', relHolder='NATURAL Smith, Peter', contact='second contact')");
} }
@Test @Test
@ -176,7 +176,7 @@ class HsOfficeRelationshipRepositoryIntegrationTest extends ContextBasedTest {
// then: // then:
exactlyTheseRelationshipsAreReturned( exactlyTheseRelationshipsAreReturned(
result, result,
"rel(relAnchor='LP First GmbH', relType='REPRESENTATIVE', relHolder='NP Smith, Peter', contact='first contact')"); "rel(relAnchor='LEGAL First GmbH', relType='REPRESENTATIVE', relHolder='NATURAL Smith, Peter', contact='first contact')");
} }
} }

View File

@ -376,7 +376,7 @@ class HsOfficeSepaMandateControllerAcceptanceTest {
context.define("superuser-alex@hostsharing.net"); context.define("superuser-alex@hostsharing.net");
assertThat(sepaMandateRepo.findByUuid(givenSepaMandate.getUuid())).isPresent().get() assertThat(sepaMandateRepo.findByUuid(givenSepaMandate.getUuid())).isPresent().get()
.matches(mandate -> { .matches(mandate -> {
assertThat(mandate.getDebitor().toString()).isEqualTo("debitor(D-1000111: LP First GmbH: fir)"); assertThat(mandate.getDebitor().toString()).isEqualTo("debitor(D-1000111: LEGAL First GmbH: fir)");
assertThat(mandate.getBankAccount().toShortString()).isEqualTo("First GmbH"); assertThat(mandate.getBankAccount().toShortString()).isEqualTo("First GmbH");
assertThat(mandate.getReference()).isEqualTo("temp ref CAT Z - patched"); assertThat(mandate.getReference()).isEqualTo("temp ref CAT Z - patched");
assertThat(mandate.getValidFrom()).isEqualTo("2020-06-05"); assertThat(mandate.getValidFrom()).isEqualTo("2020-06-05");
@ -417,7 +417,7 @@ class HsOfficeSepaMandateControllerAcceptanceTest {
// finally, the sepaMandate is actually updated // finally, the sepaMandate is actually updated
assertThat(sepaMandateRepo.findByUuid(givenSepaMandate.getUuid())).isPresent().get() assertThat(sepaMandateRepo.findByUuid(givenSepaMandate.getUuid())).isPresent().get()
.matches(mandate -> { .matches(mandate -> {
assertThat(mandate.getDebitor().toString()).isEqualTo("debitor(D-1000111: LP First GmbH: fir)"); assertThat(mandate.getDebitor().toString()).isEqualTo("debitor(D-1000111: LEGAL First GmbH: fir)");
assertThat(mandate.getBankAccount().toShortString()).isEqualTo("First GmbH"); assertThat(mandate.getBankAccount().toShortString()).isEqualTo("First GmbH");
assertThat(mandate.getReference()).isEqualTo("temp ref CAT Z"); assertThat(mandate.getReference()).isEqualTo("temp ref CAT Z");
assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,2023-01-01)"); assertThat(mandate.getValidity().asString()).isEqualTo("[2022-11-01,2023-01-01)");