diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index e208cd9f4b7b9a2039bb2ac3ac73b4d988fc2fdc..0b9174c6394ee1d61ac7380a2ad9b1e3c7c3b4a4 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> 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 b393527005404ce7bc3246fef81bd0a7ced74e85..c26f275ff4adbdc446e5e4957928897b4e043aa2 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java @@ -3,14 +3,11 @@ package de.ozgcloud.bescheid; import java.io.File; import java.util.Optional; -import org.apache.commons.lang3.StringUtils; - import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.common.binaryfile.FileId; import lombok.Builder; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.With; @Builder(toBuilder = true) @@ -46,29 +43,26 @@ public class Bescheid { private Vorgang.ServiceKonto serviceKonto; public enum Status { - DRAFT, SEND; + DRAFT, SENT; - public boolean not(String value) { + public boolean not(Object value) { return !hasValue(value); } - public boolean hasValue(String value) { - return this.name().equalsIgnoreCase(value); + public boolean hasValue(Object value) { + return this.name().equalsIgnoreCase(String.valueOf(value)); } } - @RequiredArgsConstructor public enum SendBy { - NACHRICHT("NACHRICHT"), MANUAL("MANUAL"); - - private final String value; + NACHRICHT, MANUAL; public boolean notValue(Object sendByValue) { return !hasValue(sendByValue); } public boolean hasValue(Object sendByValue) { - return StringUtils.equalsIgnoreCase(value, String.valueOf(sendByValue)); + return this.name().equalsIgnoreCase(String.valueOf(sendByValue)); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java index 425a62a353a09b4c660cfbe06b1829e318ac4624..d7d033e480e6259f3a08eeda83fa4e7548d23b66 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java @@ -1,16 +1,13 @@ package de.ozgcloud.bescheid; -import java.time.LocalDate; import java.util.Collection; import java.util.List; -import java.util.Map; import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceImplBase; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; -import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper; +import de.ozgcloud.bescheid.vorgang.VorgangId; import io.grpc.stub.StreamObserver; import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.server.service.GrpcService; @@ -21,14 +18,13 @@ class BescheidGrpcService extends BescheidServiceImplBase { private final AttachedItemService attachedItemService; private final AttachedItemMapper attachedItemMapper; - private final BescheidItemMapper bescheidMapper; private final BescheidService bescheidService; private final GrpcBescheidMapper grpcBescheidMapper; @Override public void getBescheidDraft(GrpcGetBescheidDraftRequest request, StreamObserver<GrpcGetBescheidDraftResponse> responseObserver) { var response = attachedItemService.findBescheidItem(request.getVorgangId()) - .map(this::buildResponse) + .map(this::buildGetBescheidDraftResponse) .orElseGet(GrpcGetBescheidDraftResponse::getDefaultInstance); responseObserver.onNext(response); @@ -36,9 +32,9 @@ class BescheidGrpcService extends BescheidServiceImplBase { } - GrpcGetBescheidDraftResponse buildResponse(BescheidItem bescheidItem) { + GrpcGetBescheidDraftResponse buildGetBescheidDraftResponse(AttachedItem bescheidItem) { return GrpcGetBescheidDraftResponse.newBuilder() - .setBescheid(bescheidMapper.toBescheid(bescheidItem)) + .setBescheid(attachedItemMapper.toBescheid(bescheidItem)) .build(); } @@ -50,14 +46,11 @@ class BescheidGrpcService extends BescheidServiceImplBase { @Override public void getAll(GrpcGetAllBescheidRequest request, StreamObserver<GrpcGetAllBescheidResponse> responseObserver) { - var dummyBescheid = AttachedItem.builder().vorgangId(request.getVorgangId()) - .item(Map.of(Bescheid.FIELD_BESCHIEDEN_AM, LocalDate.now().toString(), - Bescheid.FIELD_BEWILLIGT, true)).build(); - responseObserver.onNext(buildResponse(List.of(dummyBescheid))); + responseObserver.onNext(buildGetAllBescheidResponse(attachedItemService.findAllBescheid(VorgangId.from(request.getVorgangId())))); responseObserver.onCompleted(); } - GrpcGetAllBescheidResponse buildResponse(Collection<AttachedItem> bescheidItems) { + GrpcGetAllBescheidResponse buildGetAllBescheidResponse(Collection<AttachedItem> bescheidItems) { return GrpcGetAllBescheidResponse.newBuilder().addAllBescheid(mapBescheid(bescheidItems)).build(); } 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 c1a19bad984094441efc8f5d6c7f3c87ce839aa1..e30bf629a1fe8c1f09e9046b562eb16c6291849d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -136,7 +136,7 @@ class BescheidService { } void sendBescheid(AttachedItem bescheidItem) { - attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.SEND); + attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.SENT); try { vorgangService.bescheiden(bescheidItem.getVorgangId()); } catch (Exception e) { 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 2865120c7317ae291d191b6a2acf826bb3c49e65..7a3e82b746121e49326e8d24d2484f41693c912a 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 @@ -25,12 +25,16 @@ package de.ozgcloud.bescheid.attacheditem; import static java.util.Objects.*; +import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.function.Predicate; +import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.ArrayUtils; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -38,6 +42,7 @@ 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.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @@ -54,17 +59,17 @@ public class AttachedItemService { static final String DELETE_ATTACHED_ITEM = "DELETE_ATTACHED_ITEM"; static final String PATCH_ATTACHED_ITEM = "PATCH_ATTACHED_ITEM"; - private static final Predicate<String> notExpectedSendByValue = sendBy -> !BescheidItem.ACCEPTED_SEND_BY_VALUES.contains(sendBy); + private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy); private final OzgCloudCommandService commandService; private final VorgangAttachedItemRemoteService remoteService; private final CommandMapper commandMapper; - public Optional<BescheidItem> findBescheidItem(String vorgangId) { + public Optional<AttachedItem> findBescheidItem(String vorgangId) { return remoteService.findBescheidDraft(vorgangId); } - public BescheidItem getBescheidItem(String id) { + public AttachedItem getBescheidItem(String id) { return remoteService.getBescheid(id); } @@ -74,7 +79,7 @@ public class AttachedItemService { .map(bescheid -> overrideAttachedItem(bescheid, command)).orElseGet(() -> createAttachedItem(command)); } - String overrideAttachedItem(BescheidItem bescheidItem, Command command) { + String overrideAttachedItem(AttachedItem bescheidItem, Command command) { var bodyObject = buildAttachedItemAsMap(command, buildItemMapWithAllBescheidFields(command)); var finishedOzgCloudCommand = commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject)); return finishedOzgCloudCommand.getCreatedResource(); @@ -82,13 +87,13 @@ public class AttachedItemService { Map<String, Object> buildItemMapWithAllBescheidFields(Command command) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(BescheidItem.FIELD_BESCHIEDEN_AM)); - result.put(BescheidItem.FIELD_BEWILLIGT, command.getBodyObject().get(BescheidItem.FIELD_BEWILLIGT)); - result.put(BescheidItem.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(BescheidItem.FIELD_BESCHEID_DOCUMENT)); - result.put(BescheidItem.FIELD_SEND_BY, command.getBodyObject().get(BescheidItem.FIELD_SEND_BY)); - result.put(BescheidItem.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_TEXT)); - result.put(BescheidItem.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_SUBJECT)); - result.put(BescheidItem.FIELD_ATTACHMENTS, command.getBodyObject().get(BescheidItem.FIELD_ATTACHMENTS)); + result.put(Bescheid.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(Bescheid.FIELD_BESCHIEDEN_AM)); + result.put(Bescheid.FIELD_BEWILLIGT, command.getBodyObject().get(Bescheid.FIELD_BEWILLIGT)); + result.put(Bescheid.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(Bescheid.FIELD_BESCHEID_DOCUMENT)); + result.put(Bescheid.FIELD_SEND_BY, command.getBodyObject().get(Bescheid.FIELD_SEND_BY)); + result.put(Bescheid.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_TEXT)); + result.put(Bescheid.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_SUBJECT)); + result.put(Bescheid.FIELD_ATTACHMENTS, command.getBodyObject().get(Bescheid.FIELD_ATTACHMENTS)); return result; } @@ -100,7 +105,7 @@ public class AttachedItemService { commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject)); } - OzgCloudCommand buildUpdateAttachedItemCommand(BescheidItem bescheidItem, Map<String, Object> bodyObject) { + OzgCloudCommand buildUpdateAttachedItemCommand(AttachedItem bescheidItem, Map<String, Object> bodyObject) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId())) .relationId(commandMapper.mapRelationId(bescheidItem.getId())) @@ -125,23 +130,23 @@ public class AttachedItemService { Map<String, Object> buildAttachedItemAsMap(Command command, Map<String, Object> itemmap) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); - result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); - result.put(BescheidItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME); - result.put(BescheidItem.PROPERTY_ITEM, itemmap); + result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + result.put(AttachedItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME); + result.put(AttachedItem.PROPERTY_ITEM, itemmap); return result; } Map<String, Object> buildItemMapWithExistingBescheidFields(Command command) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name()); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHIEDEN_AM, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BEWILLIGT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHEID_DOCUMENT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_SEND_BY, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_TEXT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_SUBJECT, result); - addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_ATTACHMENTS, result); + result.put(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHIEDEN_AM, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BEWILLIGT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHEID_DOCUMENT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_SEND_BY, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_TEXT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_SUBJECT, result); + addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_ATTACHMENTS, result); return result; } @@ -152,16 +157,16 @@ 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)); + if (isNull(bodyObject.get(Bescheid.FIELD_BESCHIEDEN_AM))) { + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BESCHIEDEN_AM)); } - if (isNull(bodyObject.get(BescheidItem.FIELD_BEWILLIGT))) { - throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(BescheidItem.FIELD_BEWILLIGT)); + if (isNull(bodyObject.get(Bescheid.FIELD_BEWILLIGT))) { + throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BEWILLIGT)); } - Optional.ofNullable(MapUtils.getString(bodyObject, BescheidItem.FIELD_SEND_BY)).filter(notExpectedSendByValue) + Optional.ofNullable(MapUtils.getString(bodyObject, Bescheid.FIELD_SEND_BY)).filter(notExpectedSendByValue) .ifPresent(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))) + LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s".formatted(Bescheid.FIELD_SEND_BY, sendBy, + Arrays.stream(Bescheid.SendBy.values()).map(Bescheid.SendBy::name).collect(Collectors.joining(",")))) ); } @@ -171,14 +176,14 @@ public class AttachedItemService { commandService.createAndWaitUntilDone(buildDeleteItemCommand(command, bescheid)); } - 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)); + void validateBescheidStatus(AttachedItem bescheid) { + var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS); + if (Bescheid.Status.DRAFT.not(bescheidStatus)) { + throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus)); } } - OzgCloudCommand buildDeleteItemCommand(Command command, BescheidItem bescheid) { + OzgCloudCommand buildDeleteItemCommand(Command command, AttachedItem bescheid) { return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(command.getVorgangId())) .relationId(commandMapper.mapRelationId(bescheid.getId())) @@ -208,4 +213,8 @@ public class AttachedItemService { return Map.of(AttachedItem.PROPERTY_ID, bescheidId, AttachedItem.PROPERTY_ITEM, Map.of(Bescheid.FIELD_STATUS, bescheidStatus.name())); } + + public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) { + return remoteService.findAllBescheid(vorgangId); + } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java deleted file mode 100644 index a018068459db579d4c480c4bf7223919d848fd6c..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import java.util.Map; -import java.util.Set; - -import lombok.Builder; -import lombok.Getter; - -@Builder(toBuilder = true) -@Getter -@Deprecated(since = "2.6.0") -public class BescheidItem { - - static final Set<String> ACCEPTED_SEND_BY_VALUES = Set.of("POSTFACH", "MANUAL"); - - public static final String PROPERTY_ID = "id"; - public static final String PROPERTY_CLIENT = "client"; - public static final String PROPERTY_VORGANG_ID = "vorgangId"; - public static final String PROPERTY_ITEM_NAME = "itemName"; - public static final String PROPERTY_VERSION = "version"; - public static final String PROPERTY_ITEM = "item"; - - public static final String FIELD_STATUS = "status"; - public static final String FIELD_BESCHIEDEN_AM = "beschiedenAm"; - public static final String FIELD_BEWILLIGT = "bewilligt"; - public static final String FIELD_BESCHEID_DOCUMENT = "bescheidDocument"; - public static final String FIELD_ATTACHMENTS = "attachments"; - public static final String FIELD_SEND_BY = "sendBy"; - public static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; - public static final String FIELD_NACHRICHT_SUBJECT = "nachrichtSubject"; - - private String id; - @Builder.Default - private long version = 0L; - - private String client; - private String vorgangId; - private String itemName; - - private Map<String, Object> bescheidData; - - public enum Status { - DRAFT, BESCHEID, SEND; - - public boolean not(String value) { - return !hasValue(value); - } - - public boolean hasValue(String value) { - return this.name().equalsIgnoreCase(value); - } - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java deleted file mode 100644 index 2c915d65d934abab2636433b02e30a1eaf8e764d..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import static java.util.Objects.*; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -@Deprecated(since = "2.6.0") -public class BescheidItemMapper { - - private final GrpcObjectMapper grpcObjectMapper; - - public Stream<BescheidItem> fromFindVorgangAttachedItemResponse(GrpcFindVorgangAttachedItemResponse grpcResponse) { - return grpcResponse.getVorgangAttachedItemsList().stream() - .map(this::mapFromVorgangAttachedItem); - } - - BescheidItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item) { - return BescheidItem.builder() - .id(item.getId()) - .version(item.getVersion()) - .client(item.getClient()) - .vorgangId(item.getVorgangId()) - .itemName(item.getItemName()) - .bescheidData(grpcObjectMapper.mapFromGrpc(item.getItem())) - .build(); - } - - public GrpcBescheid toBescheid(BescheidItem bescheid) { - var bescheidBuilder = GrpcBescheid.newBuilder().setVersion(bescheid.getVersion()); - Optional.ofNullable(bescheid.getId()).ifPresent(bescheidBuilder::setId); - var bescheidData = bescheid.getBescheidData(); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHIEDEN_AM)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setBeschiedenAm); - Optional.ofNullable(MapUtils.getBoolean(bescheidData, BescheidItem.FIELD_BEWILLIGT)).ifPresent(bescheidBuilder::setBewilligt); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHEID_DOCUMENT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setBescheidDocument); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_SEND_BY)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setSendBy); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setNachrichtText); - Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull) - .ifPresent(bescheidBuilder::setNachrichtSubject); - Optional.ofNullable(bescheidData.get(BescheidItem.FIELD_ATTACHMENTS)).map(this::toAttachments).ifPresent(bescheidBuilder::addAllAttachments); - return bescheidBuilder.build(); - } - - @SuppressWarnings("unchecked") - Collection<String> toAttachments(Object attachmentsObject) { - if (attachmentsObject instanceof Collection<?> attachments) { - return (Collection<String>) attachments; - } - if (attachmentsObject instanceof String attachment) { - attachment = StringUtils.trimToNull(attachment); - if (nonNull(attachment)) { - return List.of(attachment); - } - } else if (nonNull(attachmentsObject)) { - return List.of(String.valueOf(attachmentsObject)); - } - return null; //NOSONAR - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java index c63bbfe295df2a72118b8a95b9d6188653fea4f4..d8d3d59256d47d46f24f0c6521ff35d74367b220 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java @@ -33,7 +33,7 @@ import lombok.NoArgsConstructor; class Utils { public static String extractClient(Command command) { - return MapUtils.getString(command.getBodyObject(), BescheidItem.PROPERTY_CLIENT); + return MapUtils.getString(command.getBodyObject(), AttachedItem.PROPERTY_CLIENT); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java index aa6709149d8d968e263c86e0197e281ff99c3a8e..ff07e6d16434e02343d1a07605c8351330d640ba 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java @@ -27,13 +27,17 @@ import static de.ozgcloud.bescheid.attacheditem.AttachedItemService.*; import java.time.LocalDate; import java.util.Comparator; +import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; @@ -45,9 +49,9 @@ import net.devh.boot.grpc.client.inject.GrpcClient; @Log4j2 class VorgangAttachedItemRemoteService { - private static final Comparator<BescheidItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> { - var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM)); - var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM)); + private static final Comparator<AttachedItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> { + var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getItem(), Bescheid.FIELD_BESCHIEDEN_AM)); + var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getItem(), Bescheid.FIELD_BESCHIEDEN_AM)); return beschiedenAm2.compareTo(beschiedenAm1); }; @@ -56,14 +60,16 @@ class VorgangAttachedItemRemoteService { @Autowired private ClientInterceptor bescheidCallContextInterceptor; @Autowired - private BescheidItemMapper bescheidItemMapper; - @Autowired private AttachedItemMapper attachedItemMapper; - public Optional<BescheidItem> findBescheidDraft(String vorgangId) { + public Optional<AttachedItem> findBescheidDraft(String vorgangId) { return findBescheidDraft(buildFindRequest(vorgangId)); } + public List<AttachedItem> findAllBescheid(VorgangId vorgangId) { + return findAllBescheid(buildFindRequest(vorgangId.toString())).toList(); + } + GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { return GrpcFindVorgangAttachedItemRequest.newBuilder() .setVorgangId(vorgangId) @@ -72,10 +78,8 @@ class VorgangAttachedItemRemoteService { .build(); } - Optional<BescheidItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) { - var grpcResponse = getServiceStub().find(request); - var bescheidItems = bescheidItemMapper.fromFindVorgangAttachedItemResponse(grpcResponse).filter(this::hasStatusDraft) - .sorted(BY_BESCHIEDEN_AM_DESC).toList(); + Optional<AttachedItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) { + var bescheidItems = findAllBescheid(request).filter(this::hasStatusDraft).toList(); if (bescheidItems.size() > 1) { LOG.error("Found more than one ({}) draft bescheid for vorgangId: {}. Return one with last beschiedenAm date", bescheidItems.size(), bescheidItems.getFirst().getVorgangId()); @@ -83,13 +87,19 @@ class VorgangAttachedItemRemoteService { return bescheidItems.isEmpty() ? Optional.empty() : Optional.of(bescheidItems.getFirst()); } - boolean hasStatusDraft(BescheidItem bescheidItem) { - return BescheidItem.Status.DRAFT.hasValue(MapUtils.getString(bescheidItem.getBescheidData(), BescheidItem.FIELD_STATUS)); + Stream<AttachedItem> findAllBescheid(GrpcFindVorgangAttachedItemRequest request) { + var grpcResponse = getServiceStub().find(request); + return grpcResponse.getVorgangAttachedItemsList().stream().map(attachedItemMapper::mapFromVorgangAttachedItem) + .sorted(BY_BESCHIEDEN_AM_DESC); + } + + boolean hasStatusDraft(AttachedItem bescheidItem) { + return Bescheid.Status.DRAFT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_STATUS)); } - public BescheidItem getBescheid(String bescheidId) { + public AttachedItem getBescheid(String bescheidId) { var grpcVorgangAttachedItemResponse = getServiceStub().getById(buildGetByIdRequest(bescheidId)); - return bescheidItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); + return attachedItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); } public AttachedItem getItem(String id) { diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java index 6dd87bd4b8bb2423fe933e8d4e098e056890f8fc..07c961a2ea1358c9f6ffb50daf83c30b4433ea8f 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java @@ -120,23 +120,29 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { } Optional<String> extractTextFormXmlFile(File xmlFile) { - var xPath = XPathFactory.newInstance().newXPath(); try { - var document = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); - var expr = xPath.compile("/root/SmartDocument/Fields/NachrichtenText/text()"); - var text = (Text) expr.evaluate(document, XPathConstants.NODE); - - return Optional.ofNullable(text.getTextContent()); + return doExtractText(xmlFile); } catch (XPathExpressionException | SAXException | IOException | ParserConfigurationException e) { - LOG.error("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); + LOG.warn("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); } catch (ClassCastException e) { - LOG.error("Error on extraction Nachricht-Text. XPath return unexpected Type.", e); + LOG.warn("Error on extraction Nachricht-Text. XPath return unexpected Type.", e); } catch (RuntimeException e) { - LOG.error("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); + LOG.warn("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); } return Optional.empty(); } + Optional<String> doExtractText(File xmlFile) + throws SAXException, IOException, ParserConfigurationException, XPathExpressionException { + var xPath = XPathFactory.newInstance().newXPath(); + + var document = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); + var expr = xPath.compile("/root/SmartDocument/Fields/NachrichtenText/text()"); + + return Optional.ofNullable((Text) expr.evaluate(document, XPathConstants.NODE)) + .map(Text::getTextContent); + } + Optional<File> getXMLFile(SmartDocumentsResponse response) { return getSmartDocumentsFile(response, FILE_TYPE_XML) .map(SmartDocumentFile::getDocument) diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java index 25838cf4939ce8d9b2db28ac1f2bf404a83304e7..a8b47587248d0a8b9e91d315b4a3d422304f13f3 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -38,8 +38,8 @@ 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.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @@ -77,9 +77,9 @@ public class DocumentService { } void validateBescheidItem(String bescheidId) { - var bescheidData = attachedItemService.getBescheidItem(bescheidId).getBescheidData(); - var status = MapUtils.getString(bescheidData, BescheidItem.FIELD_STATUS); - if (BescheidItem.Status.DRAFT.not(status)) { + var bescheidData = attachedItemService.getBescheidItem(bescheidId).getItem(); + var status = MapUtils.getString(bescheidData, Bescheid.FIELD_STATUS); + if (Bescheid.Status.DRAFT.not(status)) { throw new TechnicalException("Bescheid is not in draft status"); } } @@ -95,10 +95,10 @@ public class DocumentService { Map<String, Object> buildAttachedItem(Command command, Map<String, Object> itemMap) { var result = new HashMap<String, Object>(); - result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); - result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); - result.put(BescheidItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME); - result.put(BescheidItem.PROPERTY_ITEM, itemMap); + result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + result.put(AttachedItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME); + result.put(AttachedItem.PROPERTY_ITEM, itemMap); return result; } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java index cce8fed48b89880f97ba76ae434a763e69870e52..d5add97a8f5ac99853f9e90a44534a8174f4d76a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java @@ -5,6 +5,7 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.Collections; +import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -19,9 +20,9 @@ import org.mockito.Spy; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; -import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper; -import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; +import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; +import de.ozgcloud.bescheid.vorgang.VorgangId; +import de.ozgcloud.command.CommandTestFactory; import io.grpc.stub.StreamObserver; class BescheidGrpcServiceTest { @@ -35,8 +36,6 @@ class BescheidGrpcServiceTest { @Mock private AttachedItemMapper attachedItemMapper; @Mock - private BescheidItemMapper mapper; - @Mock private BescheidService bescheidService; @Mock private GrpcBescheidMapper grpcBescheidMapper; @@ -55,19 +54,20 @@ class BescheidGrpcServiceTest { @Test void shouldBuildResponse() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create())); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + var bescheidItem = AttachedItemTestFactory.createBescheid(); + when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(bescheidItem)); service.getBescheidDraft(request, responseObserver); - verify(service).buildResponse(any(BescheidItem.class)); + verify(service).buildGetBescheidDraftResponse(bescheidItem); } @Test void shouldCallNext() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - when(service.buildResponse(any(BescheidItem.class))).thenReturn(response); - when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create())); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + when(service.buildGetBescheidDraftResponse(any())).thenReturn(response); + when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(AttachedItemTestFactory.createBescheid())); service.getBescheidDraft(request, responseObserver); @@ -92,24 +92,24 @@ class BescheidGrpcServiceTest { } @Nested - class TestBuildResponse { + class TestBuildGetBescheidDraftResponse { @Test void shouldCallMapper() { - when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); - var bescheid = BescheidItemTestFactory.create(); + when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + var bescheid = AttachedItemTestFactory.createBescheid(); - service.buildResponse(bescheid); + service.buildGetBescheidDraftResponse(bescheid); - verify(mapper).toBescheid(bescheid); + verify(attachedItemMapper).toBescheid(bescheid); } @Test void shouldSetBescheid() { var grpcBescheid = GrpcBescheidTestFactory.create(); - when(mapper.toBescheid(any())).thenReturn(grpcBescheid); + when(attachedItemMapper.toBescheid(any())).thenReturn(grpcBescheid); - var response = service.buildResponse(BescheidItemTestFactory.create()); + var response = service.buildGetBescheidDraftResponse(AttachedItemTestFactory.createBescheid()); assertThat(response.getBescheid()).isEqualTo(grpcBescheid); } @@ -175,17 +175,31 @@ class BescheidGrpcServiceTest { private StreamObserver<GrpcGetAllBescheidResponse> responseObserver; @Captor private ArgumentCaptor<GrpcGetAllBescheidResponse> responseCaptor; + @Captor + private ArgumentCaptor<VorgangId> vorgangIdCaptor; @BeforeEach void init() { - doReturn(RESPONSE).when(service).buildResponse(anyCollection()); + when(request.getVorgangId()).thenReturn(CommandTestFactory.VORGANG_ID); + doReturn(RESPONSE).when(service).buildGetAllBescheidResponse(anyCollection()); + } + + @Test + void shouldCallFindAllBescheid() { + service.getAll(request, responseObserver); + + verify(attachedItemService).findAllBescheid(vorgangIdCaptor.capture()); + assertThat(vorgangIdCaptor.getValue()).hasToString(CommandTestFactory.VORGANG_ID); } @Test void shouldCallBuildResponse() { + var expectedBescheidItem = AttachedItemTestFactory.createBescheid(); + when(attachedItemService.findAllBescheid(any())).thenReturn(List.of(expectedBescheidItem)); + service.getAll(request, responseObserver); - verify(service).buildResponse(anyCollection()); + verify(service).buildGetAllBescheidResponse(List.of(expectedBescheidItem)); } @Test @@ -220,7 +234,7 @@ class BescheidGrpcServiceTest { void shouldCallMapBescheid() { var bescheidItems = Collections.singleton(attachedItem); - service.buildResponse(bescheidItems); + service.buildGetAllBescheidResponse(bescheidItems); verify(service).mapBescheid(bescheidItems); } @@ -229,7 +243,7 @@ class BescheidGrpcServiceTest { void shouldReturnResponse() { var bescheidItems = Collections.singleton(attachedItem); - var response = service.buildResponse(bescheidItems); + var response = service.buildGetAllBescheidResponse(bescheidItems); assertThat(response.getBescheidList()).containsExactly(GRPC_BESCHEID); } 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 a7320efc4f29f83ea6bc0f1e4f15a686d1f0ca57..9f96b98a60c87a1fcb1494d4293c169c0bcf0e9f 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -25,7 +25,6 @@ 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; @@ -465,7 +464,7 @@ class BescheidServiceTest { void shouldCallSetBescheidStatusSent() { sendBescheid(); - verify(attachedItemService).setBescheidStatus(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.SEND); + verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT); } @Test @@ -481,7 +480,7 @@ class BescheidServiceTest { assertThrows(TechnicalException.class, this::sendBescheid); - verify(attachedItemService).setBescheidStatus(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.SEND); + verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT); } @Test 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 4b4b55c3df461a6126d5031ad529329a322e8230..fe29f7c3257cb03537de97b1490cc2ec9fd80bc8 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 @@ -50,6 +50,8 @@ 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.bescheid.vorgang.VorgangId; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.errorhandling.TechnicalException; @@ -80,7 +82,7 @@ class AttachedItemServiceTest { @Test void shouldReturnBescheidItem() { - var expected = BescheidItemTestFactory.create(); + var expected = AttachedItemTestFactory.createBescheid(); when(remoteService.findBescheidDraft(anyString())).thenReturn(Optional.of(expected)); var actual = service.findBescheidItem(CommandTestFactory.VORGANG_ID); @@ -94,17 +96,17 @@ class AttachedItemServiceTest { @Test void shouldCallGetBescheid() { - service.getBescheidItem(BescheidItemTestFactory.ID); + service.getBescheidItem(AttachedItemTestFactory.ID); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test void shouldReturnBescheidItem() { - var expected = BescheidItemTestFactory.create(); + var expected = AttachedItemTestFactory.createBescheid(); when(remoteService.getBescheid(anyString())).thenReturn(expected); - var actual = service.getBescheidItem(BescheidItemTestFactory.ID); + var actual = service.getBescheidItem(AttachedItemTestFactory.ID); assertThat(actual).isEqualTo(expected); } @@ -115,14 +117,13 @@ class AttachedItemServiceTest { private static final String CREATED_ATTACHED_ITEM_ID = "attached-item-id"; - private Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); - private final BescheidItem bescheidItem = BescheidItemTestFactory.create(); + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); + private Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Mock private OzgCloudCommand ozgCloudCommand; - @Captor - private ArgumentCaptor<BescheidItem> bescheidItemCaptor; + private ArgumentCaptor<AttachedItem> bescheidItemCaptor; @Test void shouldCallValidateData() { @@ -275,7 +276,7 @@ class AttachedItemServiceTest { @DisplayName(value = "should fail if bescheidAm is missing") @Test void shouldThrowExceptionByBescheidAm() { - Map<String, Object> map = Map.of(BescheidItem.FIELD_BEWILLIGT, true); + Map<String, Object> map = Map.of(Bescheid.FIELD_BEWILLIGT, true); assertThrows(TechnicalException.class, () -> service.validateBescheidData(map)); } @@ -283,7 +284,7 @@ class AttachedItemServiceTest { @DisplayName(value = "should fail if bewilligt is missing") @Test void shouldThrowExceptionByBewilligt() { - Map<String, Object> map = Map.of(BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01"); + Map<String, Object> map = Map.of(Bescheid.FIELD_BESCHIEDEN_AM, "2021-01-01"); assertThrows(TechnicalException.class, () -> service.validateBescheidData(map)); } @@ -296,8 +297,8 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand updateAttachedItemCommand; - private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build(); - private final BescheidItem bescheidItem = BescheidItemTestFactory.create(); + private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build(); + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); @BeforeEach void init() { @@ -308,7 +309,7 @@ class AttachedItemServiceTest { void shouldCallGetBescheid() { service.updateBescheidDraft(command); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test @@ -366,27 +367,27 @@ class AttachedItemServiceTest { @Nested class TestBuildAttachedItemAsMap { - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Test void shouldSetVorgangId() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId()); + assertThat(map).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId()); } @Test void shouldSetClient() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + assertThat(map).containsEntry(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); } @Test void shouldSetItemName() { var map = service.buildAttachedItemAsMap(command, Map.of()); - assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); + assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME); } @Test @@ -395,7 +396,7 @@ class AttachedItemServiceTest { var map = service.buildAttachedItemAsMap(command, expectedMap); - assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM, expectedMap); + assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM, expectedMap); } } @@ -406,7 +407,7 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand updateItemCommand; - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @BeforeEach void init() { @@ -416,7 +417,7 @@ class AttachedItemServiceTest { @Test void shouldCallBuildItemMapWithAllBescheidFields() { - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(service).buildItemMapWithAllBescheidFields(command); } @@ -426,7 +427,7 @@ class AttachedItemServiceTest { var itemMap = Map.of("key", (Object) "value"); doReturn(itemMap).when(service).buildItemMapWithAllBescheidFields(any()); - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(service).buildAttachedItemAsMap(command, itemMap); } @@ -435,7 +436,7 @@ class AttachedItemServiceTest { void shouldCallBuildUpdateAttachedItemCommand() { var bodyObject = Map.of("key", (Object) "value"); doReturn(bodyObject).when(service).buildAttachedItemAsMap(any(), any()); - var bescheidItem = BescheidItemTestFactory.create(); + var bescheidItem = AttachedItemTestFactory.createBescheid(); service.overrideAttachedItem(bescheidItem, command); @@ -446,14 +447,14 @@ class AttachedItemServiceTest { void shouldCallCommandService() { doReturn(updateItemCommand).when(service).buildUpdateAttachedItemCommand(any(), any()); - service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); verify(commandService).createAndWaitUntilDone(updateItemCommand); } @Test void shouldReturnCreatedResource() { - var result = service.overrideAttachedItem(BescheidItemTestFactory.create(), command); + var result = service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command); assertThat(result).isEqualTo(CREATED_RESOURCE); } @@ -500,62 +501,62 @@ class AttachedItemServiceTest { @Nested class TestBuildBescheidMap { - private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build(); + private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build(); @Test void shouldSetStatus() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name()); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); } @Test void shouldSetBeschiedenAm() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHIEDEN_AM, BescheidItemTestFactory.BESCHEIDEN_AM); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, AttachedItemTestFactory.BESCHEIDEN_AM); } @Test void shouldSetBewilligt() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BEWILLIGT, true); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BEWILLIGT, true); } @Test void shouldSetBescheidDocument() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHEID_DOCUMENT, BescheidItemTestFactory.BESCHEID_DOCUMENT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHEID_DOCUMENT, AttachedItemTestFactory.BESCHEID_DOCUMENT); } @Test void shouldSetSendBy() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_SEND_BY, BescheidItemTestFactory.SEND_BY); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_SEND_BY, AttachedItemTestFactory.SEND_BY.name()); } @Test void shouldSetNachrichtText() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_TEXT, BescheidItemTestFactory.NACHRICHT_TEXT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_TEXT, AttachedItemTestFactory.NACHRICHT_TEXT); } @Test void shouldSetNachrichtSubject() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_SUBJECT, BescheidItemTestFactory.NACHRICHT_SUBJECT); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT); } @Test void shouldSetAttachments() { var bescheidMap = service.buildItemMapWithExistingBescheidFields(command); - assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_ATTACHMENTS, List.of(BescheidItemTestFactory.ATTACHMENT)); + assertThat(bescheidMap).containsEntry(Bescheid.FIELD_ATTACHMENTS, List.of(AttachedItemTestFactory.ATTACHMENT)); } } @@ -564,7 +565,7 @@ class AttachedItemServiceTest { @Test void shouldCallVorgangIdMapper() { - service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); } @@ -574,16 +575,16 @@ class AttachedItemServiceTest { var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId); } @Test void shouldCallRelationIdMapper() { - service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); - verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID); + verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @Test @@ -591,21 +592,21 @@ class AttachedItemServiceTest { var expectedId = GenericId.from("relationId"); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); - assertThat(result.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION); + assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of()); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of()); assertThat(result.getOrder()).isEqualTo(AttachedItemService.UPDATE_ATTACHED_ITEM_ORDER); } @@ -614,7 +615,7 @@ class AttachedItemServiceTest { void shouldSetBodyObject() { var bodyObject = Map.of("key", (Object) "value"); - var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), bodyObject); + var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), bodyObject); assertThat(result.getBodyObject()).containsAllEntriesOf(bodyObject); } @@ -627,21 +628,21 @@ class AttachedItemServiceTest { @Mock private OzgCloudCommand deleteItemOzgCloudCommand; - private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build(); + private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build(); @Test void shouldCallGetBescheid() { - when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create()); + when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid()); deleteBescheidDraft(); - verify(remoteService).getBescheid(BescheidItemTestFactory.ID); + verify(remoteService).getBescheid(AttachedItemTestFactory.ID); } @Test void shouldCallCommandService() { doReturn(deleteItemOzgCloudCommand).when(service).buildDeleteItemCommand(any(), any()); - when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create()); + when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid()); deleteBescheidDraft(); @@ -664,7 +665,7 @@ class AttachedItemServiceTest { @Test void shouldCallCommandMapperWithVorgangId() { - service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); } @@ -674,38 +675,38 @@ class AttachedItemServiceTest { var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID); when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId); - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getVorgangId()).isEqualTo(expectedVorgangId); } @Test void shouldCallCommandMapperWithRelationId() { - service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); - verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID); + verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); } @Test void shouldSetRelationId() { - var expectedId = GenericId.from(BescheidItemTestFactory.ID); + var expectedId = GenericId.from(AttachedItemTestFactory.ID); when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getRelationId()).isEqualTo(expectedId); } @Test void shouldSetRelationVersion() { - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); - assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION); + assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); } @Test void shouldSetOrder() { - var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create()); + var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid()); assertThat(ozgCloudCommand.getOrder()).isEqualTo(AttachedItemService.DELETE_ATTACHED_ITEM); } @@ -717,12 +718,13 @@ class AttachedItemServiceTest { @Test void shouldFilterDraftStatus() { - assertDoesNotThrow(() -> service.validateBescheidStatus(BescheidItemTestFactory.create())); + assertDoesNotThrow(() -> service.validateBescheidStatus(AttachedItemTestFactory.createBescheid())); } @Test void shouldThrowExceptionIfBescheidIsNotDraft() { - var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "otherStatus")).build(); + var bescheidItem = + AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "otherStatus").build(); assertThrows(TechnicalException.class, () -> service.validateBescheidStatus(bescheidItem)); } @@ -734,9 +736,9 @@ class AttachedItemServiceTest { @Test void shouldCallRemoteService() { - service.getItem(BescheidItemTestFactory.ID); + service.getItem(AttachedItemTestFactory.ID); - verify(service).getItem(BescheidItemTestFactory.ID); + verify(service).getItem(AttachedItemTestFactory.ID); } @Test @@ -744,7 +746,7 @@ class AttachedItemServiceTest { var expectedItem = AttachedItemTestFactory.createDocument(); doReturn(expectedItem).when(remoteService).getItem(any()); - var result = service.getItem(BescheidItemTestFactory.ID); + var result = service.getItem(AttachedItemTestFactory.ID); assertThat(result).isEqualTo(expectedItem); } @@ -758,8 +760,6 @@ class AttachedItemServiceTest { @Test void shouldCallBuildPatchBescheidCommand() { - var item = AttachedItemTestFactory.createDocument(); - setBescheidStatus(); verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); @@ -831,7 +831,7 @@ class AttachedItemServiceTest { } private OzgCloudCommand buildPatchBescheidCommand() { - return service.buildPatchBescheidCommand(BescheidItemTestFactory.ID, BescheidItemTestFactory.VERSION, Bescheid.Status.DRAFT); + return service.buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT); } } @@ -852,4 +852,25 @@ class AttachedItemServiceTest { assertThat(result).extracting(AttachedItem.PROPERTY_ITEM, MAP).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()); } } + + @Nested + class TestFindAllBescheid { + + @Test + void shouldCallRemoteService() { + service.findAllBescheid(VorgangTestFactory.ID); + + verify(remoteService).findAllBescheid(VorgangTestFactory.ID); + } + + @Test + void shouldReturnResult() { + var expectedBescheidItem = AttachedItemTestFactory.createBescheid(); + when(remoteService.findAllBescheid(any(VorgangId.class))).thenReturn(Collections.singletonList(expectedBescheidItem)); + + var result = service.findAllBescheid(VorgangTestFactory.ID); + + assertThat(result).containsExactly(expectedBescheidItem); + } + } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java deleted file mode 100644 index 027085c7c1c70681debd0503f3e1920c5620a039..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.command.CommandTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; - -class BescheidItemMapperTest { - - @Spy - @InjectMocks - private BescheidItemMapper mapper; - - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @Nested - class TestFromFindVorgangAttachedItemResponse { - - GrpcFindVorgangAttachedItemResponse grpcResponse = GrpcFindVorgangAttachedItemResponseTestFactory.create(); - - @Test - void shouldCallMapFromVorgangAttachedItem() { - mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList(); - - verify(mapper).mapFromVorgangAttachedItem(grpcResponse.getVorgangAttachedItems(0)); - } - - @Test - void shouldReturnBescheidITem() { - var bescheid = BescheidItemTestFactory.create(); - doReturn(bescheid).when(mapper).mapFromVorgangAttachedItem(any()); - - var result = mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList(); - - assertThat(result).first().isEqualTo(bescheid); - } - } - - @Nested - class TestMapFromVorgangAttachedItem { - - @Test - void shouldSetId() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getId()).isEqualTo(BescheidItemTestFactory.ID); - } - - @Test - void shouldSetVersion() { - var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setVersion(BescheidItemTestFactory.VERSION).build(); - - var result = mapper.mapFromVorgangAttachedItem(grpcAttachedItem); - - assertThat(result.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION); - } - - @Test - void shouldSetClient() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getClient()).isEqualTo(BescheidItemTestFactory.CLIENT); - } - - @Test - void shouldSetVorgangId() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getVorgangId()).isEqualTo(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldSetItemName() { - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getItemName()).isEqualTo(AttachedItemService.BESCHEID_ITEM_NAME); - } - - @Test - void shouldCallGrpcObjectMapper() { - var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.create(); - - mapper.mapFromVorgangAttachedItem(grpcAttachedItem); - - verify(grpcObjectMapper).mapFromGrpc(grpcAttachedItem.getItem()); - } - - @Test - void shouldSetBescheidData() { - var bescheidData = BescheidItemTestFactory.createBescheidBody(); - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(bescheidData); - - var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(result.getBescheidData()).isEqualTo(bescheidData); - } - } - - @Nested - class TestToBescheid { - - @Test - void shouldSetBeschiedenAm() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBeschiedenAm()).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM); - } - - @Test - void shouldSetBewilligt() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBewilligt()).isTrue(); - } - - @Test - void shouldSetBescheidDocument() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getBescheidDocument()).isEqualTo(BescheidItemTestFactory.BESCHEID_DOCUMENT); - } - - @Test - void shouldSetSendBy() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getSendBy()).isEqualTo(BescheidItemTestFactory.SEND_BY); - } - - @Test - void shouldSetNachrichtText() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getNachrichtText()).isEqualTo(BescheidItemTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldSetNachrichtSubject() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getNachrichtSubject()).isEqualTo(BescheidItemTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldCallToAttachments() { - var expectedAttachments = List.of(BescheidItemTestFactory.ATTACHMENT); - var bescheidItem = BescheidItemTestFactory.createBuilder() - .bescheidData(Map.of(BescheidItem.FIELD_ATTACHMENTS, expectedAttachments)).build(); - - mapper.toBescheid(bescheidItem); - - verify(mapper).toAttachments(expectedAttachments); - } - - @Test - void shouldNotCallToAttachments() { - var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of()).build(); - - mapper.toBescheid(bescheidItem); - - verify(mapper, never()).toAttachments(any()); - } - - @Test - void shouldSetAttachments() { - doReturn(List.of(BescheidItemTestFactory.ATTACHMENT)).when(mapper).toAttachments(any()); - - var bescheid = mapBescheid(); - - assertThat(bescheid.getAttachmentsList()).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @Test - void shouldSetId() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getId()).isEqualTo(BescheidItemTestFactory.ID); - } - - @Test - void shouldSetVersion() { - var bescheid = mapBescheid(); - - assertThat(bescheid.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION); - } - - private GrpcBescheid mapBescheid() { - return mapper.toBescheid(BescheidItemTestFactory.create()); - } - } - - @Nested - class TestToAttachments { - - @Test - void shouldMapCollection() { - var result = mapper.toAttachments(List.of(BescheidItemTestFactory.ATTACHMENT)); - - assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @Test - void shouldMapSingleValue() { - var result = mapper.toAttachments(BescheidItemTestFactory.ATTACHMENT); - - assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT); - } - - @DisplayName("should return null") - @ParameterizedTest(name = "when attachmentsObject is \"{0}\"") - @NullAndEmptySource - void shouldReturnNull(String attachmentsObject) { - var result = mapper.toAttachments(attachmentsObject); - - assertThat(result).isNull(); - } - } -} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java deleted file mode 100644 index 1299edf5394b1d9a8ec0d804663dbd450b3d741c..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid.attacheditem; - -import java.util.List; -import java.util.Map; - -import de.ozgcloud.bescheid.attacheditem.BescheidItem.BescheidItemBuilder; -import de.ozgcloud.command.CommandTestFactory; - -public class BescheidItemTestFactory { - - public static final String ID = "bescheid-item-id"; - public static final long VERSION = 10L; - public static final String CLIENT = "client"; - - public static final String BESCHEIDEN_AM = "2024-01-01"; - public static final String BESCHEID_DOCUMENT = "bescheid-document"; - public static final String ATTACHMENT = "attachment-id"; - public static final String SEND_BY = "POSTFACH"; - public static final String NACHRICHT_TEXT = "nachricht-text"; - public static final String NACHRICHT_SUBJECT = "nachricht-subject"; - - public static BescheidItem create() { - return createBuilder().build(); - } - - public static BescheidItemBuilder createBuilder() { - return BescheidItem.builder() - .id(ID) - .version(VERSION) - .client(CLIENT) - .vorgangId(CommandTestFactory.VORGANG_ID) - .itemName(AttachedItemService.BESCHEID_ITEM_NAME) - .bescheidData(createBescheidBody()); - } - - public static Map<String, Object> createBescheidBody() { - return Map.of( - BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT, - BescheidItem.FIELD_BESCHIEDEN_AM, BESCHEIDEN_AM, - BescheidItem.FIELD_BEWILLIGT, true, - BescheidItem.FIELD_BESCHEID_DOCUMENT, BESCHEID_DOCUMENT, - BescheidItem.FIELD_ATTACHMENTS, List.of(ATTACHMENT), - BescheidItem.FIELD_SEND_BY, SEND_BY, - BescheidItem.FIELD_NACHRICHT_TEXT, NACHRICHT_TEXT, - BescheidItem.FIELD_NACHRICHT_SUBJECT, NACHRICHT_SUBJECT); - } -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java index 85515f502425418404afb44e84fd6ed10473f921..fa3431732af5d052b593ed5b8827d0565741f44c 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java @@ -41,9 +41,9 @@ public class GrpcVorgangAttachedItemTestFactory { static GrpcVorgangAttachedItem.Builder createBuilder() { return GrpcVorgangAttachedItem.newBuilder() - .setId(BescheidItemTestFactory.ID) + .setId(AttachedItemTestFactory.ID) .setVorgangId(CommandTestFactory.VORGANG_ID) - .setClient(BescheidItemTestFactory.CLIENT) + .setClient(AttachedItemTestFactory.CLIENT) .setItemName(AttachedItemService.BESCHEID_ITEM_NAME) .setItem(OBJECT); } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java index 9809590526f543c40d3efa67b4b09908d2b7f478..c6ba16773eaf8c543412d378709d506d7996cd3a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java @@ -35,11 +35,10 @@ class UtilsTest { @Test void shouldReturnClient() { - var command = CommandTestFactory.createBuilder().bodyObject(Map.of(BescheidItem.PROPERTY_CLIENT, BescheidItemTestFactory.CLIENT)) - .build(); + var command = CommandTestFactory.createBuilder().bodyObject(Map.of(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT)).build(); var client = Utils.extractClient(command); - assertThat(client).isEqualTo(BescheidItemTestFactory.CLIENT); + assertThat(client).isEqualTo(AttachedItemTestFactory.CLIENT); } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java index 444249e06cc391cd8b6d05304ab33f93134cb899..11779af655705946b71d382902ce71b3c97118e6 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java @@ -28,11 +28,11 @@ package de.ozgcloud.bescheid.attacheditem; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; -import java.util.Map; +import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.stream.Stream; -import org.apache.commons.collections.MapUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -41,8 +41,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.command.CommandTestFactory; +import de.ozgcloud.vorgang.common.GrpcObject; +import de.ozgcloud.vorgang.common.GrpcProperty; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; @@ -64,8 +68,6 @@ class VorgangAttachedItemRemoteServiceTest { @Mock private ClientInterceptor bescheidCallContextInterceptor; @Mock - private BescheidItemMapper bescheidItemMapper; - @Mock private AttachedItemMapper attachedItemMapper; @Nested @@ -74,15 +76,18 @@ class VorgangAttachedItemRemoteServiceTest { @Mock private GrpcFindVorgangAttachedItemRequest request; - @BeforeEach - void init() { - doReturn(serviceStub).when(service).getServiceStub(); - } - @Nested @DisplayName("by vorgangId") class TestGetByVorgangId { + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + + @BeforeEach + void init() { + doReturn(request).when(service).buildFindRequest(any()); + doReturn(Optional.of(BESCHEID_ITEM)).when(service).findBescheidDraft(any(GrpcFindVorgangAttachedItemRequest.class)); + } + @Test void shouldCallCreateFindRequestBuilder() { service.findBescheidDraft(VORGANG_ID); @@ -92,68 +97,63 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldCallGetBescheidDraft() { - doReturn(request).when(service).buildFindRequest(any()); - service.findBescheidDraft(VORGANG_ID); verify(service).findBescheidDraft(request); } + + @Test + void shouldReturnResult() { + var result = service.findBescheidDraft(VORGANG_ID); + + assertThat(result).contains(BESCHEID_ITEM); + } } @Nested @DisplayName("by grpc request") class TestByGrpcRequest { + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + @Mock private GrpcFindVorgangAttachedItemResponse response; - @Test - void shouldCallGetServiceStub() { - service.findBescheidDraft(request); - - verify(service).getServiceStub(); + @BeforeEach + void init() { } @Test - void shouldCallFind() { - service.findBescheidDraft(request); - - verify(serviceStub).find(request); - } - - @Test - void shouldCallMapper() { - when(serviceStub.find(any())).thenReturn(response); + void shouldCallFindAllBescheid() { + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); service.findBescheidDraft(request); - verify(bescheidItemMapper).fromFindVorgangAttachedItemResponse(response); + verify(service).findAllBescheid(request); } @Test void shouldCallHasStatusDraft() { - var item = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item)); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); service.findBescheidDraft(request); - verify(service).hasStatusDraft(item); + verify(service).hasStatusDraft(BESCHEID_ITEM); } @Test void shouldFilterDraftItems() { - var item = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item)); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); doReturn(true).when(service).hasStatusDraft(any()); var result = service.findBescheidDraft(request); - assertThat(result).contains(item); + assertThat(result).contains(BESCHEID_ITEM); } @Test void shouldReturnEmptyWhenNotFound() { - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.empty()); + doReturn(Stream.empty()).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); var result = service.findBescheidDraft(request); @@ -162,7 +162,7 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldReturnEmptyWhenNotDraft() { - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(BescheidItemTestFactory.create())); + doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); doReturn(false).when(service).hasStatusDraft(any()); var result = service.findBescheidDraft(request); @@ -170,25 +170,45 @@ class VorgangAttachedItemRemoteServiceTest { assertThat(result).isEmpty(); } - @Test - void shouldReturnLastBescheid() { - var item1 = BescheidItemTestFactory.createBuilder().bescheidData(Map.of( - BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01")).build(); - var item2 = BescheidItemTestFactory.create(); - when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item1, item2)); - doReturn(true).when(service).hasStatusDraft(any()); + } - var result = service.findBescheidDraft(request); + } - assertThat(getBeschiedenAm(result)).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM); - } + @Nested + class TestFindAllBescheid { - private String getBeschiedenAm(Optional<BescheidItem> item) { - assertThat(item).isPresent(); - return MapUtils.getString(item.get().getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM); - } + private static final AttachedItem RESULT_BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + + @Mock + private GrpcFindVorgangAttachedItemRequest request; + + @BeforeEach + void init() { + doReturn(Stream.of(RESULT_BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class)); + } + + @Test + void shouldCallBuildFindRequest() { + service.findAllBescheid(VorgangTestFactory.ID); + + verify(service).buildFindRequest(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldCallFindAllBescheid() { + doReturn(request).when(service).buildFindRequest(any()); + + service.findAllBescheid(VorgangTestFactory.ID); + + verify(service).findAllBescheid(request); } + @Test + void shouldReturnResult() { + var result = service.findAllBescheid(VorgangTestFactory.ID); + + assertThat(result).containsExactly(RESULT_BESCHEID_ITEM); + } } @Nested @@ -220,12 +240,75 @@ class VorgangAttachedItemRemoteServiceTest { } } + @Nested + class TestFindAllBescheidWithGrpcRequest { + + @Mock + private GrpcFindVorgangAttachedItemRequest request; + @Mock + private GrpcFindVorgangAttachedItemResponse response; + @Mock + private GrpcVorgangAttachedItem grpcVorgangAttachedItem; + + @BeforeEach + void init() { + doReturn(serviceStub).when(service).getServiceStub(); + when(serviceStub.find(any())).thenReturn(response); + } + + @Test + void shouldCallGetServiceStub() { + service.findAllBescheid(request); + + verify(service).getServiceStub(); + } + + @Test + void shouldCallMapper() { + when(response.getVorgangAttachedItemsList()).thenReturn(Collections.singletonList(grpcVorgangAttachedItem)); + + service.findAllBescheid(request).toList(); + + verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + } + + @Test + void shouldReturnSortedResult() { + var beschiedenAmFirst = "2021-01-01"; + var beschiedenAmLast = "2024-01-01"; + createItems(beschiedenAmFirst, beschiedenAmLast); + + var result = service.findAllBescheid(request).toList(); + + assertThat(result).hasSize(2); + assertThat(result.get(0).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmLast); + assertThat(result.get(1).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmFirst); + } + + private void createItems(String beschiedenAmFirst, String beschiedenAmLast) { + var itemBeschiedenFirst = createGrpcAttachedItem(beschiedenAmLast); + when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenFirst)).thenReturn(createAttachedItem(beschiedenAmLast)); + var itemBeschiedenLast = createGrpcAttachedItem(beschiedenAmFirst); + when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenLast)).thenReturn(createAttachedItem(beschiedenAmFirst)); + when(response.getVorgangAttachedItemsList()).thenReturn(List.of(itemBeschiedenFirst, itemBeschiedenLast)); + } + + private GrpcVorgangAttachedItem createGrpcAttachedItem(String beschiedenAm) { + return GrpcVorgangAttachedItemTestFactory.createBuilder().clearItem().setItem(GrpcObject.newBuilder().addProperty( + GrpcProperty.newBuilder().setName(Bescheid.FIELD_BESCHIEDEN_AM).addValue(beschiedenAm))).build(); + } + + private AttachedItem createAttachedItem(String beschiedenAm) { + return AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm).build(); + } + } + @Nested class TestHasStatusDraft { @Test void shouldReturnTrueIfDraft() { - var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name())) + var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name()) .build(); var result = service.hasStatusDraft(item); @@ -235,7 +318,7 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldReturnFalseIfNotDraft() { - var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.BESCHEID.name())) + var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()) .build(); var result = service.hasStatusDraft(item); @@ -275,7 +358,7 @@ class VorgangAttachedItemRemoteServiceTest { getBescheid(); - verify(service).buildGetByIdRequest(BescheidItemTestFactory.ID); + verify(service).buildGetByIdRequest(AttachedItemTestFactory.ID); } @Test @@ -294,13 +377,13 @@ class VorgangAttachedItemRemoteServiceTest { getBescheid(); - verify(bescheidItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); } @Test void shouldReturnFoundBescheid() { - var expectedBescheid = BescheidItemTestFactory.create(); - when(bescheidItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid); + var expectedBescheid = AttachedItemTestFactory.createBescheid(); + when(attachedItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid); when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); var result = getBescheid(); @@ -308,8 +391,8 @@ class VorgangAttachedItemRemoteServiceTest { assertThat(result).isEqualTo(expectedBescheid); } - private BescheidItem getBescheid() { - return service.getBescheid(BescheidItemTestFactory.ID); + private AttachedItem getBescheid() { + return service.getBescheid(AttachedItemTestFactory.ID); } } @@ -378,7 +461,7 @@ class VorgangAttachedItemRemoteServiceTest { } private AttachedItem getItem() { - return service.getItem(BescheidItemTestFactory.ID); + return service.getItem(AttachedItemTestFactory.ID); } } @@ -387,9 +470,9 @@ class VorgangAttachedItemRemoteServiceTest { @Test void shouldSetBescheidId() { - var request = service.buildGetByIdRequest(BescheidItemTestFactory.ID); + var request = service.buildGetByIdRequest(AttachedItemTestFactory.ID); - assertThat(request.getId()).isEqualTo(BescheidItemTestFactory.ID); + assertThat(request.getId()).isEqualTo(AttachedItemTestFactory.ID); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java index 9696b3cba965a5c2a3c9cdfb50e87dc330b7e37a..41ad8368a3b350af6790e6cc20c0d3e327d792ae 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java @@ -20,6 +20,7 @@ import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.Us import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.test.TestUtils; +import lombok.SneakyThrows; class SmartDocumentsBescheidRemoteServiceTest { @@ -84,6 +85,16 @@ class SmartDocumentsBescheidRemoteServiceTest { assertThat(text).isEmpty(); } + @Test + @SneakyThrows + void shouldExpectMissingTextNode() { + File xmlFileWithoutText = TempFileUtils.writeTmpFile(TestUtils.loadFile("SD_answer_without_text.xml")); + + var text = service.doExtractText(xmlFileWithoutText); + + assertThat(text).isEmpty(); + } + } } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java index 460875695c5f88aaae3ee6d0f83b1532bbc6e432..9589ada3b530def97b9876347110100bf7f788a7 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java @@ -47,10 +47,9 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.BescheidTestFactory; +import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; -import de.ozgcloud.bescheid.attacheditem.BescheidItem; -import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.binaryfile.FileId; @@ -198,11 +197,11 @@ class DocumentServiceTest { @Test void shouldCallGetBescheidItem() { - when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create()); + when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); validateBescheidItem(); - verify(attachedItemService).getBescheidItem(BescheidItemTestFactory.ID); + verify(attachedItemService).getBescheidItem(AttachedItemTestFactory.ID); } @Test @@ -215,20 +214,20 @@ class DocumentServiceTest { @Test void shouldNotThrowExceptionIfNotDraft() { when(attachedItemService.getBescheidItem(any())).thenReturn( - BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "not-draft")).build()); + AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "not-draft").build()); assertThrows(TechnicalException.class, this::validateBescheidItem); } @Test void shouldValidateBescheidItem() { - when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create()); + when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid()); assertDoesNotThrow(this::validateBescheidItem); } void validateBescheidItem() { - service.validateBescheidItem(BescheidItemTestFactory.ID); + service.validateBescheidItem(AttachedItemTestFactory.ID); } } @@ -299,14 +298,14 @@ class DocumentServiceTest { void shouldSetVorgangId() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID); } @Test void shouldSetClient() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_CLIENT, + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); } @@ -314,14 +313,14 @@ class DocumentServiceTest { void shouldSetItemName() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME); } @Test void shouldSetItem() { var attachedItem = buildAttachedItem(); - assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM, ITEM_MAP); + assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM, ITEM_MAP); } private Map<String, Object> buildAttachedItem() { diff --git a/bescheid-manager/src/test/resources/SD_answer_without_text.xml b/bescheid-manager/src/test/resources/SD_answer_without_text.xml new file mode 100644 index 0000000000000000000000000000000000000000..62f2d02636091f1b13e7ce9c05208096415be20f --- /dev/null +++ b/bescheid-manager/src/test/resources/SD_answer_without_text.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<root> + <SmartDocument Version="2.0"> + <Fields> + + </Fields> + </SmartDocument> +</root> \ No newline at end of file diff --git a/notification-manager/pom.xml b/notification-manager/pom.xml deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml index 5191abd0045b2444ae50c6d14d504d0b13fd8b91..16aaa67122d0dbcbb8bb5a398e981fed2e1293ab 100644 --- a/vorgang-manager-base/pom.xml +++ b/vorgang-manager-base/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> diff --git a/vorgang-manager-command/pom.xml b/vorgang-manager-command/pom.xml index 2f1a0e52ae4cf2090ae4ae388353898168204b01..ed489b6236cce36418c132be176d709394b0a1f8 100644 --- a/vorgang-manager-command/pom.xml +++ b/vorgang-manager-command/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent> diff --git a/vorgang-manager-interface/pom.xml b/vorgang-manager-interface/pom.xml index cfb2cc6e25d0c90eabc6ee17b9632e06a41ad9ca..ca299a6d8eb8f93ad3c36d8daadc1b94b267081a 100644 --- a/vorgang-manager-interface/pom.xml +++ b/vorgang-manager-interface/pom.xml @@ -30,7 +30,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent> diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index 7719beb188b32fd0fdec649061e9844c5b7119e6..dc8cc1c5bc16b8277a61fd4b7741fc2fe921c924 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto @@ -138,6 +138,7 @@ message GrpcAntragsteller { string postfachId = 13 [deprecated = true]; GrpcFormData otherData = 30; + string firmaName = 31; } message GrpcFormData { diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index c4a43800f8c8840b5f69e2f36ace711f45abee4c..a7eb857b2513f868d27f73a78a70284ab7b83e33 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -32,7 +32,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath /> </parent> @@ -80,7 +80,7 @@ <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager-postfach-interface</artifactId> + <artifactId>nachrichten-manager-server</artifactId> <version>${nachrichten-manager.version}</version> </dependency> <dependency> @@ -248,7 +248,14 @@ <!-- Test --> <dependency> <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager-postfach-interface</artifactId> + <artifactId>nachrichten-manager-server</artifactId> + <version>${project.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>de.ozgcloud.nachrichten</groupId> + <artifactId>nachrichten-manager-interface</artifactId> <version>${project.version}</version> <type>test-jar</type> <scope>test</scope> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java index ba3e53ac5fcf412fa4b8b5a504cfe78651c06116..bd44ef4fce63620a80f042cb4a8e6f1c9f5eb5ea 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java @@ -53,7 +53,8 @@ public class GrpcVorgangAttachedItemService extends VorgangAttachedItemServiceIm var vorgangAttachedItems = service.find(request.getVorgangId(), Optional.of(request.getClient()), Optional.of(request.getItemName())); - responseObserver.onNext(buildFindResponse(vorgangAttachedItems)); + var value = buildFindResponse(vorgangAttachedItems); + responseObserver.onNext(value); responseObserver.onCompleted(); } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java index 63aee3c41f4aaa594572b35da58cd5270575336e..82bebdd9762ee1a3a698a4a49b3aae60ef7d4e7e 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java @@ -50,8 +50,6 @@ import de.ozgcloud.nachrichten.postfach.AttachmentFile; import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; import de.ozgcloud.nachrichten.postfach.PostfachAddress; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; -import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemMapper; @@ -67,7 +65,7 @@ import lombok.extern.log4j.Log4j2; * @deprecated Temporally replacement for using GRPC Api by MailService */ @Deprecated -@Service +@Service("persistPostfachNachrichtByCommandService") @Log4j2 class PersistPostfachNachrichtByCommandService implements PersistPostfachNachrichtService { @@ -258,21 +256,8 @@ class PersistPostfachNachrichtByCommandService implements PersistPostfachNachric } @Override - public Stream<PostfachNachricht> findRueckfragen(String postfachId) { - // Dummy Implementierung - // TODO OZG-5132 do real implementation - return Stream.of(PostfachNachricht.builder() - .attachments(Collections.emptyList()) - .createdAt(ZonedDateTime.now()) - .sentAt(ZonedDateTime.now()) - .vorgangId("VORGANG_DUMMY_URI") - .createdBy("Klaus") - .direction(Direction.OUT) - .replyOption(ReplyOption.POSSIBLE) - .mailBody("Lorem ipsum dolres est") - .id(UUID.randomUUID().toString()) - .subject("Test") - .build()); + public Stream<PostfachNachricht> findRueckfragen(String servicekontoType, String postfachId) { + throw new UnsupportedOperationException("Not implemented."); } @Override diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java index 6eff50278dcb00f488850aecfe848d8105ce01a5..8d0cb86fd7edaee1461791fa10ad14be4444d64a 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java @@ -33,6 +33,7 @@ import lombok.Getter; public class Antragsteller { private String anrede; + private String firmaName; private String nachname; private String vorname; private String geburtsdatum; diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeaderService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeaderService.java index 16ce17aab587901272f51788567cb3f365b9b909..4642e7c3fd2b68dec5f473c237ababc288747913 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeaderService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeaderService.java @@ -48,7 +48,7 @@ class VorgangHeaderService { private SearchService searchService; public Page<VorgangHeader> findAll(FindVorgangRequest request) { - if (nonNull(searchService) && nonNull(request.getSearchBy())) { + if (nonNull(searchService) && nonNull(request.getSearchBy())) { return removeUnpermitted(searchService.find(request)); } return removeUnpermitted(repository.findAll(request)); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java index e8c29b2f02cdc8d79a94b3102e8181e1832f5f63..198115bf224f689f5836f5737fb3dc757d42d20a 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java @@ -198,7 +198,7 @@ class BescheidEventListenerITCase { await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); - assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); + assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); }); } @@ -290,7 +290,7 @@ class BescheidEventListenerITCase { await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture()); - assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name()); + assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); }); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java index 8c7117a2f2d723922ea492a8cb1aa77f354ce1ad..4523bfa243ba39f5ef3fe4581cb2e883a39f4a36 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java @@ -24,35 +24,107 @@ package de.ozgcloud.bescheid; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; +import java.util.Map; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.test.annotation.DirtiesContext; import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; -import de.ozgcloud.common.test.ITCase; +import de.ozgcloud.bescheid.attacheditem.AttachedItemService; +import de.ozgcloud.bescheid.common.callcontext.CallContextUser; +import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.common.test.DataITCase; import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; import net.devh.boot.grpc.client.inject.GrpcClient; @SpringBootTest(classes = VorgangManagerServerApplication.class, properties = { "grpc.server.inProcessName=test", "grpc.server.port=-1", "grpc.client.inProzess.address=in-process:test", + "grpc.client.vorgang-manager.address=in-process:test", }) -@ITCase +@DataITCase @DirtiesContext class BescheidGrpcServiceITCase { @GrpcClient("inProzess") private BescheidServiceBlockingStub bescheidServiceBlockingStub; - @Test - void shouldReturnBescheidManagerConfig() { - var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); + @Autowired + private MongoOperations mongoOperations; + + @MockBean + private CurrentUserService currentUserService; + @Mock + private CallContextUser callContextUser; + @Mock + private UserProfile userProfile; + + @Nested + class TestFindAll { + + @BeforeEach + void init() { + mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); + when(currentUserService.getUser()).thenReturn(callContextUser); + when(currentUserService.getUserProfile()).thenReturn(userProfile); + } + + @Test + void shouldReturnSortedResult() { + var vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId(); + var bescheidItemFirstId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2022-10-01")).getId(); + var bescheidItemLastId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2024-01-01")).getId(); + + var response = bescheidServiceBlockingStub.getAll(GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build()); + + assertThat(response.getBescheidList()).hasSize(2); + assertThat(response.getBescheidList().get(0).getId()).isEqualTo(bescheidItemLastId); + assertThat(response.getBescheidList().get(1).getId()).isEqualTo(bescheidItemFirstId); + } + + private VorgangAttachedItem createBescheidAttachedItem(String vorgangId, String beschiedenAm) { + return VorgangAttachedItemTestFactory.createBuilder() + .id(null) + .version(0L) + .vorgangId(vorgangId) + .itemName(AttachedItemService.BESCHEID_ITEM_NAME) + .client(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME) + .item(Map.of( + Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name(), + Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm + )) + .build(); + } + + } + + @Nested + class TestGetConfig { + + @Test + void shouldReturnBescheidManagerConfig() { + var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); - assertThat(config.getVersion()).isNotEmpty(); - assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version")); - assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse(); + assertThat(config.getVersion()).isNotEmpty(); + assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version")); + assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse(); + } } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..6364448d2c6449bd7726118475033fc9915448bd --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/FindVorgangIteratorITCase.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.nachrichten.postfach; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.test.annotation.DirtiesContext; + +import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.callcontext.CallContextUser; +import de.ozgcloud.vorgang.callcontext.CurrentUserService; +import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; +import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; +import de.ozgcloud.vorgang.vorgang.Vorgang; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@SpringBootTest(classes = { VorgangManagerServerApplication.class }, properties = { + "grpc.server.inProcessName=test", + "grpc.client.inProcess.address=in-process:test" +}) +@DirtiesContext +@DataITCase +class FindVorgangIteratorITCase { + + @GrpcClient("inProcess") + private VorgangServiceBlockingStub vorgangServiceStub; + + @Autowired + private MongoOperations mongoOperations; + + @MockBean + private CurrentUserService currentUserService; + @Mock + private CallContextUser callContextUser; + + private FindVorgangIterator findVorgangIterator; + + @BeforeEach + void init() { + mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); + when(currentUserService.getUser()).thenReturn(callContextUser); + findVorgangIterator = new FindVorgangIterator(vorgangServiceStub, ServiceKontoTestFactory.TYPE, + PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + } + + @Test + void shouldFindVorgangs() { + var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()); + + var hasNext = findVorgangIterator.hasNext(); + assertThat(hasNext).isTrue(); + + var result = findVorgangIterator.next(); + assertThat(result.getId()).isEqualTo(vorgang.getId()); + } + + @Test + void shouldLoadAllVorgangs() { + IntStream.range(0, FindVorgangIterator.LIMIT + 1).forEach(i -> mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build())); + + var result = loadAllVorgangs(); + + assertThat(result).hasSize(FindVorgangIterator.LIMIT + 1); + } + + private List<GrpcVorgangHeader> loadAllVorgangs() { + var result = new ArrayList<GrpcVorgangHeader>(); + while (findVorgangIterator.hasNext()) { + result.add(findVorgangIterator.next()); + } + return result; + } + +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..81592955e5001a335b2984ac65cab48c325b3507 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImplITCase.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.nachrichten.postfach; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.util.ReflectionTestUtils; + +import de.ozgcloud.common.test.ITCase; +import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.attached_item.GrpcVorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.common.GrpcObject; +import de.ozgcloud.vorgang.common.GrpcProperty; +import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; +import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; +import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; +import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; + +@SpringBootTest(classes = { VorgangManagerServerApplication.class }) +@ITCase +class PersistPostfachNachrichtServiceImplITCase { + + private static final String MESSAGE_ID = "message-id"; + @Autowired + private PersistPostfachNachrichtServiceImpl service; + @Autowired + private VorgangRemoteService vorgangRemoteService; + @Autowired + private AttachedItemRemoteService attachedItemRemoteService; + + private AtomicInteger counter = new AtomicInteger(1); + @Mock + private VorgangServiceBlockingStub vorgangServiceStub; + @Mock + private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; + + @BeforeEach + void init() { + when(vorgangServiceStub.withInterceptors(any())).thenReturn(vorgangServiceStub); + ReflectionTestUtils.setField(vorgangRemoteService, "vorgangServiceStub", vorgangServiceStub); + + when(vorgangAttachedItemServiceStub.withInterceptors(any())).thenReturn(vorgangAttachedItemServiceStub); + ReflectionTestUtils.setField(attachedItemRemoteService, "vorgangAttachedItemServiceStub", vorgangAttachedItemServiceStub); + + mockFindVorgang(); + mockFindAttachedItems(); + } + + @Test + void shouldFindRuckfragen() { + var rueckfragen = service.findRueckfragen(ServiceKontoTestFactory.TYPE, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + + assertThat(rueckfragen).hasSize(1).first().extracting(PostfachNachricht::getId).isEqualTo(MESSAGE_ID); + } + + private void mockFindVorgang() { + when(vorgangServiceStub.findVorgang(any())).thenAnswer(invocation -> { + if (counter.getAndDecrement() == 0) { + return GrpcFindVorgangResponse.newBuilder().build(); + } + return GrpcFindVorgangResponse.newBuilder().setTotal(1).addVorgang(GrpcVorgangHeader.newBuilder().build()).build(); + }); + } + + private void mockFindAttachedItems() { + var attachedItemResponse = GrpcFindVorgangAttachedItemResponse.newBuilder() + .addVorgangAttachedItems(GrpcVorgangAttachedItemTestFactory.create()) + .addVorgangAttachedItems(GrpcVorgangAttachedItemTestFactory.createBuilder().setItem(buildGrpcObject())).build(); + when(vorgangAttachedItemServiceStub.find(any())).thenReturn(attachedItemResponse); + } + + private GrpcObject buildGrpcObject() { + return GrpcObject.newBuilder() + .addProperty(GrpcProperty.newBuilder() + .setName(PostfachNachricht.FIELD_REPLY_OPTION).addValue(PostfachNachricht.ReplyOption.POSSIBLE.name()).build()) + .addProperty(GrpcProperty.newBuilder() + .setName(PostfachNachricht.FIELD_CREATED_AT).addValue(PostfachNachrichtTestFactory.CREATED_AT_STR)) + .addProperty(GrpcProperty.newBuilder() + .setName(PostfachNachricht.FIELD_DIRECTION).addValue(PostfachNachrichtTestFactory.DIRECTION.name())) + .addProperty(GrpcProperty.newBuilder() + .setName(PostfachNachricht.FIELD_ID).addValue(MESSAGE_ID).build()) + .build(); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java index 8db9ce23a49f33ee2b2a058eb33906fd56882813..3c854a2b30507856ca155319bf708256f53f681a 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java @@ -231,7 +231,8 @@ class PostfachMailITCase { } private GrpcSendPostfachMailRequest buildSendPostfachMailRequestWithoutAttachments() { - var grpcPostfachMail = GrpcPostfachMailTestFactory.createBuilder().clearId().clearAttachment().clearCreatedAt().clearDirection().build(); + var grpcPostfachMail = GrpcPostfachMailTestFactory.createBuilder().clearId().clearAttachment().clearCreatedAt().clearDirection() + .setVorgangId(MessageTestFactory.VORGANG_ID).build(); return GrpcSendPostfachMailRequestTestFactory.createBuilder().setMail(grpcPostfachMail).build(); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemTestFactory.java index 764b878dd36d4c900547277227d05eb8d49b1329..712d28ebb0f6a91f18f27fc6d7514323509ced74 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemTestFactory.java @@ -33,11 +33,11 @@ public class GrpcVorgangAttachedItemTestFactory { public static final GrpcObject OBJECT = GrpcObject.newBuilder() .addProperty(GrpcProperty.newBuilder().setName(PROPERTY_NAME).addValue(PROPERTY_NAME_VALUE).build()).build(); - static GrpcVorgangAttachedItem create() { + public static GrpcVorgangAttachedItem create() { return createBuilder().build(); } - static GrpcVorgangAttachedItem.Builder createBuilder() { + public static GrpcVorgangAttachedItem.Builder createBuilder() { return GrpcVorgangAttachedItem.newBuilder() .setId(VorgangAttachedItemTestFactory.ID) .setClient(VorgangAttachedItemTestFactory.CLIENT) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceITCase.java index e067a39f8f711cf6ada2b9801e93fde04cf1ae87..cc936fbc36384816f4eddfc9cc82c9ef66a8d7f9 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceITCase.java @@ -99,7 +99,7 @@ class CommandServiceITCase { .build(); Command persistedCommand = commandService.createCommand(request); - verify(commandService, timeout(500)).setCommandFinished(eq(persistedCommand.getId()), any()); + verify(commandService, timeout(60000)).setCommandFinished(eq(persistedCommand.getId()), any()); Optional<Command> commandOpt = commandService.findCommand(persistedCommand.getId()); assertThat(commandOpt).isPresent(); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java index d21e22dc459fe019b62febb4a21352e6aed6f44c..86c84e32d5547a2341f4e04e9077d4ddf51c182b 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java @@ -32,6 +32,7 @@ public class AntragstellerTestFactory { public static final String ANREDE = "Herr"; public static final String NACHNAME = LoremIpsum.getInstance().getLastName(); + public static final String FIRMA_NAME = "Firma X"; public static final String VORNAME = LoremIpsum.getInstance().getFirstName(); public static final String GEBURTSDATUM = "1995-01-01"; public static final String GEBURTSORT = LoremIpsum.getInstance().getCountry(); @@ -56,6 +57,7 @@ public class AntragstellerTestFactory { public static Antragsteller.AntragstellerBuilder createBuilder() { return Antragsteller.builder() .anrede(ANREDE) + .firmaName(FIRMA_NAME) .nachname(NACHNAME) .vorname(VORNAME) .geburtsdatum(GEBURTSDATUM) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java index 7285adac2106b40a5168f40f2182361c0796eb05..7a077b811aa2dd403138f458f7b6bad6970dadd3 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java @@ -52,6 +52,7 @@ public class GrpcAntragstellerTestFactory { public static GrpcAntragsteller.Builder createBuilder() { return GrpcAntragsteller.newBuilder() .setAnrede(ANREDE) + .setFirmaName(AntragstellerTestFactory.FIRMA_NAME) .setGeburtsdatum(GEBURTSDATUM) .setNachname(NACHNAME) .setVorname(VORNAME) diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml index 4a2153ccae3ddc0da1688b870b947b69824ba036..24b78b3a4bf638fbc7ba91582fe1fed92a0a789f 100644 --- a/vorgang-manager-utils/pom.xml +++ b/vorgang-manager-utils/pom.xml @@ -30,7 +30,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.0.1</version> + <version>4.1.0-SNAPSHOT</version> <relativePath/> </parent>