Skip to content
Snippets Groups Projects
Commit 427c6223 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-5323 (Bescheid-) Document laden' (#329) from...

Merge pull request 'OZG-5323 (Bescheid-) Document laden' (#329) from OZG-5323-Bescheid-Document-laden into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/vorgang-manager/pulls/329


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents eba7db4f 9ba36e82
Branches
Tags
No related merge requests found
Showing
with 781 additions and 10 deletions
......@@ -15,7 +15,7 @@
<version>1.10.0-SNAPSHOT</version>
<properties>
<vorgang-manager.version>2.5.0</vorgang-manager.version>
<vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version>
<api-lib.version>0.7.0-SNAPSHOT</api-lib.version>
</properties>
......
/*
* 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 lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class AttachedItem {
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";
private String id;
@Builder.Default
private long version = 0L;
private String client;
private String vorgangId;
private String itemName;
private Map<String, Object> item;
}
/*
* 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 org.mapstruct.Mapper;
import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem;
@Mapper(uses = { GrpcObjectMapper.class})
interface AttachedItemMapper {
AttachedItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item);
}
......@@ -185,4 +185,7 @@ public class AttachedItemService {
.build();
}
public AttachedItem getItem(String id) {
return remoteService.getItem(id);
}
}
......@@ -31,6 +31,7 @@ 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");
......
......@@ -42,6 +42,7 @@ import lombok.RequiredArgsConstructor;
@Component
@RequiredArgsConstructor
@Deprecated(since = "2.6.0")
public class BescheidItemMapper {
private final GrpcObjectMapper grpcObjectMapper;
......
......@@ -57,6 +57,8 @@ class VorgangAttachedItemRemoteService {
private ClientInterceptor bescheidCallContextInterceptor;
@Autowired
private BescheidItemMapper bescheidItemMapper;
@Autowired
private AttachedItemMapper attachedItemMapper;
public Optional<BescheidItem> findBescheidDraft(String vorgangId) {
return findBescheidDraft(buildFindRequest(vorgangId));
......@@ -90,6 +92,11 @@ class VorgangAttachedItemRemoteService {
return bescheidItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem());
}
public AttachedItem getItem(String id) {
var grpcVorgangAttachedItemResponse = getServiceStub().getById(buildGetByIdRequest(id));
return attachedItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem());
}
GrpcVorgangAttachedItemRequest buildGetByIdRequest(String bescheidId) {
return GrpcVorgangAttachedItemRequest.newBuilder().setId(bescheidId).build();
}
......
/*
* 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.document;
import lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class Document {
public static final String FIELD_DOCUMENT_TYPE = "type";
public static final String FIELD_DOCUMENT_FILE = "documentFile";
public static final String FIELD_NACHRICHT_TEXT = "nachrichtText";
public static final String FIELD_NACHRICHT_SUBJECT = "nachrichtSubject";
private String id;
private String type;
private String fileId;
private String nachrichtSubject;
private String nachrichtText;
}
/*
* 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.document;
import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceImplBase;
import io.grpc.stub.StreamObserver;
import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService
@RequiredArgsConstructor
public class DocumentGrpcService extends DocumentServiceImplBase {
private final DocumentService documentService;
private final DocumentMapper documentMapper;
@Override
public void getDocument(GrpcGetDocumentRequest request, StreamObserver<GrpcGetDocumentResponse> responseObserver) {
var document = documentService.getDocument(request.getId());
responseObserver.onNext(buildGetDocumentResponse(document));
responseObserver.onCompleted();
}
GrpcGetDocumentResponse buildGetDocumentResponse(Document document) {
return GrpcGetDocumentResponse.newBuilder().setDocument(documentMapper.toGrpcDocument(document)).build();
}
}
/*
* 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.document;
import org.apache.commons.collections.MapUtils;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import de.ozgcloud.bescheid.attacheditem.AttachedItem;
@Mapper
interface DocumentMapper {
@Mapping(target = "unknownFields", ignore = true)
@Mapping(target = "typeBytes", ignore = true)
@Mapping(target = "nachrichtTextBytes", ignore = true)
@Mapping(target = "nachrichtSubjectBytes", ignore = true)
@Mapping(target = "mergeUnknownFields", ignore = true)
@Mapping(target = "mergeFrom", ignore = true)
@Mapping(target = "idBytes", ignore = true)
@Mapping(target = "fileIdBytes", ignore = true)
@Mapping(target = "clearOneof", ignore = true)
@Mapping(target = "clearField", ignore = true)
GrpcDocument toGrpcDocument(Document document);
default Document fromAttacheItem(AttachedItem attachedItem) {
return Document.builder()
.id(attachedItem.getId())
.type(MapUtils.getString(attachedItem.getItem(), Document.FIELD_DOCUMENT_TYPE))
.fileId(MapUtils.getString(attachedItem.getItem(), Document.FIELD_DOCUMENT_FILE))
.nachrichtText(MapUtils.getString(attachedItem.getItem(), Document.FIELD_NACHRICHT_TEXT))
.nachrichtSubject(MapUtils.getString(attachedItem.getItem(), Document.FIELD_NACHRICHT_SUBJECT))
.build();
}
}
......@@ -44,15 +44,17 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class DocumentService {
public static final String DOCUMENT_ITEM_NAME = "Document";
public static final String DOCUMENT_TYPE = "BESCHEID";
static final String CREATE_ATTACHED_ITEM_ORDER = "CREATE_ATTACHED_ITEM";
static final String DOCUMENT_ITEM_NAME = "Document";
static final String FIELD_DOCUMENT_TYPE = "type";
static final String DOCUMENT_TYPE = "BESCHEID";
static final String FIELD_DOCUMENT_FILE = "documentFile";
private final AttachedItemService attachedItemService;
private final OzgCloudCommandService commandService;
private final CommandMapper commandMapper;
private final DocumentMapper documentMapper;
public String createBescheidDocument(Command command) {
validateBescheidItem(command.getRelationId());
......@@ -93,4 +95,7 @@ public class DocumentService {
return Map.of(FIELD_DOCUMENT_TYPE, DOCUMENT_TYPE, FIELD_DOCUMENT_FILE, fileId);
}
public Document getDocument(String id) {
return documentMapper.fromAttacheItem(attachedItemService.getItem(id));
}
}
/*
* 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 org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import de.ozgcloud.document.DocumentService;
import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
class AttachedItemMapperTest {
@InjectMocks
private AttachedItemMapper mapper = Mappers.getMapper(AttachedItemMapper.class);
@Mock
private GrpcObjectMapper grpcObjectMapper;
@BeforeEach
void init() {
when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem());
}
@Test
void shouldMapFromVorgangAttachedItem() {
var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME)
.setVersion(AttachedItemTestFactory.VERSION).build();
var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument());
}
}
\ No newline at end of file
......@@ -727,4 +727,25 @@ class AttachedItemServiceTest {
}
}
@Nested
class TestGetItem {
@Test
void shouldCallRemoteService() {
service.getItem(BescheidItemTestFactory.ID);
verify(service).getItem(BescheidItemTestFactory.ID);
}
@Test
void shouldReturnValue() {
var expectedItem = AttachedItemTestFactory.createDocument();
doReturn(expectedItem).when(remoteService).getItem(any());
var result = service.getItem(BescheidItemTestFactory.ID);
assertThat(result).isEqualTo(expectedItem);
}
}
}
\ No newline at end of file
/*
* 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.AttachedItem.AttachedItemBuilder;
import de.ozgcloud.command.CommandTestFactory;
import de.ozgcloud.document.Document;
import de.ozgcloud.document.DocumentService;
import de.ozgcloud.document.DocumentTestFactory;
public class AttachedItemTestFactory {
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 AttachedItem createBescheid() {
return createBuilder()
.itemName(AttachedItemService.BESCHEID_ITEM_NAME)
.item(createBescheidItem())
.build();
}
public static Map<String, Object> createBescheidItem() {
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);
}
public static AttachedItem createDocument() {
return createBuilder()
.itemName(DocumentService.DOCUMENT_ITEM_NAME)
.item(createDocumentItem())
.build();
}
public static Map<String, Object> createDocumentItem() {
return Map.of(
Document.FIELD_DOCUMENT_TYPE, DocumentService.DOCUMENT_TYPE,
Document.FIELD_DOCUMENT_FILE, DocumentTestFactory.DOCUMENT_FILE,
Document.FIELD_NACHRICHT_TEXT, DocumentTestFactory.NACHRICHT_TEXT,
Document.FIELD_NACHRICHT_SUBJECT, DocumentTestFactory.NACHRICHT_SUBJECT
);
}
public static AttachedItemBuilder createBuilder() {
return AttachedItem.builder()
.id(ID)
.version(VERSION)
.client(CLIENT)
.vorgangId(CommandTestFactory.VORGANG_ID);
}
}
......@@ -26,7 +26,6 @@
package de.ozgcloud.bescheid.attacheditem;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.Map;
......@@ -51,7 +50,6 @@ import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse;
import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub;
import io.grpc.ClientInterceptor;
import io.grpc.StatusRuntimeException;
class VorgangAttachedItemRemoteServiceTest {
......@@ -67,6 +65,8 @@ class VorgangAttachedItemRemoteServiceTest {
private ClientInterceptor bescheidCallContextInterceptor;
@Mock
private BescheidItemMapper bescheidItemMapper;
@Mock
private AttachedItemMapper attachedItemMapper;
@Nested
class TestFindBescheidDraft {
......@@ -308,15 +308,77 @@ class VorgangAttachedItemRemoteServiceTest {
assertThat(result).isEqualTo(expectedBescheid);
}
private BescheidItem getBescheid() {
return service.getBescheid(BescheidItemTestFactory.ID);
}
}
@Nested
class TestGetItem {
@Mock
private GrpcVorgangAttachedItemRequest grpcVorgangAttachedItemRequest;
@Mock
private GrpcVorgangAttachedItemResponse grpcVorgangAttachedItemResponse;
@Mock
private GrpcVorgangAttachedItem grpcVorgangAttachedItem;
@BeforeEach
void init() {
when(serviceStub.getById(any())).thenReturn(grpcVorgangAttachedItemResponse);
doReturn(serviceStub).when(service).getServiceStub();
}
@Test
void shouldThrowExceptionIfNotFound() {
when(serviceStub.getById(any())).thenThrow(StatusRuntimeException.class);
void shouldCallGetServiceStab() {
when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
getItem();
assertThrows(StatusRuntimeException.class, this::getBescheid);
verify(service).getServiceStub();
}
private BescheidItem getBescheid() {
return service.getBescheid(BescheidItemTestFactory.ID);
@Test
void shouldCallBuildRequest() {
when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
getItem();
verify(service).buildGetByIdRequest(AttachedItemTestFactory.ID);
}
@Test
void shouldCallGetById() {
when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
doReturn(grpcVorgangAttachedItemRequest).when(service).buildGetByIdRequest(any());
getItem();
verify(serviceStub).getById(grpcVorgangAttachedItemRequest);
}
@Test
void shouldCallMapper() {
when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
getItem();
verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
}
@Test
void shouldReturnFoundBescheid() {
var expectedItem = AttachedItemTestFactory.createDocument();
when(attachedItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedItem);
when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
var result = getItem();
assertThat(result).isEqualTo(expectedItem);
}
private AttachedItem getItem() {
return service.getItem(BescheidItemTestFactory.ID);
}
}
......
/*
* 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.document;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import io.grpc.stub.StreamObserver;
class DocumentGrpcServiceTest {
@Spy
@InjectMocks
private DocumentGrpcService service;
@Mock
private DocumentService documentService;
@Mock
private DocumentMapper documentMapper;
@Nested
class TestGetDocument {
private final static GrpcGetDocumentRequest REQUEST = GrpcGetDocumentRequest.newBuilder().setId(DocumentTestFactory.ID).build();
@Mock
private GrpcGetDocumentResponse response;
@Mock
private StreamObserver<GrpcGetDocumentResponse> responseObserver;
@BeforeEach
void init() {
doReturn(response).when(service).buildGetDocumentResponse(any());
}
@Test
void shouldCallDocumentService() {
service.getDocument(REQUEST, responseObserver);
verify(documentService).getDocument(DocumentTestFactory.ID);
}
@Test
void shouldCallBuildResponse() {
service.getDocument(REQUEST, responseObserver);
verify(service).buildGetDocumentResponse(any());
}
@Test
void shouldCallOnNext() {
service.getDocument(REQUEST, responseObserver);
verify(responseObserver).onNext(response);
}
@Test
void shouldCallOnCompleted() {
service.getDocument(REQUEST, responseObserver);
verify(responseObserver).onCompleted();
}
}
@Nested
class TestBuildGetDocumentResponse {
@Mock
private GrpcDocument grpcDocument;
@BeforeEach
void init() {
when(documentMapper.toGrpcDocument(any())).thenReturn(grpcDocument);
}
@Test
void shouldCallDocumentMapper() {
var document = DocumentTestFactory.create();
service.buildGetDocumentResponse(document);
verify(documentMapper).toGrpcDocument(document);
}
@Test
void shouldSetDocument() {
var result = service.buildGetDocumentResponse(DocumentTestFactory.create());
assertThat(result.getDocument()).isEqualTo(grpcDocument);
}
}
}
\ No newline at end of file
/*
* 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.document;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
class DocumentMapperTest {
private DocumentMapper mapper = Mappers.getMapper(DocumentMapper.class);
@Test
void shouldMapDocument() {
var result = mapper.toGrpcDocument(DocumentTestFactory.create());
assertThat(result).usingRecursiveComparison().isEqualTo(GrpcDocumentTestFactory.create());
}
}
\ No newline at end of file
......@@ -44,6 +44,7 @@ import de.ozgcloud.apilib.common.datatypes.GenericId;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
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;
......@@ -65,6 +66,8 @@ class DocumentServiceTest {
private CommandMapper commandMapper;
@Mock
private AttachedItemService attachedItemService;
@Mock
private DocumentMapper documentMapper;
private Command command = CommandTestFactory.createBuilder()
.relationId(RELATION_ID)
......@@ -293,4 +296,34 @@ class DocumentServiceTest {
}
}
@Nested
class TestGetDocument {
@Test
void shouldCallAttachedItemService() {
service.getDocument(AttachedItemTestFactory.ID);
verify(attachedItemService).getItem(AttachedItemTestFactory.ID);
}
@Test
void shouldCallDocumentMapper() {
var expectedItem = AttachedItemTestFactory.createDocument();
when(attachedItemService.getItem(any())).thenReturn(expectedItem);
service.getDocument(AttachedItemTestFactory.ID);
verify(documentMapper).fromAttacheItem(expectedItem);
}
@Test
void shouldReturnDocument() {
var expectedDocument = DocumentTestFactory.create();
when(documentMapper.fromAttacheItem(any())).thenReturn(expectedDocument);
Document document = service.getDocument(AttachedItemTestFactory.ID);
assertThat(document).isEqualTo(expectedDocument);
}
}
}
\ No newline at end of file
/*
* 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.document;
import de.ozgcloud.document.Document.DocumentBuilder;
public class DocumentTestFactory {
public static final String ID = "documentId";
public static final String TYPE = "type";
public static final String DOCUMENT_FILE = "file-id";
public static final String NACHRICHT_SUBJECT = "subject";
public static final String NACHRICHT_TEXT = "text";
public static Document create() {
return createBuilder().build();
}
public static DocumentBuilder createBuilder() {
return Document.builder()
.id(ID)
.type(TYPE)
.fileId(DOCUMENT_FILE)
.nachrichtSubject(NACHRICHT_SUBJECT)
.nachrichtText(NACHRICHT_TEXT);
}
}
/*
* 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.document;
public class GrpcDocumentTestFactory {
public static GrpcDocument create() {
return createBuilder().build();
}
public static GrpcDocument.Builder createBuilder() {
return GrpcDocument.newBuilder()
.setId(DocumentTestFactory.ID)
.setType(DocumentTestFactory.TYPE)
.setFileId(DocumentTestFactory.DOCUMENT_FILE)
.setNachrichtSubject(DocumentTestFactory.NACHRICHT_SUBJECT)
.setNachrichtText(DocumentTestFactory.NACHRICHT_TEXT);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment