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

OZG-530 OZG-555 connect grpc endpoints for fileservices

parent 7e985e1c
No related branches found
No related tags found
No related merge requests found
package de.itvsh.goofy.file;
import java.util.UUID;
import java.util.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.thedeanda.lorem.LoremIpsum;
import de.itvsh.goofy.common.ContextService;
import de.itvsh.ozg.pluto.grpc.file.FileServiceGrpc.FileServiceBlockingStub;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetAttachmentsRequest;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetAttachmentsResponse;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetRepresentationsRequest;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetRepresentationsResponse;
import net.devh.boot.grpc.client.inject.GrpcClient;
@Service
......@@ -15,23 +18,38 @@ public class FileRemoteService {
@GrpcClient("pluto")
private FileServiceBlockingStub fileServiceStub;
// @Autowired
// private ContextService contextService;
// @Autowired
// private FileMapper fileMapper;
@Autowired
private ContextService contextService;
@Autowired
private FileMapper fileMapper;
public Stream<File> getAttachmentsByEingang(String eingangId) {
// TODO an Pluto ankabeln
// GrpcGetAttachmentsResponse response = fileServiceStub.getAttachments(buildGrpcGetAttachmentsRequest(eingangId));
//
// return response.getFileList().stream().map(fileMapper::toEingang);
return Stream.of(File.builder().id(UUID.randomUUID().toString()).name(LoremIpsum.getInstance().getName()).size(1024).build());
GrpcGetAttachmentsResponse response = fileServiceStub.getAttachments(buildGrpcGetAttachmentsRequest(eingangId));
return response.getFileList().stream().map(fileMapper::toEingang);
}
private GrpcGetAttachmentsRequest buildGrpcGetAttachmentsRequest(String eingangId) {
return GrpcGetAttachmentsRequest.newBuilder()
.setContext(contextService.createCallContext())
.setEingangId(eingangId)
.build();
}
public Stream<File> getRepresentationsByEingang(String eingangId) {
GrpcGetRepresentationsResponse response = fileServiceStub.getRepresentations(buildGrpcGetRepresentationsRequest(eingangId));
return response.getFileList().stream().map(fileMapper::toEingang);
}
// private GrpcGetAttachmentsRequest buildGrpcGetAttachmentsRequest(String eingangId) {
// return GrpcGetAttachmentsRequest.newBuilder()
// .setContext(contextService.createCallContext())
// .setEingangId(eingangId)
// .build();
// }
private GrpcGetRepresentationsRequest buildGrpcGetRepresentationsRequest(String eingangId) {
return GrpcGetRepresentationsRequest.newBuilder()
.setContext(contextService.createCallContext())
.setEingangId(eingangId)
.build();
}
}
\ No newline at end of file
......@@ -14,4 +14,8 @@ public class FileService {
public Stream<File> getAttachmentsByEingang(String eingangId) {
return remoteService.getAttachmentsByEingang(eingangId);
}
public Stream<File> getRepresentationsByEingang(String eingangId) {
return remoteService.getRepresentationsByEingang(eingangId);
}
}
\ No newline at end of file
package de.itvsh.goofy.file;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -15,8 +16,13 @@ public class RepresentationController {
static final String PARAM_EINGANG_ID = "eingangId";
@Autowired
private FileService fileService;
@Autowired
private FileModelAssembler modelAssembler;
@GetMapping(params = PARAM_EINGANG_ID)
public CollectionModel<EntityModel<File>> getAllByEingang(@RequestParam String eingangId) {
return CollectionModel.empty();
return modelAssembler.toCollectionModel(fileService.getRepresentationsByEingang(eingangId));
}
}
......@@ -7,7 +7,6 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
......@@ -19,6 +18,7 @@ import de.itvsh.goofy.vorgang.EingangTestFactory;
import de.itvsh.ozg.pluto.grpc.command.GrpcCallContext;
import de.itvsh.ozg.pluto.grpc.file.FileServiceGrpc.FileServiceBlockingStub;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetAttachmentsResponse;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetRepresentationsResponse;
class FileRemoteServiceTest {
......@@ -31,7 +31,6 @@ class FileRemoteServiceTest {
@Mock
private ContextService contextService;
@Disabled("TODO Einkommentieren, wenn Pluto angekabelt ist")
@Nested
class TestGetAttachmentsByEingang {
......@@ -74,4 +73,47 @@ class FileRemoteServiceTest {
remoteService.getAttachmentsByEingang(EingangTestFactory.ID);
}
}
@Nested
class TestGetRepresentationsByEingang {
private final GrpcGetRepresentationsResponse response = GrpcGetRepresentationsResponseTestFactory.create();
private GrpcCallContext callContext = GrpcCallContextTestFactory.create();
@BeforeEach
void mock() {
when(serviceStub.getRepresentations(any())).thenReturn(response);
when(contextService.createCallContext()).thenReturn(callContext);
}
@Test
void shouldCallContextService() {
doServiceCall();
verify(contextService).createCallContext();
}
@Test
void shouldCallFileStub() {
doServiceCall();
verify(serviceStub).getRepresentations(any());
}
@Test
void shouldCallMapper() {
var fileStream = remoteService.getRepresentationsByEingang(EingangTestFactory.ID);
fileStream = forceActionsDone(fileStream);
verify(mapper).toEingang(GrpcFileTestFactory.create());
}
private Stream<File> forceActionsDone(Stream<File> stream) {
return stream.collect(Collectors.toList()).stream();
}
private void doServiceCall() {
remoteService.getRepresentationsByEingang(EingangTestFactory.ID);
}
}
}
\ No newline at end of file
package de.itvsh.goofy.file;
import java.util.Collections;
import de.itvsh.ozg.pluto.grpc.file.GrpcFile;
import de.itvsh.ozg.pluto.grpc.file.GrpcGetRepresentationsResponse;
public class GrpcGetRepresentationsResponseTestFactory {
private static GrpcFile GRPC_FILE = GrpcFileTestFactory.create();
public static GrpcGetRepresentationsResponse create() {
return createBuilder().build();
}
public static GrpcGetRepresentationsResponse.Builder createBuilder() {
return GrpcGetRepresentationsResponse.newBuilder()
.addAllFile(Collections.singleton(GRPC_FILE));
}
}
\ No newline at end of file
package de.itvsh.goofy.file;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
......@@ -16,6 +22,10 @@ class RepresentationControllerTest {
@InjectMocks
private RepresentationController controller;
@Mock
private FileModelAssembler modelAssembler;
@Mock
private FileService fileService;
private MockMvc mockMvc;
......@@ -27,11 +37,30 @@ class RepresentationControllerTest {
@Nested
class TestGetRepresentationsByEingang {
@BeforeEach
void mockFileService() {
when(fileService.getRepresentationsByEingang(anyString())).thenReturn(Stream.of(FileTestFactory.create()));
}
@Test
void shouldCallEndpoint() throws Exception {
callEndpoint();
}
@Test
void shoudlCallFileService() throws Exception {
callEndpoint();
verify(fileService).getRepresentationsByEingang(any());
}
@Test
void shouldCallModelAssembler() throws Exception {
callEndpoint();
verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<File>>any());
}
private void callEndpoint() throws Exception {
mockMvc.perform(get(PATH).param(RepresentationController.PARAM_EINGANG_ID, "1")).andExpect(status().isOk());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment