From 9f1bb284e7597bf22f24c51ced8101662cd299cb Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Thu, 6 Mar 2025 13:38:24 +0100 Subject: [PATCH] add scenario shouldCreateSelfDebitorForPartnerWithIdenticalContactData --- .../partner/HsOfficePartnerController.java | 11 ++--- .../scenarios/HsOfficeScenarioTests.java | 21 ++++++++- ...torForPartnerWithIdenticalContactData.java | 45 +++++++++++++++++++ 3 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/debitor/CreateSelfDebitorForPartnerWithIdenticalContactData.java diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java index f7440eaf..2c519849 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerController.java @@ -185,18 +185,19 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { private void optionallyUpdateRelatedRelations(final HsOfficePartnerRbacEntity saved, final HsOfficePersonRealEntity previousPartnerPerson) { final var partnerPersonHasChanged = !saved.getPartnerRel().getHolder().getUuid().equals(previousPartnerPerson.getUuid()); if (partnerPersonHasChanged) { - em.createNativeQuery(""" + final var count = em.createNativeQuery(""" UPDATE hs_office.relation - SET anchorUuid = :newPartnerPersonUuid - WHERE anchorUuid = :oldPartnerPersonUuid + SET holderUuid = :newPartnerPersonUuid + WHERE type = 'DEBITOR' AND holderUuid = :oldPartnerPersonUuid AND anchorUuid = :oldPartnerPersonUuid """) .setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid()) .setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid()) .executeUpdate(); + System.out.println(count); // FIXME: remove em.createNativeQuery(""" UPDATE hs_office.relation - SET holderUuid = :newPartnerPersonUuid - WHERE holderUuid = :oldPartnerPersonUuid AND type = 'DEBITOR' + SET anchorUuid = :newPartnerPersonUuid + WHERE anchorUuid = :oldPartnerPersonUuid """) .setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid()) .setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid()) diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/HsOfficeScenarioTests.java b/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/HsOfficeScenarioTests.java index 646896e9..e643ea8a 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/HsOfficeScenarioTests.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/HsOfficeScenarioTests.java @@ -7,6 +7,7 @@ import net.hostsharing.hsadminng.hs.office.scenarios.contact.RemovePhoneNumberFr import net.hostsharing.hsadminng.hs.office.scenarios.contact.ReplaceContactData; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateExternalDebitorForPartner; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSelfDebitorForPartner; +import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSelfDebitorForPartnerWithIdenticalContactData; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSepaMandateForDebitor; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DeleteDebitor; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DontDeleteDefaultDebitor; @@ -265,11 +266,27 @@ class HsOfficeScenarioTests extends ScenarioTest { @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class DebitorScenarios { + @Test + @Order(2000) + @Requires("Partner: P-31011 - Michelle Matthieu") + @Produces("Debitor: D-3101100 - Michelle Matthieu") + void shouldCreateSelfDebitorForPartnerWithIdenticalContactData() { + new CreateSelfDebitorForPartnerWithIdenticalContactData(scenarioTest) + .given("partnerNumber", "P-31011") + .given("debitorNumberSuffix", "00") // TODO.impl: could be assigned automatically, but is not yet + .given("billable", true) + .given("vatBusiness", false) + .given("vatReverseCharge", false) + .given("defaultPrefix", "mim") + .doRun() + .keep(); + } + @Test @Order(2010) @Requires("Partner: P-31010 - Test AG") @Produces("Debitor: D-3101000 - Test AG - main debitor") - void shouldCreateSelfDebitorForPartner() { + void shouldCreateSelfDebitorForPartnerWithDistinctContactData() { new CreateSelfDebitorForPartner(scenarioTest) .given("partnerPersonTradeName", "Test AG") .given("billingContactCaption", "Test AG - billing department") @@ -654,7 +671,7 @@ class HsOfficeScenarioTests extends ScenarioTest { @Test @Order(6010) - @Requires("Partner: P-31011 - Michelle Matthieu") + @Requires("Debitor: D-3101100 - Michelle Matthieu") // which should also get updated void shouldReplaceDeceasedPartnerByCommunityOfHeirs() { new ReplaceDeceasedPartnerWithCommunityOfHeirs(scenarioTest) .given("partnerNumber", "P-31011") diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/debitor/CreateSelfDebitorForPartnerWithIdenticalContactData.java b/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/debitor/CreateSelfDebitorForPartnerWithIdenticalContactData.java new file mode 100644 index 00000000..1cb08ce4 --- /dev/null +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/scenarios/debitor/CreateSelfDebitorForPartnerWithIdenticalContactData.java @@ -0,0 +1,45 @@ +package net.hostsharing.hsadminng.hs.office.scenarios.debitor; + +import net.hostsharing.hsadminng.hs.scenarios.ScenarioTest; +import net.hostsharing.hsadminng.hs.scenarios.UseCase; +import org.springframework.http.HttpStatus; + +import static io.restassured.http.ContentType.JSON; +import static org.springframework.http.HttpStatus.CREATED; + +public class CreateSelfDebitorForPartnerWithIdenticalContactData + extends UseCase { + + public CreateSelfDebitorForPartnerWithIdenticalContactData(final ScenarioTest testSuite) { + super(testSuite); + } + + @Override + protected HttpResponse run() { + withTitle("Determine Partner-Person UUID", () -> + httpGet("/api/hs/office/partners/" + uriEncoded("%{partnerNumber}")) + .reportWithResponse().expecting(HttpStatus.OK).expecting(JSON) + .extractUuidAlias("partnerRel.holder.uuid", "partnerPersonUuid") + .extractUuidAlias("partnerRel.contact.uuid", "partnerContactUuid") + ); + + return httpPost("/api/hs/office/debitors", usingJsonBody(""" + { + "debitorRel": { + "anchor.uuid": ${partnerPersonUuid}, + "holder.uuid": ${partnerPersonUuid}, + "contact.uuid": ${partnerContactUuid} + }, + "debitorNumberSuffix": ${debitorNumberSuffix}, + "billable": ${billable}, + "vatId": ${vatId???}, + "vatCountryCode": ${vatCountryCode???}, + "vatBusiness": ${vatBusiness}, + "vatReverseCharge": ${vatReverseCharge}, + "defaultPrefix": ${defaultPrefix} + } + """)) + .expecting(CREATED).expecting(JSON); + } + +}