From c987cba53c782db80e5ce5c8fd1766342e79308c Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Mon, 5 Feb 2024 11:34:46 +0100 Subject: [PATCH] WIP --- .../bankaccount/HsOfficeBankAccountEntity.java | 2 +- .../hs/office/partner/HsOfficePartnerEntity.java | 8 +++++--- .../hsadminng/stringify/Stringify.java | 4 ++-- .../changelog/218-hs-office-person-test-data.sql | 2 +- .../changelog/223-hs-office-relationship-rbac.sql | 2 ++ .../db/changelog/233-hs-office-partner-rbac.sql | 14 +++++--------- .../234-hs-office-partner-details-rbac.sql | 2 +- .../HsOfficeBankAccountEntityUnitTest.java | 2 +- .../hs/office/migration/ImportOfficeData.java | 2 +- .../HsOfficePartnerRepositoryIntegrationTest.java | 15 ++++++++------- 10 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java index 4d067f68..9d28bb6f 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntity.java @@ -27,8 +27,8 @@ import static net.hostsharing.hsadminng.stringify.Stringify.stringify; public class HsOfficeBankAccountEntity implements HasUuid, Stringifyable { private static Stringify toString = stringify(HsOfficeBankAccountEntity.class, "bankAccount") + .withIdProp(HsOfficeBankAccountEntity::getIban) .withProp(Fields.holder, HsOfficeBankAccountEntity::getHolder) - .withProp(Fields.iban, HsOfficeBankAccountEntity::getIban) .withProp(Fields.bic, HsOfficeBankAccountEntity::getBic); @Id diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java index 75a1c53f..ba80a53d 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerEntity.java @@ -30,13 +30,15 @@ public class HsOfficePartnerEntity implements Stringifyable, HasUuid { public static final String PARTNER_NUMBER_TAG = "P-"; private static Stringify stringify = stringify(HsOfficePartnerEntity.class, "partner") - .withIdProp(HsOfficePartnerEntity::getPartnerNumber) + .withIdProp(HsOfficePartnerEntity::toShortString) .withProp(p -> ofNullable(p.getPartnerRole()) .map(HsOfficeRelationshipEntity::getRelHolder) - .map(HsOfficePersonEntity::toShortString)) + .map(HsOfficePersonEntity::toShortString) + .orElse(null)) .withProp(p -> ofNullable(p.getPartnerRole()) .map(HsOfficeRelationshipEntity::getContact) - .map(HsOfficeContactEntity::toShortString)) + .map(HsOfficeContactEntity::toShortString) + .orElse(null)) .withSeparator(", ") .quotedValues(false); diff --git a/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java b/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java index d03511e4..8cdf433b 100644 --- a/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java +++ b/src/main/java/net/hostsharing/hsadminng/stringify/Stringify.java @@ -70,8 +70,8 @@ public final class Stringify { }) .map(propVal -> propName(propVal, "=") + optionallyQuoted(propVal)) .collect(Collectors.joining(separator)); - return idProp == null - ? name + "(" + idProp + ": " + propValues + ")" + return idProp != null + ? name + "(" + idProp.apply(object) + ": " + propValues + ")" : name + "(" + propValues + ")"; } diff --git a/src/main/resources/db/changelog/218-hs-office-person-test-data.sql b/src/main/resources/db/changelog/218-hs-office-person-test-data.sql index 6d087754..bc5e32b6 100644 --- a/src/main/resources/db/changelog/218-hs-office-person-test-data.sql +++ b/src/main/resources/db/changelog/218-hs-office-person-test-data.sql @@ -67,7 +67,7 @@ do language plpgsql $$ call createHsOfficePersonTestData('NP', null, 'Fouler', 'Ellie'); call createHsOfficePersonTestData('LP', 'Second e.K.', 'Smith', 'Peter'); call createHsOfficePersonTestData('IF', 'Third OHG'); - call createHsOfficePersonTestData('IF', 'Fourth eG'); + call createHsOfficePersonTestData('LP', 'Fourth eG'); call createHsOfficePersonTestData('UF', 'Erben Bessler', 'Mel', 'Bessler'); call createHsOfficePersonTestData('NP', null, 'Bessler', 'Anita'); call createHsOfficePersonTestData('NP', null, 'Winkler', 'Paul'); diff --git a/src/main/resources/db/changelog/223-hs-office-relationship-rbac.sql b/src/main/resources/db/changelog/223-hs-office-relationship-rbac.sql index 03b0b748..cd4cb48a 100644 --- a/src/main/resources/db/changelog/223-hs-office-relationship-rbac.sql +++ b/src/main/resources/db/changelog/223-hs-office-relationship-rbac.sql @@ -42,6 +42,8 @@ begin if TG_OP = 'INSERT' then + + perform createRoleWithGrants( hsOfficeRelationshipOwner(NEW), permissions => array['*'], diff --git a/src/main/resources/db/changelog/233-hs-office-partner-rbac.sql b/src/main/resources/db/changelog/233-hs-office-partner-rbac.sql index 5e275af3..3aa82dc4 100644 --- a/src/main/resources/db/changelog/233-hs-office-partner-rbac.sql +++ b/src/main/resources/db/changelog/233-hs-office-partner-rbac.sql @@ -30,13 +30,7 @@ declare oldPartnerRole hs_office_relationship; newPartnerRole hs_office_relationship; - oldPersonX hs_office_person; - newPersonX hs_office_person; - - oldContactX hs_office_contact; - newContactX hs_office_contact; begin - select * from hs_office_relationship as r where r.uuid = NEW.partnerroleuuid into newPartnerRole; if TG_OP = 'INSERT' then @@ -46,7 +40,9 @@ begin perform createRoleWithGrants( hsOfficePartnerOwner(NEW), permissions => array['*'], - incomingSuperRoles => array[globalAdmin()] + incomingSuperRoles => array[globalAdmin()], + outgoingSubRoles => array[ + hsOfficeRelationshipOwner(newPartnerRole)] ); perform createRoleWithGrants( @@ -55,14 +51,14 @@ begin incomingSuperRoles => array[ hsOfficePartnerOwner(NEW)], outgoingSubRoles => array[ - hsOfficeRelationshipTenant(newPartnerRole)] + hsOfficeRelationshipAdmin(newPartnerRole)] ); perform createRoleWithGrants( hsOfficePartnerAgent(NEW), incomingSuperRoles => array[ hsOfficePartnerAdmin(NEW), - hsOfficeRelationshipAdmin(newPartnerRole)] + hsOfficeRelationshipAgent(newPartnerRole)] ); perform createRoleWithGrants( diff --git a/src/main/resources/db/changelog/234-hs-office-partner-details-rbac.sql b/src/main/resources/db/changelog/234-hs-office-partner-details-rbac.sql index ab94481e..bcc81b61 100644 --- a/src/main/resources/db/changelog/234-hs-office-partner-details-rbac.sql +++ b/src/main/resources/db/changelog/234-hs-office-partner-details-rbac.sql @@ -59,7 +59,7 @@ do language plpgsql $$ $$; -- TODO.refa: the code below could be moved to a generator, maybe even the code above. --- Additionally, the code below is not neccesary for all entities, specifiy when it is! +-- Additionally, the code below is not necessary for all entities, specify when it is! /** Used by the trigger to prevent the add-partner-details to current user respectively assumed roles. diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntityUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntityUnitTest.java index 9fea3b5e..acd6c8f3 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntityUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountEntityUnitTest.java @@ -19,7 +19,7 @@ class HsOfficeBankAccountEntityUnitTest { .iban("DE02370502990000684712") .bic("COKSDE33") .build(); - assertThat("" + givenBankAccount).isEqualTo("bankAccount(holder='given holder', iban='DE02370502990000684712', bic='COKSDE33')"); + assertThat(givenBankAccount.toString()).isEqualTo("bankAccount(DE02370502990000684712: holder='given holder', bic='COKSDE33')"); } @Test diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/migration/ImportOfficeData.java b/src/test/java/net/hostsharing/hsadminng/hs/office/migration/ImportOfficeData.java index 3c580f91..ceeb1280 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/migration/ImportOfficeData.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/migration/ImportOfficeData.java @@ -519,7 +519,7 @@ public class ImportOfficeData extends ContextBasedTest { jpaAttempt.transacted(() -> { context(rbacSuperuser); coopAssets.forEach(this::persist); - updateLegacyIds(coopShares, "hs_office_coopassetstransaction_legacy_id", "member_asset_id"); + updateLegacyIds(coopAssets, "hs_office_coopassetstransaction_legacy_id", "member_asset_id"); }).assertSuccessful(); } diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java index 4df748a0..b524dc2a 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerRepositoryIntegrationTest.java @@ -227,9 +227,11 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean // then allThesePartnersAreReturned( result, - "partner(IF Third OHG: third contact)", - "partner(LP Second e.K.: second contact)", - "partner(LP First GmbH: first contact)"); + "partner(P-10001: LP First GmbH, first contact)", + "partner(P-10002: LP Second e.K., second contact)", + "partner(P-10003: IF Third OHG, third contact)", + "partner(P-10004: LP Fourth eG, fourth contact)", + "partner(P-10010: NP Smith, Peter, sixth contact)"); } @Test @@ -241,7 +243,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean final var result = partnerRepo.findPartnerByOptionalNameLike(null); // then: - exactlyThesePartnersAreReturned(result, "partner(LP First GmbH: first contact)"); + exactlyThesePartnersAreReturned(result, "partner(P-10001: LP First GmbH: first contact)"); } } @@ -257,7 +259,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean final var result = partnerRepo.findPartnerByOptionalNameLike("third contact"); // then - exactlyThesePartnersAreReturned(result, "partner(IF Third OHG: third contact)"); + exactlyThesePartnersAreReturned(result, "partner(P-10003: IF Third OHG, third contact)"); } } @@ -276,7 +278,7 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean assertThat(result) .isNotNull() .extracting(Object::toString) - .isEqualTo("partner(LP First GmbH: first contact)"); + .isEqualTo("partner(P-10001: LP First GmbH, first contact)"); } } @@ -317,7 +319,6 @@ class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTestWithClean } @Test - @Disabled // TODO: enable once partner.person and partner.contact are removed public void partnerAgent_canNotUpdateRelatedPartner() { // given context("superuser-alex@hostsharing.net");