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

OZG-5010 OZG-5432 grpc call to getDocument()

parent 2f1664bc
No related branches found
No related tags found
No related merge requests found
Showing
with 311 additions and 50 deletions
...@@ -13,7 +13,7 @@ import de.ozgcloud.alfa.common.binaryfile.FileId; ...@@ -13,7 +13,7 @@ import de.ozgcloud.alfa.common.binaryfile.FileId;
import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
import de.ozgcloud.bescheid.GrpcBescheid; import de.ozgcloud.bescheid.GrpcBescheid;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = FileIdMapper.class) @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = FileIdMapper.class)
interface BescheidMapper { interface BescheidMapper {
@Mapping(target = "attachments", source = "grpcBescheid.attachmentsList") @Mapping(target = "attachments", source = "grpcBescheid.attachmentsList")
......
...@@ -5,10 +5,7 @@ import java.util.Optional; ...@@ -5,10 +5,7 @@ import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.GrpcUtil; import de.ozgcloud.alfa.common.GrpcUtil;
import de.ozgcloud.alfa.common.binaryfile.FileId;
import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
import de.ozgcloud.bescheid.GrpcBescheid; import de.ozgcloud.bescheid.GrpcBescheid;
import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest;
...@@ -38,15 +35,4 @@ class BescheidRemoteService { ...@@ -38,15 +35,4 @@ class BescheidRemoteService {
Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) { Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) {
return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty(); return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty();
} }
public Document getDocument(String documentId) {
// TODO: replace this dummy implementation with a grpc call (OZG-5323)
return Document.builder()
.id(documentId)
.fileId(FileId.from("Test-File-ID"))
.type("Bescheid")
.nachrichtSubject("Ein Bescheid-Dokument")
.nachrichtText(LoremIpsum.getInstance().getWords(20))
.build();
}
} }
\ No newline at end of file
...@@ -15,8 +15,4 @@ public class BescheidService { ...@@ -15,8 +15,4 @@ public class BescheidService {
public Optional<Bescheid> getBescheidDraft(String vorgangId) { public Optional<Bescheid> getBescheidDraft(String vorgangId) {
return remoteService.getBescheidDraft(vorgangId); return remoteService.getBescheidDraft(vorgangId);
} }
public Document getDocument(String documentId) {
return remoteService.getDocument(documentId);
}
} }
...@@ -15,11 +15,11 @@ public class DocumentController { ...@@ -15,11 +15,11 @@ public class DocumentController {
static final String PATH = BescheidController.PATH + "/document"; static final String PATH = BescheidController.PATH + "/document";
private final BescheidService bescheidService; private final DocumentService documentService;
private final DocumentModelAssembler assembler; private final DocumentModelAssembler assembler;
@GetMapping("/{documentId}") @GetMapping("/{documentId}")
public EntityModel<Document> getDocument(@PathVariable String documentId) { public EntityModel<Document> getDocument(@PathVariable String documentId) {
return assembler.toModel(bescheidService.getDocument(documentId)); return assembler.toModel(documentService.getDocument(documentId));
} }
} }
package de.ozgcloud.alfa.bescheid;
import org.mapstruct.Mapper;
import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.ReportingPolicy;
import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
import de.ozgcloud.document.GrpcDocument;
@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = FileIdMapper.class)
public interface DocumentMapper {
Document fromGrpc(GrpcDocument grpcDocument);
}
package de.ozgcloud.alfa.bescheid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import de.ozgcloud.alfa.common.GrpcUtil;
import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceBlockingStub;
import de.ozgcloud.document.GrpcGetDocumentRequest;
import net.devh.boot.grpc.client.inject.GrpcClient;
@Service
public class DocumentRemoteService {
@GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT)
private DocumentServiceBlockingStub documentServiceStub;
@Autowired
private DocumentMapper documentMapper;
public Document getDocument(String documentId) {
var response = documentServiceStub.getDocument(GrpcGetDocumentRequest.newBuilder().setId(documentId).build());
return documentMapper.fromGrpc(response.getDocument());
}
}
package de.ozgcloud.alfa.bescheid;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class DocumentService {
private final DocumentRemoteService remoteService;
public Document getDocument(String documentId) {
return remoteService.getDocument(documentId);
}
}
...@@ -23,6 +23,13 @@ class BescheidMapperTest { ...@@ -23,6 +23,13 @@ class BescheidMapperTest {
@Nested @Nested
class TestFromGrpc { class TestFromGrpc {
@Test
void shouldMapId() {
var bescheid = map();
assertThat(bescheid.getId()).isEqualTo(GrpcBescheidTestFactory.ID);
}
@Test @Test
void shouldMapVorgangId() { void shouldMapVorgangId() {
var bescheid = map(); var bescheid = map();
......
...@@ -28,7 +28,7 @@ class BescheidRemoteServiceTest { ...@@ -28,7 +28,7 @@ class BescheidRemoteServiceTest {
private BescheidMapper bescheidMapper; private BescheidMapper bescheidMapper;
@Nested @Nested
class GetBescheidDraftTest { class TestGetBescheidDraft {
private final GrpcGetBescheidDraftRequest request = GrpcGetBescheidDraftRequestTestFactory.create(); private final GrpcGetBescheidDraftRequest request = GrpcGetBescheidDraftRequestTestFactory.create();
private final GrpcGetBescheidDraftResponse response = GrpcGetBescheidDraftResponseTestFactory.create(); private final GrpcGetBescheidDraftResponse response = GrpcGetBescheidDraftResponseTestFactory.create();
...@@ -91,7 +91,7 @@ class BescheidRemoteServiceTest { ...@@ -91,7 +91,7 @@ class BescheidRemoteServiceTest {
} }
@Nested @Nested
class GrpcGetBescheidDraftRequestTest { class TestBuildGetBescheidDraftRequest {
@Test @Test
void shouldHaveVorgangId() { void shouldHaveVorgangId() {
...@@ -102,7 +102,7 @@ class BescheidRemoteServiceTest { ...@@ -102,7 +102,7 @@ class BescheidRemoteServiceTest {
} }
@Nested @Nested
class GetBescheidFromResponseTest { class TestGetBescheidFromResponse {
@Test @Test
void shouldReturnEmpty() { void shouldReturnEmpty() {
......
...@@ -41,25 +41,4 @@ class BescheidServiceTest { ...@@ -41,25 +41,4 @@ class BescheidServiceTest {
assertThat(result).isEqualTo(remoteServiceResult); assertThat(result).isEqualTo(remoteServiceResult);
} }
} }
@Nested
class TestGetDocument {
@Test
void shouldCallRemoteService() {
service.getDocument(DocumentTestFactory.ID);
verify(remoteService).getDocument(DocumentTestFactory.ID);
}
@Test
void shouldReturnResultFromRemoteService() {
var remoteServiceResult = DocumentTestFactory.create();
when(remoteService.getDocument(DocumentTestFactory.ID)).thenReturn(remoteServiceResult);
var result = service.getDocument(DocumentTestFactory.ID);
assertThat(result).isEqualTo(remoteServiceResult);
}
}
} }
...@@ -17,7 +17,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; ...@@ -17,7 +17,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
class DocumentControllerTest { class DocumentControllerTest {
@Mock @Mock
private BescheidService bescheidService; private DocumentService documentService;
@Mock @Mock
private DocumentModelAssembler assembler; private DocumentModelAssembler assembler;
@Spy @Spy
...@@ -38,14 +38,14 @@ class DocumentControllerTest { ...@@ -38,14 +38,14 @@ class DocumentControllerTest {
@BeforeEach @BeforeEach
void init() { void init() {
when(bescheidService.getDocument(BescheidTestFactory.BESCHEID_DOCUMENT)).thenReturn(document); when(documentService.getDocument(DocumentTestFactory.ID)).thenReturn(document);
} }
@Test @Test
void shouldGetDocument() throws Exception { void shouldGetDocument() throws Exception {
doRequest(); doRequest();
verify(bescheidService).getDocument(BescheidTestFactory.BESCHEID_DOCUMENT); verify(documentService).getDocument(DocumentTestFactory.ID);
} }
@Test @Test
...@@ -61,7 +61,7 @@ class DocumentControllerTest { ...@@ -61,7 +61,7 @@ class DocumentControllerTest {
} }
private ResultActions doRequest() throws Exception { private ResultActions doRequest() throws Exception {
return mockMvc.perform(get(DocumentController.PATH + "/{documentId}", BescheidTestFactory.BESCHEID_DOCUMENT)); return mockMvc.perform(get(DocumentController.PATH + "/{documentId}", DocumentTestFactory.ID));
} }
} }
} }
package de.ozgcloud.alfa.bescheid;
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.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
public class DocumentMapperTest {
@Mock
private FileIdMapper fileIdMapper;
@InjectMocks
private final DocumentMapper mapper = Mappers.getMapper(DocumentMapper.class);
@Nested
class TestFromGrpc {
@BeforeEach
void init() {
when(fileIdMapper.toFileId(GrpcDocumentTestFactory.FILE_ID)).thenReturn(DocumentTestFactory.FILE_ID);
}
@Test
void shouldMapId() {
var document = map();
assertThat(document.getId()).isEqualTo(GrpcDocumentTestFactory.ID);
}
@Test
void shouldMapType() {
var document = map();
assertThat(document.getType()).isEqualTo(GrpcDocumentTestFactory.TYPE);
}
@Test
void shouldMapFileId() {
var document = map();
assertThat(document.getFileId()).isEqualTo(DocumentTestFactory.FILE_ID);
}
@Test
void shouldMapNachrichtSubject() {
var document = map();
assertThat(document.getNachrichtSubject()).isEqualTo(GrpcDocumentTestFactory.NACHRICHT_SUBJECT);
}
@Test
void shouldMapNachrichtText() {
var document = map();
assertThat(document.getNachrichtText()).isEqualTo(GrpcDocumentTestFactory.NACHRICHT_TEXT);
}
private Document map() {
return mapper.fromGrpc(GrpcDocumentTestFactory.create());
}
}
}
package de.ozgcloud.alfa.bescheid;
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.ArgumentMatcher;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceBlockingStub;
import de.ozgcloud.document.GrpcGetDocumentRequest;
public class DocumentRemoteServiceTest {
@Mock
private DocumentServiceBlockingStub documentServiceStub;
@Mock
private DocumentMapper documentMapper;
@Spy
@InjectMocks
private DocumentRemoteService service;
@Nested
class TestGetDocument {
private static final ArgumentMatcher<GrpcGetDocumentRequest> REQUEST_MATCHER = request -> request.getId().equals(DocumentTestFactory.ID);
private final Document document = DocumentTestFactory.create();
@BeforeEach
void init() {
when(documentServiceStub.getDocument(argThat(REQUEST_MATCHER))).thenReturn(GrpcGetDocumentResponseTestFactory.create());
when(documentMapper.fromGrpc(GrpcGetDocumentResponseTestFactory.GRPC_DOCUMENT)).thenReturn(document);
}
@Test
void shouldCallGrpcService() {
callService();
verify(documentServiceStub).getDocument(argThat(REQUEST_MATCHER));
}
@Test
void shouldCallMapper() {
callService();
verify(documentMapper).fromGrpc(GrpcGetDocumentResponseTestFactory.GRPC_DOCUMENT);
}
@Test
void shouldReturnDocument() {
var result = callService();
assertThat(result).isEqualTo(document);
}
private Document callService() {
return service.getDocument(DocumentTestFactory.ID);
}
}
}
package de.ozgcloud.alfa.bescheid;
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;
public class DocumentServiceTest {
@Mock
private DocumentRemoteService remoteService;
@Spy
@InjectMocks
private DocumentService service;
@Nested
class TestGetDocument {
private final Document document = DocumentTestFactory.create();
@BeforeEach
void init() {
when(remoteService.getDocument(DocumentTestFactory.ID)).thenReturn(document);
}
@Test
void shouldCallRemoteService() {
service.getDocument(DocumentTestFactory.ID);
verify(remoteService).getDocument(DocumentTestFactory.ID);
}
@Test
void shouldReturnResultFromRemoteService() {
var result = service.getDocument(DocumentTestFactory.ID);
assertThat(result).isEqualTo(document);
}
}
}
...@@ -7,6 +7,7 @@ import de.ozgcloud.common.datatype.StringBasedValue; ...@@ -7,6 +7,7 @@ import de.ozgcloud.common.datatype.StringBasedValue;
public class GrpcBescheidTestFactory { public class GrpcBescheidTestFactory {
public static final String ID = BescheidTestFactory.ID;
public static final boolean BEWILLIGT = BescheidTestFactory.BEWILLIGT; public static final boolean BEWILLIGT = BescheidTestFactory.BEWILLIGT;
public static final String BESCHIEDEN_AM = BescheidTestFactory.BESCHIEDEN_AM; public static final String BESCHIEDEN_AM = BescheidTestFactory.BESCHIEDEN_AM;
public static final String BESCHEID_DOCUMENT = BescheidTestFactory.BESCHEID_DOCUMENT; public static final String BESCHEID_DOCUMENT = BescheidTestFactory.BESCHEID_DOCUMENT;
...@@ -20,6 +21,7 @@ public class GrpcBescheidTestFactory { ...@@ -20,6 +21,7 @@ public class GrpcBescheidTestFactory {
public static GrpcBescheid.Builder createBuilder() { public static GrpcBescheid.Builder createBuilder() {
return GrpcBescheid.newBuilder() return GrpcBescheid.newBuilder()
.setId(ID)
.setBewilligt(BEWILLIGT) .setBewilligt(BEWILLIGT)
.setBeschiedenAm(BESCHIEDEN_AM) .setBeschiedenAm(BESCHIEDEN_AM)
.setBescheidDocument(BESCHEID_DOCUMENT) .setBescheidDocument(BESCHEID_DOCUMENT)
......
package de.ozgcloud.alfa.bescheid;
import de.ozgcloud.document.GrpcDocument;
public class GrpcDocumentTestFactory {
public static final String ID = DocumentTestFactory.ID;
public static final String TYPE = DocumentTestFactory.TYPE;
public static final String FILE_ID = DocumentTestFactory.FILE_ID.toString();
public static final String NACHRICHT_SUBJECT = DocumentTestFactory.NACHRICHT_SUBJECT;
public static final String NACHRICHT_TEXT = DocumentTestFactory.NACHRICHT_TEXT;
public static GrpcDocument create() {
return createBuilder().build();
}
public static GrpcDocument.Builder createBuilder() {
return GrpcDocument.newBuilder()
.setId(ID)
.setType(TYPE)
.setFileId(FILE_ID)
.setNachrichtSubject(NACHRICHT_SUBJECT)
.setNachrichtText(NACHRICHT_TEXT);
}
}
package de.ozgcloud.alfa.bescheid;
import de.ozgcloud.document.GrpcGetDocumentRequest;
public class GrpcGetDocumentRequestTestFactory {
public static final String ID = DocumentTestFactory.ID;
public static GrpcGetDocumentRequest create() {
return createBuilder().build();
}
public static GrpcGetDocumentRequest.Builder createBuilder() {
return GrpcGetDocumentRequest.newBuilder().setId(ID);
}
}
package de.ozgcloud.alfa.bescheid;
import de.ozgcloud.document.GrpcDocument;
import de.ozgcloud.document.GrpcGetDocumentResponse;
public class GrpcGetDocumentResponseTestFactory {
public static final GrpcDocument GRPC_DOCUMENT = GrpcDocumentTestFactory.create();
public static GrpcGetDocumentResponse create() {
return createBuilder().build();
}
public static GrpcGetDocumentResponse.Builder createBuilder() {
return GrpcGetDocumentResponse.newBuilder().setDocument(GRPC_DOCUMENT);
}
}
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<vorgang-manager.version>2.5.0</vorgang-manager.version> <vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version>
<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
<user-manager.version>2.2.0</user-manager.version> <user-manager.version>2.2.0</user-manager.version>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment