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

OZG-5584 find all bescheids for vorgang

parent de2c60eb
No related branches found
No related tags found
No related merge requests found
...@@ -26,7 +26,6 @@ package de.ozgcloud.bescheid.attacheditem; ...@@ -26,7 +26,6 @@ package de.ozgcloud.bescheid.attacheditem;
import static java.util.Objects.*; import static java.util.Objects.*;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
...@@ -219,7 +218,6 @@ public class AttachedItemService { ...@@ -219,7 +218,6 @@ public class AttachedItemService {
} }
public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) { public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) {
return remoteService.findAllBescheid(vorgangId);
return Collections.emptyList();
} }
} }
...@@ -26,14 +26,18 @@ package de.ozgcloud.bescheid.attacheditem; ...@@ -26,14 +26,18 @@ package de.ozgcloud.bescheid.attacheditem;
import static de.ozgcloud.bescheid.attacheditem.AttachedItemService.*; import static de.ozgcloud.bescheid.attacheditem.AttachedItemService.*;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
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 de.ozgcloud.bescheid.Bescheid;
import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
import de.ozgcloud.bescheid.vorgang.VorgangId;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest;
import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub;
...@@ -51,6 +55,12 @@ class VorgangAttachedItemRemoteService { ...@@ -51,6 +55,12 @@ class VorgangAttachedItemRemoteService {
return beschiedenAm2.compareTo(beschiedenAm1); return beschiedenAm2.compareTo(beschiedenAm1);
}; };
private static final Comparator<AttachedItem> BY_BESCHIEDEN_AM_DESC_NEW = (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);
};
@GrpcClient("vorgang-manager") @GrpcClient("vorgang-manager")
private VorgangAttachedItemServiceBlockingStub serviceStub; private VorgangAttachedItemServiceBlockingStub serviceStub;
@Autowired @Autowired
...@@ -64,6 +74,10 @@ class VorgangAttachedItemRemoteService { ...@@ -64,6 +74,10 @@ class VorgangAttachedItemRemoteService {
return findBescheidDraft(buildFindRequest(vorgangId)); return findBescheidDraft(buildFindRequest(vorgangId));
} }
public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) {
return findAllBescheid(buildFindRequest(vorgangId.toString()));
}
GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) {
return GrpcFindVorgangAttachedItemRequest.newBuilder() return GrpcFindVorgangAttachedItemRequest.newBuilder()
.setVorgangId(vorgangId) .setVorgangId(vorgangId)
...@@ -83,6 +97,12 @@ class VorgangAttachedItemRemoteService { ...@@ -83,6 +97,12 @@ class VorgangAttachedItemRemoteService {
return bescheidItems.isEmpty() ? Optional.empty() : Optional.of(bescheidItems.getFirst()); return bescheidItems.isEmpty() ? Optional.empty() : Optional.of(bescheidItems.getFirst());
} }
List<AttachedItem> findAllBescheid(GrpcFindVorgangAttachedItemRequest request) {
var grpcResponse = getServiceStub().find(request);
return grpcResponse.getVorgangAttachedItemsList().stream().map(attachedItemMapper::mapFromVorgangAttachedItem)
.sorted(BY_BESCHIEDEN_AM_DESC_NEW).toList();
}
boolean hasStatusDraft(BescheidItem bescheidItem) { boolean hasStatusDraft(BescheidItem bescheidItem) {
return BescheidItem.Status.DRAFT.hasValue(MapUtils.getString(bescheidItem.getBescheidData(), BescheidItem.FIELD_STATUS)); return BescheidItem.Status.DRAFT.hasValue(MapUtils.getString(bescheidItem.getBescheidData(), BescheidItem.FIELD_STATUS));
} }
......
...@@ -49,6 +49,8 @@ import de.ozgcloud.apilib.common.command.grpc.CommandMapper; ...@@ -49,6 +49,8 @@ import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
import de.ozgcloud.apilib.common.datatypes.GenericId; import de.ozgcloud.apilib.common.datatypes.GenericId;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; 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.Command;
import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.command.CommandTestFactory;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
...@@ -894,4 +896,25 @@ class AttachedItemServiceTest { ...@@ -894,4 +896,25 @@ class AttachedItemServiceTest {
return service.buildObjectMap(AttachedItemTestFactory.createBescheid()); return service.buildObjectMap(AttachedItemTestFactory.createBescheid());
} }
} }
@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(List.of(expectedBescheidItem));
var result = service.findAllBescheid(VorgangTestFactory.ID);
assertThat(result).containsExactly(expectedBescheidItem);
}
}
} }
\ No newline at end of file
...@@ -28,6 +28,7 @@ package de.ozgcloud.bescheid.attacheditem; ...@@ -28,6 +28,7 @@ package de.ozgcloud.bescheid.attacheditem;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -41,8 +42,12 @@ import org.mockito.InjectMocks; ...@@ -41,8 +42,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import de.ozgcloud.bescheid.Bescheid;
import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
import de.ozgcloud.command.CommandTestFactory; 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.GrpcFindVorgangAttachedItemRequest;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem;
...@@ -191,6 +196,43 @@ class VorgangAttachedItemRemoteServiceTest { ...@@ -191,6 +196,43 @@ class VorgangAttachedItemRemoteServiceTest {
} }
@Nested
class TestFindAllBescheid {
private static final AttachedItem RESULT_BESCHEID_ITEM = AttachedItemTestFactory.createBescheid();
@Mock
private GrpcFindVorgangAttachedItemRequest request;
@BeforeEach
void init() {
doReturn(List.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 @Nested
class TestBuildFindRequest { class TestBuildFindRequest {
...@@ -220,6 +262,69 @@ class VorgangAttachedItemRemoteServiceTest { ...@@ -220,6 +262,69 @@ 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(List.of(grpcVorgangAttachedItem));
service.findAllBescheid(request);
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);
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 @Nested
class TestHasStatusDraft { class TestHasStatusDraft {
......
...@@ -53,7 +53,8 @@ public class GrpcVorgangAttachedItemService extends VorgangAttachedItemServiceIm ...@@ -53,7 +53,8 @@ public class GrpcVorgangAttachedItemService extends VorgangAttachedItemServiceIm
var vorgangAttachedItems = service.find(request.getVorgangId(), Optional.of(request.getClient()), Optional.of(request.getItemName())); 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(); responseObserver.onCompleted();
} }
......
...@@ -24,28 +24,99 @@ ...@@ -24,28 +24,99 @@
package de.ozgcloud.bescheid; package de.ozgcloud.bescheid;
import static org.assertj.core.api.Assertions.*; 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.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.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; 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.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; import net.devh.boot.grpc.client.inject.GrpcClient;
@SpringBootTest(classes = VorgangManagerServerApplication.class, properties = { @SpringBootTest(classes = VorgangManagerServerApplication.class, properties = {
"grpc.server.inProcessName=test", "grpc.server.inProcessName=test",
"grpc.server.port=-1", "grpc.server.port=-1",
"grpc.client.inProzess.address=in-process:test", "grpc.client.inProzess.address=in-process:test",
"grpc.client.vorgang-manager.address=in-process:test",
}) })
@ITCase @DataITCase
@DirtiesContext @DirtiesContext
class BescheidGrpcServiceITCase { class BescheidGrpcServiceITCase {
@GrpcClient("inProzess") @GrpcClient("inProzess")
private BescheidServiceBlockingStub bescheidServiceBlockingStub; private BescheidServiceBlockingStub bescheidServiceBlockingStub;
@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 @Test
void shouldReturnBescheidManagerConfig() { void shouldReturnBescheidManagerConfig() {
var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build());
...@@ -54,5 +125,6 @@ class BescheidGrpcServiceITCase { ...@@ -54,5 +125,6 @@ class BescheidGrpcServiceITCase {
assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version")); assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version"));
assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse(); assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse();
} }
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment