From 2d8c38903af63bf65cb2c9363f8851e0179ce731 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 29 Apr 2024 21:33:15 +0200 Subject: [PATCH] OZG-5630 implement comments from code review --- bescheid-manager/pom.xml | 2 +- .../java/de/ozgcloud/bescheid/Bescheid.java | 2 +- .../de/ozgcloud/bescheid/BescheidService.java | 14 +-- .../attacheditem/AttachedItemService.java | 34 +++--- .../bescheid/BescheidServiceTest.java | 67 +----------- .../attacheditem/AttachedItemServiceTest.java | 100 +++++------------- 6 files changed, 52 insertions(+), 167 deletions(-) diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 428c8f808..e208cd9f4 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -17,7 +17,7 @@ <properties> <vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version> <nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version> - <api-lib.version>0.7.0</api-lib.version> + <api-lib.version>0.8.0-SNAPSHOT</api-lib.version> </properties> <dependencies> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java index c08d2a90c..b39352700 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java @@ -46,7 +46,7 @@ public class Bescheid { private Vorgang.ServiceKonto serviceKonto; public enum Status { - DRAFT, BESCHEID, SEND; + DRAFT, SEND; public boolean not(String value) { return !hasValue(value); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index 3e317170a..c1a19bad9 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -1,6 +1,5 @@ package de.ozgcloud.bescheid; -import java.util.Map; import java.util.Optional; import jakarta.annotation.PostConstruct; @@ -137,12 +136,11 @@ class BescheidService { } void sendBescheid(AttachedItem bescheidItem) { - attachedItemService.patch(setBescheidSendStatus(bescheidItem)); + attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.SEND); try { vorgangService.bescheiden(bescheidItem.getVorgangId()); } catch (Exception e) { - var item = attachedItemService.getItem(bescheidItem.getId()); - attachedItemService.patch(setBescheidDraftStatus(item)); + attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.DRAFT); throw e; } bescheidClientAttributeService.setAntragResult(bescheidItem.getVorgangId(), getBewilligt(bescheidItem)); @@ -152,14 +150,6 @@ class BescheidService { return MapUtils.getBooleanValue(bescheidItem.getItem(), Bescheid.FIELD_BEWILLIGT, false); } - AttachedItem setBescheidSendStatus(AttachedItem bescheidItem) { - return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name())).build(); - } - - AttachedItem setBescheidDraftStatus(AttachedItem bescheidItem) { - return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name())).build(); - } - public BescheidManagerConfig getConfig() { return BescheidManagerConfig.builder() .version(buildProperties.getVersion()) diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index 0b2b63407..2865120c7 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -36,6 +36,7 @@ import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; @@ -152,14 +153,14 @@ public class AttachedItemService { void validateBescheidData(Map<String, Object> bodyObject) { if (isNull(bodyObject.get(BescheidItem.FIELD_BESCHIEDEN_AM))) { - throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BESCHIEDEN_AM)); + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(BescheidItem.FIELD_BESCHIEDEN_AM)); } if (isNull(bodyObject.get(BescheidItem.FIELD_BEWILLIGT))) { - throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BEWILLIGT)); + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(BescheidItem.FIELD_BEWILLIGT)); } Optional.ofNullable(MapUtils.getString(bodyObject, BescheidItem.FIELD_SEND_BY)).filter(notExpectedSendByValue) .ifPresent(sendBy -> - LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s" .formatted(BescheidItem.FIELD_SEND_BY, sendBy, + LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s".formatted(BescheidItem.FIELD_SEND_BY, sendBy, String.join(", ", BescheidItem.ACCEPTED_SEND_BY_VALUES))) ); } @@ -173,7 +174,7 @@ public class AttachedItemService { void validateBescheidStatus(BescheidItem bescheid) { var bescheidStatus = MapUtils.getString(bescheid.getBescheidData(), BescheidItem.FIELD_STATUS); if (BescheidItem.Status.DRAFT.not(bescheidStatus)) { - throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus)); + throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'".formatted(bescheid.getId(), bescheidStatus)); } } @@ -190,28 +191,21 @@ public class AttachedItemService { return remoteService.getItem(id); } - public void patch(AttachedItem item) { - commandService.createAndWaitUntilDone(buildPatchBescheidCommand(item)); + public void setBescheidStatus(String id, long version, Bescheid.Status status) { + commandService.createAndWaitUntilDone(buildPatchBescheidCommand(id, version, status)); } - OzgCloudCommand buildPatchBescheidCommand(AttachedItem bescheidItem) { + OzgCloudCommand buildPatchBescheidCommand(String bescheidId, long bescheidVersion, Bescheid.Status bescheidStatus) { return OzgCloudCommand.builder() - .vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId())) - .relationId(commandMapper.mapRelationId(bescheidItem.getId())) - .relationVersion(bescheidItem.getVersion()) + .relationId(commandMapper.mapRelationId(bescheidId)) + .relationVersion(bescheidVersion) .order(PATCH_ATTACHED_ITEM) - .bodyObject(buildObjectMap(bescheidItem)) + .bodyObject(buildObjectMap(bescheidId, bescheidStatus)) .build(); } - Map<String, Object> buildObjectMap(AttachedItem bescheidItem) { - var bodyObject = new HashMap<String, Object>(); - bodyObject.put(AttachedItem.PROPERTY_ID, bescheidItem.getId()); - bodyObject.put(AttachedItem.PROPERTY_CLIENT, bescheidItem.getClient()); - bodyObject.put(AttachedItem.PROPERTY_VORGANG_ID, bescheidItem.getVorgangId()); - bodyObject.put(AttachedItem.PROPERTY_ITEM_NAME, bescheidItem.getItemName()); - bodyObject.put(AttachedItem.PROPERTY_VERSION, bescheidItem.getVersion()); - bodyObject.put(AttachedItem.PROPERTY_ITEM, bescheidItem.getItem()); - return bodyObject; + Map<String, Object> buildObjectMap(String bescheidId, Bescheid.Status bescheidStatus) { + return Map.of(AttachedItem.PROPERTY_ID, bescheidId, + AttachedItem.PROPERTY_ITEM, Map.of(Bescheid.FIELD_STATUS, bescheidStatus.name())); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java index 873d36123..a7320efc4 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.util.Collections; import java.util.Map; import java.util.Optional; @@ -26,6 +25,7 @@ import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; +import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; import de.ozgcloud.bescheid.attributes.ClientAttributeService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; import de.ozgcloud.bescheid.common.callcontext.UserProfile; @@ -462,19 +462,10 @@ class BescheidServiceTest { private AttachedItem bescheidSendItem; @Test - void shouldCallBuildBescheidSend() { + void shouldCallSetBescheidStatusSent() { sendBescheid(); - verify(service).setBescheidSendStatus(bescheidItem); - } - - @Test - void shouldCallPatch() { - doReturn(bescheidSendItem).when(service).setBescheidSendStatus(any()); - - sendBescheid(); - - verify(attachedItemService).patch(bescheidSendItem); + verify(attachedItemService).setBescheidStatus(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.SEND); } @Test @@ -485,34 +476,12 @@ class BescheidServiceTest { } @Test - void shouldCallGetItem() { - when(attachedItemService.getItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); + void shouldCallSetBescheidStatusDraft() { doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); assertThrows(TechnicalException.class, this::sendBescheid); - verify(attachedItemService).getItem(AttachedItemTestFactory.ID); - } - - @Test - void shouldCallSetBescheidDraftStatus() { - doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); - var updatedBescheidUitem = AttachedItemTestFactory.createBescheid(); - when(attachedItemService.getItem(any())).thenReturn(updatedBescheidUitem); - - assertThrows(TechnicalException.class, this::sendBescheid); - - verify(service).setBescheidDraftStatus(updatedBescheidUitem); - } - - @Test - void shouldCallPatchWhenBescheidenFails() { - doReturn(bescheidSendItem).when(service).setBescheidDraftStatus(any()); - doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); - - assertThrows(TechnicalException.class, this::sendBescheid); - - verify(attachedItemService).patch(bescheidSendItem); + verify(attachedItemService).setBescheidStatus(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.SEND); } @Test @@ -558,32 +527,6 @@ class BescheidServiceTest { } } - @Nested - class TestSetBescheidSendStatus { - - @Test - void shouldSetSendStatus() { - var bescheidItem = AttachedItemTestFactory.createBescheid(); - - var result = service.setBescheidSendStatus(bescheidItem); - - assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); - } - } - - @Nested - class TestSetBescheidDraftStatus { - - @Test - void shouldSetDraftStatus() { - var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(Collections.emptyMap()).build(); - - var result = service.setBescheidDraftStatus(bescheidItem); - - assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); - } - } - @Nested class TestGetConfig { diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java index abb9739ab..4b4b55c3d 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java @@ -48,6 +48,7 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.apilib.common.datatypes.GenericId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; @@ -759,44 +760,31 @@ class AttachedItemServiceTest { void shouldCallBuildPatchBescheidCommand() { var item = AttachedItemTestFactory.createDocument(); - service.patch(item); + setBescheidStatus(); - verify(service).buildPatchBescheidCommand(item); + verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); } @Test void shouldCallCommandService() { - doReturn(command).when(service).buildPatchBescheidCommand(any()); + doReturn(command).when(service).buildPatchBescheidCommand(any(), anyLong(), any()); - service.patch(AttachedItemTestFactory.createDocument()); + setBescheidStatus(); verify(commandService).createAndWaitUntilDone(command); } + + private void setBescheidStatus() { + service.setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); + } } @Nested class TestBuildPatchBescheidCommand { - @Test - void shouldCallVorgangIdMapper() { - service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); - - verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldSetVorgangId() { - var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); - when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); - - assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId); - } - @Test void shouldCallRelationIdMapper() { - service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + buildPatchBescheidCommand(); verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @@ -806,92 +794,62 @@ class AttachedItemServiceTest { var expectedId = GenericId.from(AttachedItemTestFactory.ID); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); assertThat(result.getOrder()).isEqualTo(AttachedItemService.PATCH_ATTACHED_ITEM); } @Test void shouldCallBuildObjectMap() { - var bescheidItem = AttachedItemTestFactory.createDocument(); + var result = buildPatchBescheidCommand(); - service.buildPatchBescheidCommand(bescheidItem); - - verify(service).buildObjectMap(bescheidItem); + verify(service).buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); } @Test void shouldSetBodyObject() { - var expectedMap = Map.of("key", (Object) "value"); - doReturn(expectedMap).when(service).buildObjectMap(any()); + var bodyObject = Map.of("key", (Object) "value"); + doReturn(bodyObject).when(service).buildObjectMap(any(), any()); - var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument()); + var result = buildPatchBescheidCommand(); + + assertThat(result.getBodyObject()).isSameAs(bodyObject); + } - assertThat(result.getBodyObject()).containsAllEntriesOf(expectedMap); + private OzgCloudCommand buildPatchBescheidCommand() { + return service.buildPatchBescheidCommand(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.DRAFT); } } @Nested - class TestBuildBodyObject { + class TestBuildObjectMap { @Test - void shouldSetId() { - var result = buildObjectMap(); + void shouldSetBescheidId() { + var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); assertThat(result).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID); } @Test - void shouldSetClient() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT); - } - - @Test - void shouldSetVorgangId() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldSetItemName() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); - } - - @Test - void shouldSetVersion() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_VERSION, AttachedItemTestFactory.VERSION); - } - - @Test - void shouldSetItem() { - var result = buildObjectMap(); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM, AttachedItemTestFactory.createBescheidItem()); - } + void shouldSetBescheidStatus() { + var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT); - private Map<String, Object> buildObjectMap() { - return service.buildObjectMap(AttachedItemTestFactory.createBescheid()); + assertThat(result).extracting(AttachedItem.PROPERTY_ITEM, MAP).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); } } } \ No newline at end of file -- GitLab