From 6f3c03e6b68b784bf543a36df4b68aea629b8f97 Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Sun, 23 Oct 2022 09:58:52 +0200 Subject: [PATCH] ModelMapper as Spring Bean --- .../HsOfficeBankAccountController.java | 13 ++-- .../contact/HsOfficeContactController.java | 15 ++--- ...OfficeCoopAssetsTransactionController.java | 62 ++++++++++--------- ...OfficeCoopSharesTransactionController.java | 10 +-- .../debitor/HsOfficeDebitorController.java | 44 ++++--------- .../HsOfficeMembershipController.java | 20 +++--- .../HsOfficeMembershipEntityPatcher.java | 8 ++- .../partner/HsOfficePartnerController.java | 58 ++++------------- .../person/HsOfficePersonController.java | 15 ++--- .../HsOfficeRelationshipController.java | 22 ++++--- .../HsOfficeSepaMandateController.java | 15 ++--- .../hostsharing/hsadminng/mapper/Mapper.java | 22 +++---- .../hsadminng/mapper/MapperConfiguration.java | 13 ++++ .../rbac/rbacgrant/RbacGrantController.java | 16 ++--- .../rbac/rbacrole/RbacRoleController.java | 11 ++-- .../rbac/rbacuser/RbacUserController.java | 17 ++--- .../test/cust/TestCustomerController.java | 14 ++--- .../test/pac/TestPackageController.java | 11 ++-- .../hs-office/hs-office-partner-schemas.yaml | 5 +- ...ceBankAccountControllerAcceptanceTest.java | 4 +- ...HsOfficeBankAccountControllerRestTest.java | 4 ++ ...eBankAccountRepositoryIntegrationTest.java | 10 +-- ...fficeContactRepositoryIntegrationTest.java | 8 +-- ...opAssetsTransactionControllerRestTest.java | 4 ++ ...sTransactionRepositoryIntegrationTest.java | 4 +- ...opSharesTransactionControllerRestTest.java | 4 ++ ...sTransactionRepositoryIntegrationTest.java | 4 +- ...OfficeDebitorControllerAcceptanceTest.java | 3 - ...fficeDebitorRepositoryIntegrationTest.java | 4 +- .../HsOfficeMembershipControllerRestTest.java | 7 +++ ...OfficeMembershipEntityPatcherUnitTest.java | 9 ++- ...ceMembershipRepositoryIntegrationTest.java | 4 +- ...OfficePartnerControllerAcceptanceTest.java | 19 +++--- ...fficePartnerRepositoryIntegrationTest.java | 4 +- ...OfficePersonRepositoryIntegrationTest.java | 8 +-- ...RelationshipRepositoryIntegrationTest.java | 5 +- ...eSepaMandateRepositoryIntegrationTest.java | 4 +- .../RbacGrantRepositoryIntegrationTest.java | 4 +- .../rbacrole/RbacRoleControllerRestTest.java | 36 ++++++----- .../RbacRoleRepositoryIntegrationTest.java | 5 +- .../rbacuser/RbacUserControllerRestTest.java | 8 +++ .../RbacUserRepositoryIntegrationTest.java | 4 +- ...TestCustomerRepositoryIntegrationTest.java | 5 +- .../TestPackageRepositoryIntegrationTest.java | 4 +- .../net/hostsharing/test/MapperUnitTest.java | 43 +++++++++++-- 45 files changed, 329 insertions(+), 280 deletions(-) create mode 100644 src/main/java/net/hostsharing/hsadminng/mapper/MapperConfiguration.java diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountController.java index 7804e58c..1195b65b 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountController.java @@ -16,8 +16,6 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; - @RestController public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { @@ -25,6 +23,9 @@ public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeBankAccountRepository bankAccountRepo; @@ -38,7 +39,7 @@ public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { final var entities = bankAccountRepo.findByOptionalHolderLike(holder); - final var resources = Mapper.mapList(entities, HsOfficeBankAccountResource.class); + final var resources = mapper.mapList(entities, HsOfficeBankAccountResource.class); return ResponseEntity.ok(resources); } @@ -54,7 +55,7 @@ public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { IbanUtil.validate(body.getIban()); BicUtil.validate(body.getBic()); - final var entityToSave = map(body, HsOfficeBankAccountEntity.class); + final var entityToSave = mapper.map(body, HsOfficeBankAccountEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = bankAccountRepo.save(entityToSave); @@ -64,7 +65,7 @@ public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { .path("/api/hs/office/BankAccounts/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeBankAccountResource.class); + final var mapped = mapper.map(saved, HsOfficeBankAccountResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -81,7 +82,7 @@ public class HsOfficeBankAccountController implements HsOfficeBankAccountsApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeBankAccountResource.class)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeBankAccountResource.class)); } @Override diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java index 34c1fe6c..aee1fbd9 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactController.java @@ -15,8 +15,6 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; - @RestController public class HsOfficeContactController implements HsOfficeContactsApi { @@ -24,6 +22,9 @@ public class HsOfficeContactController implements HsOfficeContactsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeContactRepository contactRepo; @@ -37,7 +38,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi { final var entities = contactRepo.findContactByOptionalLabelLike(label); - final var resources = Mapper.mapList(entities, HsOfficeContactResource.class); + final var resources = mapper.mapList(entities, HsOfficeContactResource.class); return ResponseEntity.ok(resources); } @@ -50,7 +51,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi { context.define(currentUser, assumedRoles); - final var entityToSave = map(body, HsOfficeContactEntity.class); + final var entityToSave = mapper.map(body, HsOfficeContactEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = contactRepo.save(entityToSave); @@ -60,7 +61,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi { .path("/api/hs/office/contacts/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeContactResource.class); + final var mapped = mapper.map(saved, HsOfficeContactResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -77,7 +78,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeContactResource.class)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeContactResource.class)); } @Override @@ -111,7 +112,7 @@ public class HsOfficeContactController implements HsOfficeContactsApi { new HsOfficeContactEntityPatch(current).apply(body); final var saved = contactRepo.save(current); - final var mapped = map(saved, HsOfficeContactResource.class); + final var mapped = mapper.map(saved, HsOfficeContactResource.class); return ResponseEntity.ok(mapped); } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionController.java index c025da5d..dfb82c10 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionController.java @@ -22,7 +22,6 @@ import java.util.UUID; import static java.lang.String.join; import static net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeCoopAssetsTransactionTypeResource.*; -import static net.hostsharing.hsadminng.mapper.Mapper.map; @RestController public class HsOfficeCoopAssetsTransactionController implements HsOfficeCoopAssetsApi { @@ -30,49 +29,52 @@ public class HsOfficeCoopAssetsTransactionController implements HsOfficeCoopAsse @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeCoopAssetsTransactionRepository coopAssetsTransactionRepo; @Override @Transactional(readOnly = true) public ResponseEntity> listCoopAssets( - final String currentUser, - final String assumedRoles, - final UUID membershipUuid, - final @DateTimeFormat(iso = ISO.DATE) LocalDate fromValueDate, - final @DateTimeFormat(iso = ISO.DATE) LocalDate toValueDate) { + final String currentUser, + final String assumedRoles, + final UUID membershipUuid, + final @DateTimeFormat(iso = ISO.DATE) LocalDate fromValueDate, + final @DateTimeFormat(iso = ISO.DATE) LocalDate toValueDate) { context.define(currentUser, assumedRoles); final var entities = coopAssetsTransactionRepo.findCoopAssetsTransactionByOptionalMembershipUuidAndDateRange( - membershipUuid, - fromValueDate, - toValueDate); + membershipUuid, + fromValueDate, + toValueDate); - final var resources = Mapper.mapList(entities, HsOfficeCoopAssetsTransactionResource.class); + final var resources = mapper.mapList(entities, HsOfficeCoopAssetsTransactionResource.class); return ResponseEntity.ok(resources); } @Override @Transactional public ResponseEntity addCoopAssetsTransaction( - final String currentUser, - final String assumedRoles, - @Valid final HsOfficeCoopAssetsTransactionInsertResource requestBody) { + final String currentUser, + final String assumedRoles, + @Valid final HsOfficeCoopAssetsTransactionInsertResource requestBody) { context.define(currentUser, assumedRoles); validate(requestBody); - final var entityToSave = map(requestBody, HsOfficeCoopAssetsTransactionEntity.class); + final var entityToSave = mapper.map(requestBody, HsOfficeCoopAssetsTransactionEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = coopAssetsTransactionRepo.save(entityToSave); final var uri = - MvcUriComponentsBuilder.fromController(getClass()) - .path("/api/hs/office/coopassetstransactions/{id}") - .buildAndExpand(entityToSave.getUuid()) - .toUri(); - final var mapped = map(saved, HsOfficeCoopAssetsTransactionResource.class); + MvcUriComponentsBuilder.fromController(getClass()) + .path("/api/hs/office/coopassetstransactions/{id}") + .buildAndExpand(entityToSave.getUuid()) + .toUri(); + final var mapped = mapper.map(saved, HsOfficeCoopAssetsTransactionResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -87,31 +89,31 @@ public class HsOfficeCoopAssetsTransactionController implements HsOfficeCoopAsse } private static void validateDebitTransaction( - final HsOfficeCoopAssetsTransactionInsertResource requestBody, - final ArrayList violations) { + final HsOfficeCoopAssetsTransactionInsertResource requestBody, + final ArrayList violations) { if (List.of(DEPOSIT, ADOPTION).contains(requestBody.getTransactionType()) - && requestBody.getAssetValue().signum() < 0) { + && requestBody.getAssetValue().signum() < 0) { violations.add("for %s, assetValue must be positive but is \"%.2f\"".formatted( - requestBody.getTransactionType(), requestBody.getAssetValue())); + requestBody.getTransactionType(), requestBody.getAssetValue())); } } private static void validateCreditTransaction( - final HsOfficeCoopAssetsTransactionInsertResource requestBody, - final ArrayList violations) { + final HsOfficeCoopAssetsTransactionInsertResource requestBody, + final ArrayList violations) { if (List.of(DISBURSAL, TRANSFER, CLEARING, LOSS).contains(requestBody.getTransactionType()) - && requestBody.getAssetValue().signum() > 0) { + && requestBody.getAssetValue().signum() > 0) { violations.add("for %s, assetValue must be negative but is \"%.2f\"".formatted( - requestBody.getTransactionType(), requestBody.getAssetValue())); + requestBody.getTransactionType(), requestBody.getAssetValue())); } } private static void validateAssetValue( - final HsOfficeCoopAssetsTransactionInsertResource requestBody, - final ArrayList violations) { + final HsOfficeCoopAssetsTransactionInsertResource requestBody, + final ArrayList violations) { if (requestBody.getAssetValue().signum() == 0) { violations.add("assetValue must not be 0 but is \"%.2f\"".formatted( - requestBody.getAssetValue())); + requestBody.getAssetValue())); } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java index 8814e75f..78716866 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.UUID; import static java.lang.String.join; -import static net.hostsharing.hsadminng.mapper.Mapper.map; import static net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeCoopSharesTransactionTypeResource.CANCELLATION; import static net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeCoopSharesTransactionTypeResource.SUBSCRIPTION; @@ -31,6 +30,9 @@ public class HsOfficeCoopSharesTransactionController implements HsOfficeCoopShar @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeCoopSharesTransactionRepository coopSharesTransactionRepo; @@ -49,7 +51,7 @@ public class HsOfficeCoopSharesTransactionController implements HsOfficeCoopShar fromValueDate, toValueDate); - final var resources = Mapper.mapList(entities, HsOfficeCoopSharesTransactionResource.class); + final var resources = mapper.mapList(entities, HsOfficeCoopSharesTransactionResource.class); return ResponseEntity.ok(resources); } @@ -63,7 +65,7 @@ public class HsOfficeCoopSharesTransactionController implements HsOfficeCoopShar context.define(currentUser, assumedRoles); validate(requestBody); - final var entityToSave = map(requestBody, HsOfficeCoopSharesTransactionEntity.class); + final var entityToSave = mapper.map(requestBody, HsOfficeCoopSharesTransactionEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = coopSharesTransactionRepo.save(entityToSave); @@ -73,7 +75,7 @@ public class HsOfficeCoopSharesTransactionController implements HsOfficeCoopShar .path("/api/hs/office/coopsharestransactions/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeCoopSharesTransactionResource.class); + final var mapped = mapper.map(saved, HsOfficeCoopSharesTransactionResource.class); return ResponseEntity.created(uri).body(mapped); } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java index 31044a5a..c522387e 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorController.java @@ -1,12 +1,11 @@ package net.hostsharing.hsadminng.hs.office.debitor; -import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.context.Context; -import net.hostsharing.hsadminng.hs.office.bankaccount.HsOfficeBankAccountEntity; -import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactEntity; import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficeDebitorsApi; -import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.*; -import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerEntity; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorInsertResource; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorPatchResource; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeDebitorResource; +import net.hostsharing.hsadminng.mapper.Mapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; @@ -16,9 +15,6 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import javax.persistence.EntityManager; import java.util.List; import java.util.UUID; -import java.util.function.BiConsumer; - -import static net.hostsharing.hsadminng.mapper.Mapper.map; @RestController @@ -27,6 +23,9 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeDebitorRepository debitorRepo; @@ -46,8 +45,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { ? debitorRepo.findDebitorByDebitorNumber(debitorNumber) : debitorRepo.findDebitorByOptionalNameLike(name); - final var resources = Mapper.mapList(entities, HsOfficeDebitorResource.class, - DEBITOR_ENTITY_TO_RESOURCE_POSTMAPPER); + final var resources = mapper.mapList(entities, HsOfficeDebitorResource.class); return ResponseEntity.ok(resources); } @@ -60,7 +58,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { context.define(currentUser, assumedRoles); - final var entityToSave = map(body, HsOfficeDebitorEntity.class, DEBITOR_RESOURCE_TO_ENTITY_POSTMAPPER); + final var entityToSave = mapper.map(body, HsOfficeDebitorEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = debitorRepo.save(entityToSave); @@ -70,8 +68,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { .path("/api/hs/office/debitors/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeDebitorResource.class, - DEBITOR_ENTITY_TO_RESOURCE_POSTMAPPER); + final var mapped = mapper.map(saved, HsOfficeDebitorResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -88,7 +85,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeDebitorResource.class, DEBITOR_ENTITY_TO_RESOURCE_POSTMAPPER)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeDebitorResource.class)); } @Override @@ -122,24 +119,7 @@ public class HsOfficeDebitorController implements HsOfficeDebitorsApi { new HsOfficeDebitorEntityPatcher(em, current).apply(body); final var saved = debitorRepo.save(current); - final var mapped = map(saved, HsOfficeDebitorResource.class); + final var mapped = mapper.map(saved, HsOfficeDebitorResource.class); return ResponseEntity.ok(mapped); } - - - final BiConsumer DEBITOR_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> { - resource.setPartner(map(entity.getPartner(), HsOfficePartnerResource.class)); - resource.setBillingContact(map(entity.getBillingContact(), HsOfficeContactResource.class)); - if ( entity.getRefundBankAccount() != null ) { - resource.setRefundBankAccount(map(entity.getRefundBankAccount(), HsOfficeBankAccountResource.class)); - } - }; - - final BiConsumer DEBITOR_RESOURCE_TO_ENTITY_POSTMAPPER = (resource, entity) -> { - entity.setPartner(em.getReference(HsOfficePartnerEntity.class, resource.getPartnerUuid())); - entity.setBillingContact(em.getReference(HsOfficeContactEntity.class, resource.getBillingContactUuid())); - if ( resource.getRefundBankAccountUuid() != null ) { - entity.setRefundBankAccount(em.getReference(HsOfficeBankAccountEntity.class, resource.getRefundBankAccountUuid())); - } - }; } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipController.java index c5ad8a94..4b311706 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipController.java @@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficeMembersh import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeMembershipInsertResource; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeMembershipPatchResource; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeMembershipResource; +import net.hostsharing.hsadminng.mapper.Mapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; @@ -17,9 +18,6 @@ import java.util.List; import java.util.UUID; import java.util.function.BiConsumer; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController public class HsOfficeMembershipController implements HsOfficeMembershipsApi { @@ -27,6 +25,9 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeMembershipRepository membershipRepo; @@ -45,7 +46,7 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { final var entities = membershipRepo.findMembershipsByOptionalPartnerUuidAndOptionalMemberNumber(partnerUuid, memberNumber); - final var resources = mapList(entities, HsOfficeMembershipResource.class, + final var resources = mapper.mapList(entities, HsOfficeMembershipResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(resources); } @@ -59,7 +60,7 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { context.define(currentUser, assumedRoles); - final var entityToSave = map(body, HsOfficeMembershipEntity.class); + final var entityToSave = mapper.map(body, HsOfficeMembershipEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = membershipRepo.save(entityToSave); @@ -69,7 +70,7 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { .path("/api/hs/office/Memberships/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeMembershipResource.class, + final var mapped = mapper.map(saved, HsOfficeMembershipResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.created(uri).body(mapped); } @@ -87,7 +88,7 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeMembershipResource.class, + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeMembershipResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER)); } @@ -119,14 +120,15 @@ public class HsOfficeMembershipController implements HsOfficeMembershipsApi { final var current = membershipRepo.findByUuid(membershipUuid).orElseThrow(); - new HsOfficeMembershipEntityPatcher(em, current).apply(body); + new HsOfficeMembershipEntityPatcher(em, mapper, current).apply(body); final var saved = membershipRepo.save(current); - final var mapped = map(saved, HsOfficeMembershipResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); + final var mapped = mapper.map(saved, HsOfficeMembershipResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(mapped); } final BiConsumer SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> { + // TODO.refa: this should be possible via ModelMapper config resource.setValidFrom(entity.getValidity().lower()); if (entity.getValidity().hasUpperBound()) { resource.setValidTo(entity.getValidity().upper().minusDays(1)); diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcher.java b/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcher.java index 8696fa86..d7436dca 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcher.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcher.java @@ -3,23 +3,25 @@ package net.hostsharing.hsadminng.hs.office.membership; import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeMembershipPatchResource; import net.hostsharing.hsadminng.mapper.EntityPatcher; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.mapper.OptionalFromJson; import javax.persistence.EntityManager; import java.util.Optional; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; - public class HsOfficeMembershipEntityPatcher implements EntityPatcher { private final EntityManager em; + private final Mapper mapper; private final HsOfficeMembershipEntity entity; public HsOfficeMembershipEntityPatcher( final EntityManager em, + final Mapper mapper, final HsOfficeMembershipEntity entity) { this.em = em; + this.mapper = mapper; this.entity = entity; } @@ -33,7 +35,7 @@ public class HsOfficeMembershipEntityPatcher implements EntityPatcher map(v, HsOfficeReasonForTermination.class)) + .map(v -> mapper.map(v, HsOfficeReasonForTermination.class)) .ifPresent(entity::setReasonForTermination); } 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 daf145e4..a5eb62f3 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 @@ -1,11 +1,11 @@ package net.hostsharing.hsadminng.hs.office.partner; -import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.context.Context; -import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository; import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficePartnersApi; -import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.*; -import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficePartnerInsertResource; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficePartnerPatchResource; +import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficePartnerResource; +import net.hostsharing.hsadminng.mapper.Mapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; @@ -14,11 +14,7 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import javax.persistence.EntityManager; import java.util.List; -import java.util.NoSuchElementException; import java.util.UUID; -import java.util.function.BiConsumer; - -import static net.hostsharing.hsadminng.mapper.Mapper.map; @RestController @@ -27,15 +23,12 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficePartnerRepository partnerRepo; - @Autowired - private HsOfficePersonRepository personRepo; - - @Autowired - private HsOfficeContactRepository contactRepo; - @Autowired private EntityManager em; @@ -49,8 +42,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { final var entities = partnerRepo.findPartnerByOptionalNameLike(name); - final var resources = Mapper.mapList(entities, HsOfficePartnerResource.class, - PARTNER_ENTITY_TO_RESOURCE_POSTMAPPER); + final var resources = mapper.mapList(entities, HsOfficePartnerResource.class); return ResponseEntity.ok(resources); } @@ -63,16 +55,9 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { context.define(currentUser, assumedRoles); - final var entityToSave = mapToHsOfficePartnerEntity(body); + final var entityToSave = mapper.map(body, HsOfficePartnerEntity.class); entityToSave.setUuid(UUID.randomUUID()); - // TODO.impl: use getReference - entityToSave.setContact(contactRepo.findByUuid(body.getContactUuid()).orElseThrow( - () -> new NoSuchElementException("cannot find contact uuid " + body.getContactUuid()) - )); - entityToSave.setPerson(personRepo.findByUuid(body.getPersonUuid()).orElseThrow( - () -> new NoSuchElementException("cannot find person uuid " + body.getPersonUuid()) - )); - entityToSave.setDetails(map(body.getDetails(), HsOfficePartnerDetailsEntity.class)); + entityToSave.setDetails(mapper.map(body.getDetails(), HsOfficePartnerDetailsEntity.class)); entityToSave.getDetails().setUuid(UUID.randomUUID()); final var saved = partnerRepo.save(entityToSave); @@ -82,8 +67,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { .path("/api/hs/office/partners/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficePartnerResource.class, - PARTNER_ENTITY_TO_RESOURCE_POSTMAPPER); + final var mapped = mapper.map(saved, HsOfficePartnerResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -100,7 +84,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficePartnerResource.class, PARTNER_ENTITY_TO_RESOURCE_POSTMAPPER)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficePartnerResource.class)); } @Override @@ -134,23 +118,7 @@ public class HsOfficePartnerController implements HsOfficePartnersApi { new HsOfficePartnerEntityPatcher(em, current).apply(body); final var saved = partnerRepo.save(current); - final var mapped = map(saved, HsOfficePartnerResource.class); + final var mapped = mapper.map(saved, HsOfficePartnerResource.class); return ResponseEntity.ok(mapped); } - - final BiConsumer PARTNER_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> { - resource.setPerson(map(entity.getPerson(), HsOfficePersonResource.class)); - resource.setContact(map(entity.getContact(), HsOfficeContactResource.class)); - }; - - // TODO.impl: user postmapper + getReference - private HsOfficePartnerEntity mapToHsOfficePartnerEntity(final HsOfficePartnerInsertResource resource) { - final var entity = new HsOfficePartnerEntity(); - // entity.setBirthday(resource.getBirthday()); - // entity.setBirthName(resource.getBirthName()); - // entity.setDateOfDeath(resource.getDateOfDeath()); - // entity.setRegistrationNumber(resource.getRegistrationNumber()); - // entity.setRegistrationOffice(resource.getRegistrationOffice()); - return entity; - } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonController.java index bf9cc6b4..8c0fccb1 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonController.java @@ -15,8 +15,6 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; - @RestController public class HsOfficePersonController implements HsOfficePersonsApi { @@ -24,6 +22,9 @@ public class HsOfficePersonController implements HsOfficePersonsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficePersonRepository personRepo; @@ -37,7 +38,7 @@ public class HsOfficePersonController implements HsOfficePersonsApi { final var entities = personRepo.findPersonByOptionalNameLike(label); - final var resources = Mapper.mapList(entities, HsOfficePersonResource.class); + final var resources = mapper.mapList(entities, HsOfficePersonResource.class); return ResponseEntity.ok(resources); } @@ -50,7 +51,7 @@ public class HsOfficePersonController implements HsOfficePersonsApi { context.define(currentUser, assumedRoles); - final var entityToSave = map(body, HsOfficePersonEntity.class); + final var entityToSave = mapper.map(body, HsOfficePersonEntity.class); entityToSave.setUuid(UUID.randomUUID()); final var saved = personRepo.save(entityToSave); @@ -60,7 +61,7 @@ public class HsOfficePersonController implements HsOfficePersonsApi { .path("/api/hs/office/persons/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficePersonResource.class); + final var mapped = mapper.map(saved, HsOfficePersonResource.class); return ResponseEntity.created(uri).body(mapped); } @@ -77,7 +78,7 @@ public class HsOfficePersonController implements HsOfficePersonsApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficePersonResource.class)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficePersonResource.class)); } @Override @@ -111,7 +112,7 @@ public class HsOfficePersonController implements HsOfficePersonsApi { new HsOfficePersonEntityPatcher(current).apply(body); final var saved = personRepo.save(current); - final var mapped = map(saved, HsOfficePersonResource.class); + final var mapped = mapper.map(saved, HsOfficePersonResource.class); return ResponseEntity.ok(mapped); } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipController.java index 0b9ac61f..d6f36c31 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipController.java @@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository; import net.hostsharing.hsadminng.hs.office.generated.api.v1.api.HsOfficeRelationshipsApi; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.*; import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository; +import net.hostsharing.hsadminng.mapper.Mapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; @@ -17,8 +18,6 @@ import java.util.NoSuchElementException; import java.util.UUID; import java.util.function.BiConsumer; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; @RestController @@ -27,6 +26,9 @@ public class HsOfficeRelationshipController implements HsOfficeRelationshipsApi @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeRelationshipRepository relationshipRepo; @@ -49,9 +51,9 @@ public class HsOfficeRelationshipController implements HsOfficeRelationshipsApi context.define(currentUser, assumedRoles); final var entities = relationshipRepo.findRelationshipRelatedToPersonUuid(personUuid, - map(relationshipType, HsOfficeRelationshipType.class)); + mapper.map(relationshipType, HsOfficeRelationshipType.class)); - final var resources = mapList(entities, HsOfficeRelationshipResource.class, + final var resources = mapper.mapList(entities, HsOfficeRelationshipResource.class, RELATIONSHIP_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(resources); } @@ -85,7 +87,7 @@ public class HsOfficeRelationshipController implements HsOfficeRelationshipsApi .path("/api/hs/office/relationships/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeRelationshipResource.class, + final var mapped = mapper.map(saved, HsOfficeRelationshipResource.class, RELATIONSHIP_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.created(uri).body(mapped); } @@ -103,7 +105,7 @@ public class HsOfficeRelationshipController implements HsOfficeRelationshipsApi if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeRelationshipResource.class, RELATIONSHIP_ENTITY_TO_RESOURCE_POSTMAPPER)); + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeRelationshipResource.class, RELATIONSHIP_ENTITY_TO_RESOURCE_POSTMAPPER)); } @Override @@ -137,14 +139,14 @@ public class HsOfficeRelationshipController implements HsOfficeRelationshipsApi new HsOfficeRelationshipEntityPatcher(em, current).apply(body); final var saved = relationshipRepo.save(current); - final var mapped = map(saved, HsOfficeRelationshipResource.class); + final var mapped = mapper.map(saved, HsOfficeRelationshipResource.class); return ResponseEntity.ok(mapped); } final BiConsumer RELATIONSHIP_ENTITY_TO_RESOURCE_POSTMAPPER = (entity, resource) -> { - resource.setRelAnchor(map(entity.getRelAnchor(), HsOfficePersonResource.class)); - resource.setRelHolder(map(entity.getRelHolder(), HsOfficePersonResource.class)); - resource.setContact(map(entity.getContact(), HsOfficeContactResource.class)); + resource.setRelAnchor(mapper.map(entity.getRelAnchor(), HsOfficePersonResource.class)); + resource.setRelHolder(mapper.map(entity.getRelHolder(), HsOfficePersonResource.class)); + resource.setContact(mapper.map(entity.getContact(), HsOfficeContactResource.class)); }; } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateController.java b/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateController.java index ba36bd00..836ea4a5 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateController.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateController.java @@ -15,12 +15,10 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import javax.persistence.EntityManager; import javax.validation.Valid; -import java.time.LocalDate; import java.util.List; import java.util.UUID; import java.util.function.BiConsumer; -import static net.hostsharing.hsadminng.mapper.Mapper.map; import static net.hostsharing.hsadminng.mapper.PostgresDateRange.toPostgresDateRange; @RestController @@ -30,6 +28,9 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private HsOfficeSepaMandateRepository SepaMandateRepo; @@ -46,7 +47,7 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { final var entities = SepaMandateRepo.findSepaMandateByOptionalIban(iban); - final var resources = Mapper.mapList(entities, HsOfficeSepaMandateResource.class, + final var resources = mapper.mapList(entities, HsOfficeSepaMandateResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(resources); } @@ -60,7 +61,7 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { context.define(currentUser, assumedRoles); - final var entityToSave = map(body, HsOfficeSepaMandateEntity.class, SEPA_MANDATE_RESOURCE_TO_ENTITY_POSTMAPPER); + final var entityToSave = mapper.map(body, HsOfficeSepaMandateEntity.class, SEPA_MANDATE_RESOURCE_TO_ENTITY_POSTMAPPER); entityToSave.setUuid(UUID.randomUUID()); final var saved = SepaMandateRepo.save(entityToSave); @@ -70,7 +71,7 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { .path("/api/hs/office/SepaMandates/{id}") .buildAndExpand(entityToSave.getUuid()) .toUri(); - final var mapped = map(saved, HsOfficeSepaMandateResource.class, + final var mapped = mapper.map(saved, HsOfficeSepaMandateResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.created(uri).body(mapped); } @@ -88,7 +89,7 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { if (result.isEmpty()) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result.get(), HsOfficeSepaMandateResource.class, + return ResponseEntity.ok(mapper.map(result.get(), HsOfficeSepaMandateResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER)); } @@ -123,7 +124,7 @@ public class HsOfficeSepaMandateController implements HsOfficeSepaMandatesApi { current.setValidity(toPostgresDateRange(current.getValidity().lower(), body.getValidTo())); final var saved = SepaMandateRepo.save(current); - final var mapped = map(saved, HsOfficeSepaMandateResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); + final var mapped = mapper.map(saved, HsOfficeSepaMandateResource.class, SEPA_MANDATE_ENTITY_TO_RESOURCE_POSTMAPPER); return ResponseEntity.ok(mapped); } diff --git a/src/main/java/net/hostsharing/hsadminng/mapper/Mapper.java b/src/main/java/net/hostsharing/hsadminng/mapper/Mapper.java index 1263e2e1..e7edacd0 100644 --- a/src/main/java/net/hostsharing/hsadminng/mapper/Mapper.java +++ b/src/main/java/net/hostsharing/hsadminng/mapper/Mapper.java @@ -9,15 +9,17 @@ import java.util.stream.Collectors; /** * A nicer API for ModelMapper. */ -public abstract class Mapper { +public class Mapper extends ModelMapper { - public final static ModelMapper modelMapper = new ModelMapper(); + public Mapper() { + getConfiguration().setAmbiguityIgnored(true); + } - public static List mapList(final List source, final Class targetClass) { + public List mapList(final List source, final Class targetClass) { return mapList(source, targetClass, null); } - public static List mapList(final List source, final Class targetClass, final BiConsumer postMapper) { + public List mapList(final List source, final Class targetClass, final BiConsumer postMapper) { return source .stream() .map(element -> { @@ -30,18 +32,12 @@ public abstract class Mapper { .collect(Collectors.toList()); } - public static T map(final S source, final Class targetClass) { - return map(source, targetClass, null); - } - - public static T map(final S source, final Class targetClass, final BiConsumer postMapper) { + public T map(final S source, final Class targetClass, final BiConsumer postMapper) { if (source == null) { return null; } - final var target = modelMapper.map(source, targetClass); - if (postMapper != null) { - postMapper.accept(source, target); - } + final var target = map(source, targetClass); + postMapper.accept(source, target); return target; } } diff --git a/src/main/java/net/hostsharing/hsadminng/mapper/MapperConfiguration.java b/src/main/java/net/hostsharing/hsadminng/mapper/MapperConfiguration.java new file mode 100644 index 00000000..a77b953a --- /dev/null +++ b/src/main/java/net/hostsharing/hsadminng/mapper/MapperConfiguration.java @@ -0,0 +1,13 @@ +package net.hostsharing.hsadminng.mapper; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MapperConfiguration { + + @Bean + public Mapper modelMapper() { + return new Mapper(); + } +} diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantController.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantController.java index 0ea9929a..7a11ff42 100644 --- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantController.java +++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantController.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.rbac.rbacgrant; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.rbac.generated.api.v1.api.RbacGrantsApi; import net.hostsharing.hsadminng.rbac.generated.api.v1.model.RbacGrantResource; import org.springframework.beans.factory.annotation.Autowired; @@ -13,16 +14,15 @@ import javax.persistence.EntityManager; import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController - public class RbacGrantController implements RbacGrantsApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private RbacGrantRepository rbacGrantRepository; @@ -44,7 +44,7 @@ public class RbacGrantController implements RbacGrantsApi { if (result == null) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result, RbacGrantResource.class)); + return ResponseEntity.ok(mapper.map(result, RbacGrantResource.class)); } @Override @@ -55,7 +55,7 @@ public class RbacGrantController implements RbacGrantsApi { context.define(currentUser, assumedRoles); - return ResponseEntity.ok(mapList(rbacGrantRepository.findAll(), RbacGrantResource.class)); + return ResponseEntity.ok(mapper.mapList(rbacGrantRepository.findAll(), RbacGrantResource.class)); } @Override @@ -67,7 +67,7 @@ public class RbacGrantController implements RbacGrantsApi { context.define(currentUser, assumedRoles); - final var granted = rbacGrantRepository.save(map(body, RbacGrantEntity.class)); + final var granted = rbacGrantRepository.save(mapper.map(body, RbacGrantEntity.class)); em.flush(); em.refresh(granted); @@ -76,7 +76,7 @@ public class RbacGrantController implements RbacGrantsApi { .path("/api/rbac.yaml/grants/{roleUuid}") .buildAndExpand(body.getGrantedRoleUuid()) .toUri(); - return ResponseEntity.created(uri).body(map(granted, RbacGrantResource.class)); + return ResponseEntity.created(uri).body(mapper.map(granted, RbacGrantResource.class)); } @Override diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleController.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleController.java index 0f1055a5..0405fee2 100644 --- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleController.java +++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleController.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.rbac.rbacrole; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.rbac.generated.api.v1.api.RbacRolesApi; import net.hostsharing.hsadminng.rbac.generated.api.v1.model.RbacRoleResource; import org.springframework.beans.factory.annotation.Autowired; @@ -10,15 +11,15 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController - public class RbacRoleController implements RbacRolesApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private RbacRoleRepository rbacRoleRepository; @@ -30,7 +31,9 @@ public class RbacRoleController implements RbacRolesApi { context.define(currentUser, assumedRoles); - return ResponseEntity.ok(mapList(rbacRoleRepository.findAll(), RbacRoleResource.class)); + final List result = rbacRoleRepository.findAll(); + + return ResponseEntity.ok(mapper.mapList(result, RbacRoleResource.class)); } } diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserController.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserController.java index 1d46960a..bcc7844b 100644 --- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserController.java +++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserController.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.rbac.rbacuser; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.rbac.generated.api.v1.api.RbacUsersApi; import net.hostsharing.hsadminng.rbac.generated.api.v1.model.RbacUserPermissionResource; import net.hostsharing.hsadminng.rbac.generated.api.v1.model.RbacUserResource; @@ -13,15 +14,15 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController public class RbacUserController implements RbacUsersApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private RbacUserRepository rbacUserRepository; @@ -35,14 +36,14 @@ public class RbacUserController implements RbacUsersApi { if (body.getUuid() == null) { body.setUuid(UUID.randomUUID()); } - final var saved = map(body, RbacUserEntity.class); + final var saved = mapper.map(body, RbacUserEntity.class); rbacUserRepository.create(saved); final var uri = MvcUriComponentsBuilder.fromController(getClass()) .path("/api/rbac.yaml/users/{id}") .buildAndExpand(saved.getUuid()) .toUri(); - return ResponseEntity.created(uri).body(map(saved, RbacUserResource.class)); + return ResponseEntity.created(uri).body(mapper.map(saved, RbacUserResource.class)); } @Override @@ -72,7 +73,7 @@ public class RbacUserController implements RbacUsersApi { if (result == null) { return ResponseEntity.notFound().build(); } - return ResponseEntity.ok(map(result, RbacUserResource.class)); + return ResponseEntity.ok(mapper.map(result, RbacUserResource.class)); } @Override @@ -84,7 +85,7 @@ public class RbacUserController implements RbacUsersApi { ) { context.define(currentUser, assumedRoles); - return ResponseEntity.ok(mapList(rbacUserRepository.findByOptionalNameLike(userName), RbacUserResource.class)); + return ResponseEntity.ok(mapper.mapList(rbacUserRepository.findByOptionalNameLike(userName), RbacUserResource.class)); } @Override @@ -96,7 +97,7 @@ public class RbacUserController implements RbacUsersApi { ) { context.define(currentUser, assumedRoles); - return ResponseEntity.ok(mapList( + return ResponseEntity.ok(mapper.mapList( rbacUserRepository.findPermissionsOfUserByUuid(userUuid), RbacUserPermissionResource.class)); } diff --git a/src/main/java/net/hostsharing/hsadminng/test/cust/TestCustomerController.java b/src/main/java/net/hostsharing/hsadminng/test/cust/TestCustomerController.java index 9dfe3b46..7123e799 100644 --- a/src/main/java/net/hostsharing/hsadminng/test/cust/TestCustomerController.java +++ b/src/main/java/net/hostsharing/hsadminng/test/cust/TestCustomerController.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.test.cust; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.test.generated.api.v1.api.TestCustomersApi; import net.hostsharing.hsadminng.test.generated.api.v1.model.TestCustomerResource; import org.springframework.beans.factory.annotation.Autowired; @@ -12,16 +13,15 @@ import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBui import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController - public class TestCustomerController implements TestCustomersApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private TestCustomerRepository testCustomerRepository; @@ -36,7 +36,7 @@ public class TestCustomerController implements TestCustomersApi { final var result = testCustomerRepository.findCustomerByOptionalPrefixLike(prefix); - return ResponseEntity.ok(mapList(result, TestCustomerResource.class)); + return ResponseEntity.ok(mapper.mapList(result, TestCustomerResource.class)); } @Override @@ -52,14 +52,14 @@ public class TestCustomerController implements TestCustomersApi { customer.setUuid(UUID.randomUUID()); } - final var saved = testCustomerRepository.save(map(customer, TestCustomerEntity.class)); + final var saved = testCustomerRepository.save(mapper.map(customer, TestCustomerEntity.class)); final var uri = MvcUriComponentsBuilder.fromController(getClass()) .path("/api/test/customers/{id}") .buildAndExpand(customer.getUuid()) .toUri(); - return ResponseEntity.created(uri).body(map(saved, TestCustomerResource.class)); + return ResponseEntity.created(uri).body(mapper.map(saved, TestCustomerResource.class)); } } diff --git a/src/main/java/net/hostsharing/hsadminng/test/pac/TestPackageController.java b/src/main/java/net/hostsharing/hsadminng/test/pac/TestPackageController.java index 68e403ec..aaa7a9fe 100644 --- a/src/main/java/net/hostsharing/hsadminng/test/pac/TestPackageController.java +++ b/src/main/java/net/hostsharing/hsadminng/test/pac/TestPackageController.java @@ -1,5 +1,6 @@ package net.hostsharing.hsadminng.test.pac; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.hsadminng.mapper.OptionalFromJson; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.hsadminng.test.generated.api.v1.api.TestPackagesApi; @@ -13,15 +14,15 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.UUID; -import static net.hostsharing.hsadminng.mapper.Mapper.map; -import static net.hostsharing.hsadminng.mapper.Mapper.mapList; - @RestController public class TestPackageController implements TestPackagesApi { @Autowired private Context context; + @Autowired + private Mapper mapper; + @Autowired private TestPackageRepository testPackageRepository; @@ -35,7 +36,7 @@ public class TestPackageController implements TestPackagesApi { context.define(currentUser, assumedRoles); final var result = testPackageRepository.findAllByOptionalNameLike(name); - return ResponseEntity.ok(mapList(result, TestPackageResource.class)); + return ResponseEntity.ok(mapper.mapList(result, TestPackageResource.class)); } @Override @@ -51,7 +52,7 @@ public class TestPackageController implements TestPackagesApi { final var current = testPackageRepository.findByUuid(packageUuid); OptionalFromJson.of(body.getDescription()).ifPresent(current::setDescription); final var saved = testPackageRepository.save(current); - final var mapped = map(saved, TestPackageResource.class); + final var mapped = mapper.map(saved, TestPackageResource.class); return ResponseEntity.ok(mapped); } } diff --git a/src/main/resources/api-definition/hs-office/hs-office-partner-schemas.yaml b/src/main/resources/api-definition/hs-office/hs-office-partner-schemas.yaml index 79abdc9f..c75fa24a 100644 --- a/src/main/resources/api-definition/hs-office/hs-office-partner-schemas.yaml +++ b/src/main/resources/api-definition/hs-office/hs-office-partner-schemas.yaml @@ -18,6 +18,7 @@ components: HsOfficePartnerDetails: type: object + nullable: false properties: uuid: type: string @@ -56,7 +57,7 @@ components: HsOfficePartnerDetailsPatch: type: object - nullable: true + nullable: false properties: registrationOffice: type: string @@ -90,9 +91,11 @@ components: required: - personUuid - contactUuid + - details HsOfficePartnerDetailsInsert: type: object + nullable: false properties: registrationOffice: type: string diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerAcceptanceTest.java index e5d648e4..ed6741a8 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerAcceptanceTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerAcceptanceTest.java @@ -2,6 +2,7 @@ package net.hostsharing.hsadminng.hs.office.bankaccount; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.test.Accepts; import net.hostsharing.hsadminng.HsadminNgApplication; import net.hostsharing.hsadminng.context.Context; @@ -36,9 +37,6 @@ class HsOfficeBankAccountControllerAcceptanceTest { @Autowired Context context; - @Autowired - Context contextMock; - @Autowired HsOfficeBankAccountRepository bankAccountRepo; diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java index 60885cc9..8705b95d 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountControllerRestTest.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.hs.office.bankaccount; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +24,9 @@ class HsOfficeBankAccountControllerRestTest { @MockBean Context contextMock; + @MockBean + Mapper mapper; + @MockBean HsOfficeBankAccountRepository bankAccountRepo; diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountRepositoryIntegrationTest.java index ba2846d8..10b0252c 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/bankaccount/HsOfficeBankAccountRepositoryIntegrationTest.java @@ -6,16 +6,19 @@ import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository; import net.hostsharing.hsadminng.rbac.rbacrole.RawRbacRoleRepository; import net.hostsharing.test.Array; import net.hostsharing.test.JpaAttempt; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.modelmapper.internal.bytebuddy.utility.RandomString; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; import org.testcontainers.junit.jupiter.Container; import javax.persistence.EntityManager; @@ -31,8 +34,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeBankAccountRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeBankAccountRepositoryIntegrationTest extends ContextBasedTest { @Autowired @@ -311,7 +313,7 @@ class HsOfficeBankAccountRepositoryIntegrationTest extends ContextBasedTest { } private HsOfficeBankAccountEntity givenSomeTemporaryBankAccount(final String createdByUser) { - final var random = RandomString.make(3); + final var random = RandomStringUtils.randomAlphabetic(3); return givenSomeTemporaryBankAccount(createdByUser, () -> hsOfficeBankAccount( "some temp acc #" + random, diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java index bb950436..2079fe7d 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/contact/HsOfficeContactRepositoryIntegrationTest.java @@ -6,15 +6,16 @@ import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository; import net.hostsharing.hsadminng.rbac.rbacrole.RawRbacRoleRepository; import net.hostsharing.test.Array; import net.hostsharing.test.JpaAttempt; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.modelmapper.internal.bytebuddy.utility.RandomString; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; import org.testcontainers.junit.jupiter.Container; @@ -32,8 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeContactRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTest { @Autowired @@ -305,7 +305,7 @@ class HsOfficeContactRepositoryIntegrationTest extends ContextBasedTest { } private HsOfficeContactEntity givenSomeTemporaryContact(final String createdByUser) { - final var random = RandomString.make(12); + final var random = RandomStringUtils.randomAlphabetic(12); return givenSomeTemporaryContact(createdByUser, () -> hsOfficeContact( "some temporary contact #" + random, diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java index c031cc12..e30dfe00 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionControllerRestTest.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.hs.office.coopassets; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.test.JsonBuilder; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -28,6 +29,9 @@ class HsOfficeCoopAssetsTransactionControllerRestTest { @MockBean Context contextMock; + @MockBean + Mapper mapper; + @MockBean HsOfficeCoopAssetsTransactionRepository coopAssetsTransactionRepo; diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionRepositoryIntegrationTest.java index 5ea0714a..d02176b1 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopassets/HsOfficeCoopAssetsTransactionRepositoryIntegrationTest.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; import org.springframework.transaction.annotation.Transactional; @@ -32,8 +33,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeCoopAssetsTransactionRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeCoopAssetsTransactionRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java index 66594a22..8caa0e13 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerRestTest.java @@ -1,6 +1,7 @@ package net.hostsharing.hsadminng.hs.office.coopshares; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.test.JsonBuilder; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -28,6 +29,9 @@ class HsOfficeCoopSharesTransactionControllerRestTest { @MockBean Context contextMock; + @MockBean + Mapper mapper; + @MockBean HsOfficeCoopSharesTransactionRepository coopSharesTransactionRepo; diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java index 035c026d..6d653175 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; import javax.persistence.EntityManager; @@ -30,8 +31,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeCoopSharesTransactionRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeCoopSharesTransactionRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java index 954aba75..79a8128f 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorControllerAcceptanceTest.java @@ -43,9 +43,6 @@ class HsOfficeDebitorControllerAcceptanceTest { @Autowired Context context; - @Autowired - Context contextMock; - @Autowired HsOfficeDebitorRepository debitorRepo; diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java index 25e78dd4..86ebf4a6 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/debitor/HsOfficeDebitorRepositoryIntegrationTest.java @@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -32,8 +33,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeDebitorRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java index 53e1d5ac..d30715c3 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipControllerRestTest.java @@ -2,12 +2,17 @@ package net.hostsharing.hsadminng.hs.office.membership; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.hsadminng.hs.office.coopassets.HsOfficeCoopAssetsTransactionRepository; +import net.hostsharing.hsadminng.mapper.Mapper; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; import org.springframework.orm.jpa.JpaObjectRetrievalFailureException; +import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -22,6 +27,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @WebMvcTest(HsOfficeMembershipController.class) +@Import(Mapper.class) +@RunWith(SpringRunner.class) public class HsOfficeMembershipControllerRestTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcherUnitTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcherUnitTest.java index 6befee4c..453fd1a1 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcherUnitTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipEntityPatcherUnitTest.java @@ -4,12 +4,14 @@ import com.vladmihalcea.hibernate.type.range.Range; import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeMembershipPatchResource; import net.hostsharing.hsadminng.hs.office.generated.api.v1.model.HsOfficeReasonForTerminationResource; +import net.hostsharing.hsadminng.mapper.Mapper; import net.hostsharing.test.PatchUnitTestBase; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.factory.annotation.Autowired; import javax.persistence.EntityManager; import java.time.LocalDate; @@ -31,7 +33,6 @@ class HsOfficeMembershipEntityPatcherUnitTest extends PatchUnitTestBase< > { private static final UUID INITIAL_MEMBERSHIP_UUID = UUID.randomUUID(); - private static final UUID INITIAL_MAIN_DEBITOR_UUID = UUID.randomUUID(); private static final UUID PATCHED_MAIN_DEBITOR_UUID = UUID.randomUUID(); private static final LocalDate GIVEN_VALID_FROM = LocalDate.parse("2020-04-15"); private static final LocalDate PATCHED_VALID_TO = LocalDate.parse("2022-12-31"); @@ -39,6 +40,8 @@ class HsOfficeMembershipEntityPatcherUnitTest extends PatchUnitTestBase< @Mock private EntityManager em; + private Mapper mapper = new Mapper(); + @BeforeEach void initMocks() { lenient().when(em.getReference(eq(HsOfficeDebitorEntity.class), any())).thenAnswer(invocation -> @@ -63,8 +66,8 @@ class HsOfficeMembershipEntityPatcherUnitTest extends PatchUnitTestBase< } @Override - protected HsOfficeMembershipEntityPatcher createPatcher(final HsOfficeMembershipEntity Membership) { - return new HsOfficeMembershipEntityPatcher(em, Membership); + protected HsOfficeMembershipEntityPatcher createPatcher(final HsOfficeMembershipEntity membership) { + return new HsOfficeMembershipEntityPatcher(em, mapper, membership); } @Override diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipRepositoryIntegrationTest.java index 3dea88f7..0b3ac4a3 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/membership/HsOfficeMembershipRepositoryIntegrationTest.java @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -32,8 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeMembershipRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java index 36a2f7f8..e25c0fa2 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/partner/HsOfficePartnerControllerAcceptanceTest.java @@ -2,11 +2,11 @@ package net.hostsharing.hsadminng.hs.office.partner; import io.restassured.RestAssured; import io.restassured.http.ContentType; -import net.hostsharing.test.Accepts; import net.hostsharing.hsadminng.HsadminNgApplication; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository; import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository; +import net.hostsharing.test.Accepts; import net.hostsharing.test.JpaAttempt; import org.json.JSONException; import org.junit.jupiter.api.AfterEach; @@ -166,15 +166,16 @@ class HsOfficePartnerControllerAcceptanceTest { .body(""" { "contactUuid": "%s", - "personUuid": "%s" + "personUuid": "%s", + "details": {} } """.formatted(givenContactUuid, givenPerson.getUuid())) .port(port) .when() .post("http://localhost/api/hs/office/partners") .then().log().all().assertThat() - .statusCode(404) - .body("message", is("cannot find contact uuid 3fa85f64-5717-4562-b3fc-2c963f66afa6")); + .statusCode(400) + .body("message", is("Unable to find Contact with uuid 3fa85f64-5717-4562-b3fc-2c963f66afa6")); // @formatter:on } @@ -193,19 +194,15 @@ class HsOfficePartnerControllerAcceptanceTest { { "contactUuid": "%s", "personUuid": "%s", - "registrationOffice": "Registergericht Hamburg", - "registrationNumber": "123456", - "birthName": null, - "birthday": null, - "dateOfDeath": null + "details": {} } """.formatted(givenContact.getUuid(), givenPersonUuid)) .port(port) .when() .post("http://localhost/api/hs/office/partners") .then().log().all().assertThat() - .statusCode(404) - .body("message", is("cannot find person uuid 3fa85f64-5717-4562-b3fc-2c963f66afa6")); + .statusCode(400) + .body("message", is("Unable to find Person with uuid 3fa85f64-5717-4562-b3fc-2c963f66afa6")); // @formatter:on } } 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 603540a4..49e5b059 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 @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -29,8 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficePartnerRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficePartnerRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonRepositoryIntegrationTest.java index f6627551..ba46b8a4 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/person/HsOfficePersonRepositoryIntegrationTest.java @@ -6,14 +6,15 @@ import net.hostsharing.hsadminng.rbac.rbacgrant.RawRbacGrantRepository; import net.hostsharing.hsadminng.rbac.rbacrole.RawRbacRoleRepository; import net.hostsharing.test.Array; import net.hostsharing.test.JpaAttempt; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.modelmapper.internal.bytebuddy.utility.RandomString; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; import javax.persistence.EntityManager; @@ -30,8 +31,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficePersonRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficePersonRepositoryIntegrationTest extends ContextBasedTest { @Autowired @@ -304,7 +304,7 @@ class HsOfficePersonRepositoryIntegrationTest extends ContextBasedTest { private HsOfficePersonEntity givenSomeTemporaryPerson(final String createdByUser) { return givenSomeTemporaryPerson(createdByUser, () -> - hsOfficePerson("some temporary person #" + RandomString.make(12))); + hsOfficePerson("some temporary person #" + RandomStringUtils.random(12))); } void exactlyThesePersonsAreReturned(final List actualResult, final String... personLabels) { diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipRepositoryIntegrationTest.java index 1efcd216..c3e76e7b 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/relationship/HsOfficeRelationshipRepositoryIntegrationTest.java @@ -1,5 +1,6 @@ package net.hostsharing.hsadminng.hs.office.relationship; +import net.hostsharing.hsadminng.HsadminNgApplication; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.hsadminng.context.ContextBasedTest; import net.hostsharing.hsadminng.hs.office.contact.HsOfficeContactRepository; @@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -28,8 +30,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeRelationshipRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeRelationshipRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateRepositoryIntegrationTest.java index e4f83d8b..1b5c0264 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/office/sepamandate/HsOfficeSepaMandateRepositoryIntegrationTest.java @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -32,8 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { HsOfficeSepaMandateRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class HsOfficeSepaMandateRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantRepositoryIntegrationTest.java index c5788389..94374aa0 100644 --- a/src/test/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantRepositoryIntegrationTest.java @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; import org.springframework.transaction.annotation.Propagation; @@ -28,8 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; @DataJpaTest -@ComponentScan(basePackageClasses = { RbacGrantRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class RbacGrantRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleControllerRestTest.java index f4d1b0d9..54c89998 100644 --- a/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleControllerRestTest.java @@ -1,11 +1,15 @@ package net.hostsharing.hsadminng.rbac.rbacrole; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -18,12 +22,16 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @WebMvcTest(RbacRoleController.class) +@Import(Mapper.class) +@RunWith(SpringRunner.class) class RbacRoleControllerRestTest { @Autowired MockMvc mockMvc; + @MockBean Context contextMock; + @MockBean RbacRoleRepository rbacRoleRepository; @@ -32,23 +40,23 @@ class RbacRoleControllerRestTest { // given when(rbacRoleRepository.findAll()).thenReturn( - asList(hostmasterRole, customerXxxOwner, customerXxxAdmin)); + asList(hostmasterRole, customerXxxOwner, customerXxxAdmin)); // when mockMvc.perform(MockMvcRequestBuilders - .get("/api/rbac/roles") - .header("current-user", "superuser-alex@hostsharing.net") - .accept(MediaType.APPLICATION_JSON)) + .get("/api/rbac/roles") + .header("current-user", "superuser-alex@hostsharing.net") + .accept(MediaType.APPLICATION_JSON)) - // then - .andExpect(status().isOk()) - .andExpect(jsonPath("$", hasSize(3))) - .andExpect(jsonPath("$[0].roleName", is("global#global.admin"))) - .andExpect(jsonPath("$[1].roleName", is("test_customer#xxx.owner"))) - .andExpect(jsonPath("$[2].roleName", is("test_customer#xxx.admin"))) - .andExpect(jsonPath("$[2].uuid", is(customerXxxAdmin.getUuid().toString()))) - .andExpect(jsonPath("$[2].objectUuid", is(customerXxxAdmin.getObjectUuid().toString()))) - .andExpect(jsonPath("$[2].objectTable", is(customerXxxAdmin.getObjectTable().toString()))) - .andExpect(jsonPath("$[2].objectIdName", is(customerXxxAdmin.getObjectIdName().toString()))); + // then + .andExpect(status().isOk()) + .andExpect(jsonPath("$", hasSize(3))) + .andExpect(jsonPath("$[0].roleName", is("global#global.admin"))) + .andExpect(jsonPath("$[1].roleName", is("test_customer#xxx.owner"))) + .andExpect(jsonPath("$[2].roleName", is("test_customer#xxx.admin"))) + .andExpect(jsonPath("$[2].uuid", is(customerXxxAdmin.getUuid().toString()))) + .andExpect(jsonPath("$[2].objectUuid", is(customerXxxAdmin.getObjectUuid().toString()))) + .andExpect(jsonPath("$[2].objectTable", is(customerXxxAdmin.getObjectTable().toString()))) + .andExpect(jsonPath("$[2].objectIdName", is(customerXxxAdmin.getObjectIdName().toString()))); } } diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleRepositoryIntegrationTest.java index 788bf3bd..fde68e07 100644 --- a/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/rbac/rbacrole/RbacRoleRepositoryIntegrationTest.java @@ -2,12 +2,14 @@ package net.hostsharing.hsadminng.rbac.rbacrole; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.test.Array; +import net.hostsharing.test.JpaAttempt; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; @@ -19,8 +21,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { Context.class, RbacRoleRepository.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class RbacRoleRepositoryIntegrationTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserControllerRestTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserControllerRestTest.java index 28a04968..a74c4de7 100644 --- a/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserControllerRestTest.java +++ b/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserControllerRestTest.java @@ -1,11 +1,15 @@ package net.hostsharing.hsadminng.rbac.rbacuser; import net.hostsharing.hsadminng.context.Context; +import net.hostsharing.hsadminng.mapper.Mapper; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -19,12 +23,16 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @WebMvcTest(RbacUserController.class) +@Import(Mapper.class) +@RunWith(SpringRunner.class) class RbacUserControllerRestTest { @Autowired MockMvc mockMvc; + @MockBean Context contextMock; + @MockBean RbacUserRepository rbacUserRepository; diff --git a/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserRepositoryIntegrationTest.java index c42a4f14..07e2921c 100644 --- a/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/rbac/rbacuser/RbacUserRepositoryIntegrationTest.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.test.annotation.DirtiesContext; import org.springframework.transaction.annotation.Propagation; @@ -24,8 +25,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { RbacUserRepository.class, Context.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class RbacUserRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/test/cust/TestCustomerRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/test/cust/TestCustomerRepositoryIntegrationTest.java index cc97e569..c0356e15 100644 --- a/src/test/java/net/hostsharing/hsadminng/test/cust/TestCustomerRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/test/cust/TestCustomerRepositoryIntegrationTest.java @@ -2,12 +2,14 @@ package net.hostsharing.hsadminng.test.cust; import net.hostsharing.hsadminng.context.Context; import net.hostsharing.hsadminng.context.ContextBasedTest; +import net.hostsharing.test.JpaAttempt; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.test.annotation.DirtiesContext; import javax.persistence.EntityManager; @@ -20,8 +22,7 @@ import static net.hostsharing.test.JpaAttempt.attempt; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { Context.class, TestCustomerRepository.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class TestCustomerRepositoryIntegrationTest extends ContextBasedTest { @Autowired diff --git a/src/test/java/net/hostsharing/hsadminng/test/pac/TestPackageRepositoryIntegrationTest.java b/src/test/java/net/hostsharing/hsadminng/test/pac/TestPackageRepositoryIntegrationTest.java index 99172d8d..075925fa 100644 --- a/src/test/java/net/hostsharing/hsadminng/test/pac/TestPackageRepositoryIntegrationTest.java +++ b/src/test/java/net/hostsharing/hsadminng/test/pac/TestPackageRepositoryIntegrationTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; import org.springframework.orm.ObjectOptimisticLockingFailureException; import org.springframework.test.annotation.DirtiesContext; @@ -19,8 +20,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @DataJpaTest -@ComponentScan(basePackageClasses = { Context.class, TestCustomerRepository.class, JpaAttempt.class }) -@DirtiesContext +@Import( { Context.class, JpaAttempt.class }) class TestPackageRepositoryIntegrationTest { @Autowired diff --git a/src/test/java/net/hostsharing/test/MapperUnitTest.java b/src/test/java/net/hostsharing/test/MapperUnitTest.java index 7e72910d..37e06153 100644 --- a/src/test/java/net/hostsharing/test/MapperUnitTest.java +++ b/src/test/java/net/hostsharing/test/MapperUnitTest.java @@ -7,16 +7,21 @@ import lombok.Setter; import net.hostsharing.hsadminng.mapper.Mapper; import org.junit.jupiter.api.Test; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.fail; class MapperUnitTest { + private Mapper mapper = new Mapper(); + @Getter @Setter @NoArgsConstructor @AllArgsConstructor public static class SourceBean { + private String a; private String b; } @@ -26,6 +31,7 @@ class MapperUnitTest { @NoArgsConstructor @AllArgsConstructor public static class TargetBean { + private String a; private String b; private String c; @@ -34,14 +40,14 @@ class MapperUnitTest { @Test void mapsNullBeanToNull() { final SourceBean givenSource = null; - final var result = Mapper.map(givenSource, TargetBean.class, (s, t) -> { fail("should not have been called"); }); + final var result = mapper.map(givenSource, TargetBean.class, (s, t) -> {fail("should not have been called");}); assertThat(result).isNull(); } @Test void mapsBean() { final SourceBean givenSource = new SourceBean("1234", "Text"); - final var result = Mapper.map(givenSource, TargetBean.class, null); + final var result = mapper.map(givenSource, TargetBean.class); assertThat(result).usingRecursiveComparison().isEqualTo( new TargetBean("1234", "Text", null) ); @@ -50,9 +56,38 @@ class MapperUnitTest { @Test void mapsBeanWithPostmapper() { final SourceBean givenSource = new SourceBean("1234", "Text"); - final var result = Mapper.map(givenSource, TargetBean.class, (s, t) -> { t.setC("Extra"); }); + final var result = mapper.map(givenSource, TargetBean.class, (s, t) -> {t.setC("Extra");}); assertThat(result).usingRecursiveComparison().isEqualTo( new TargetBean("1234", "Text", "Extra") ); } + + @Test + void mapsList() { + final var givenSource = List.of( + new SourceBean("111", "Text A"), + new SourceBean("222", "Text B"), + new SourceBean("333", "Text C")); + final var result = mapper.mapList(givenSource, TargetBean.class); + assertThat(result).usingRecursiveComparison().isEqualTo( + List.of( + new TargetBean("111", "Text A", null), + new TargetBean("222", "Text B", null), + new TargetBean("333", "Text C", null))); + } + + @Test + void mapsListWithPostMapper() { + final var givenSource = List.of( + new SourceBean("111", "Text A"), + new SourceBean("222", "Text B"), + new SourceBean("333", "Text C")); + final var result = mapper.mapList(givenSource, TargetBean.class, (s, t) -> {t.setC("Extra");}); + assertThat(result).usingRecursiveComparison().isEqualTo( + List.of( + new TargetBean("111", "Text A", "Extra"), + new TargetBean("222", "Text B", "Extra"), + new TargetBean("333", "Text C", "Extra"))); + } + }