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

Merge pull request 'OZG-6858-Zugriffsberechtigung' (#485) from...

Merge pull request 'OZG-6858-Zugriffsberechtigung' (#485) from OZG-6858-Zugriffsberechtigung into master

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


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents 19af82f7 b49664db
No related branches found
No related tags found
No related merge requests found
......@@ -55,7 +55,7 @@
<user-manager-interface.version>2.9.0</user-manager-interface.version>
<bescheid-manager.version>1.20.0-SNAPSHOT</bescheid-manager.version>
<processor-manager.version>0.4.1</processor-manager.version>
<nachrichten-manager.version>2.12.1</nachrichten-manager.version>
<nachrichten-manager.version>2.13.0-SNAPSHOT</nachrichten-manager.version>
<ozgcloud-starter.version>0.12.0</ozgcloud-starter.version>
<notification-manager.version>2.11.1</notification-manager.version>
<collaboration-manager.version>0.3.0</collaboration-manager.version>
......
......@@ -102,6 +102,16 @@ public class ExceptionHandler {
return Status.INTERNAL.withDescription(message).withCause(e.getCause());
}
@GrpcExceptionHandler
public StatusException handleNotFoundException(de.ozgcloud.apilib.common.errorhandling.NotFoundException e) {
var exceptionId = createExceptionId();
var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId);
LOG.error("Grpc internal server error: {}", messageWithExceptionId, e);
var status = Status.NOT_FOUND.withDescription(messageWithExceptionId).withCause(e.getCause());
return createStatusException(status, buildMetadata(exceptionId));
}
private Metadata buildMetadata(String exceptionId) {
var metadata = new Metadata();
addExceptionId(metadata, exceptionId);
......
......@@ -24,6 +24,7 @@ import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.annotation.DirtiesContext;
import de.ozgcloud.apilib.common.errorhandling.NotFoundException;
import de.ozgcloud.common.test.DataITCase;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.nachrichten.postfach.PostfachAddress;
......@@ -186,6 +187,58 @@ class AntragraumITCase {
}
}
@DisplayName("Ger rueckfrage")
@Nested
class TestGetRueckfrage {
@Mock
private StreamObserver<GrpcGetRueckfrageResponse> responseObserver;
@Captor
private ArgumentCaptor<GrpcGetRueckfrageResponse> captor;
private Vorgang savedVorgang;
private VorgangAttachedItem vorgangAttachedItem;
@BeforeEach
void prepareDatabase() {
savedVorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), Vorgang.COLLECTION_NAME);
vorgangAttachedItem = mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()),
VorgangAttachedItem.COLLECTION_NAME);
when(verifier.verify(any())).thenReturn(Collections.emptyList());
when(decrypter.decryptTrustLevel(any())).thenReturn("STORK-QAA-Level-1");
}
@Test
void shouldReturnOnMatchingPostfachId() {
when(decrypter.decryptPostfachId(any())).thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
var request = GrpcGetRueckfrageRequestTestFactory.createBuilder()
.setId(vorgangAttachedItem.getId())
.setSamlToken(TestUtils.loadTextFile("SamlResponse.xml"))
.build();
grpcService.getRueckfrage(request, responseObserver);
verify(responseObserver, timeout(30000)).onNext(captor.capture());
assertThat(captor.getValue().getRueckfrage()).isNotNull();
}
@Test
void shouldThrowExceptionOnMismatchingPostfachId() {
when(decrypter.decryptPostfachId(any())).thenReturn("not-match-postfach-id");
var request = GrpcGetRueckfrageRequestTestFactory.createBuilder()
.setId(vorgangAttachedItem.getId())
.setSamlToken(TestUtils.loadTextFile("SamlResponse.xml"))
.build();
assertThatThrownBy(() -> grpcService.getRueckfrage(request, responseObserver))
.isInstanceOf(NotFoundException.class)
.hasMessageContaining("PostfachNachricht")
.hasMessageContaining(vorgangAttachedItem.getId());
}
}
private Vorgang createVorgang(TrustLevel trustLevel) {
return VorgangTestFactory.createBuilder()
.id(null)
......
......@@ -29,12 +29,14 @@ import static org.mockito.Mockito.*;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import org.springframework.security.access.AccessDeniedException;
import de.ozgcloud.apilib.common.datatypes.GenericId;
import de.ozgcloud.common.errorhandling.FunctionalErrorCode;
import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.vorgang.vorgang.Vorgang;
......@@ -308,4 +310,55 @@ class ExceptionHandlerTest {
return handler.handleSearchServiceUnavailableException(exception);
}
}
@DisplayName("Handle not found exception (from api lib)")
@Nested
class TestHandleNotFoundExceptionFromApiLib {
private final String exceptionId = "42";
private final GenericId id = GenericId.from(VorgangTestFactory.ID);
private final String entityName = Vorgang.class.toString();
@BeforeEach
void mockExceptionId() {
doReturn(exceptionId).when(handler).createExceptionId();
}
@Test
void shouldHaveStatusCode() {
var status = handleException().getStatus();
assertThat(status.getCode()).isEqualTo(Code.NOT_FOUND);
}
@Test
void shouldHaveMessage() {
var statusException = handleException();
assertThat(statusException.getMessage()).contains(id.toString());
assertThat(statusException.getMessage()).contains(entityName);
assertThat(statusException.getMessage()).contains(exceptionId);
}
@Test
void shouldHaveStatusDescription() {
var status = handleException().getStatus();
assertThat(status.getDescription()).contains(id.toString());
assertThat(status.getDescription()).contains(entityName);
assertThat(status.getDescription()).contains(exceptionId);
}
@Test
void shouldHaveExceptionId() {
var metaData = handleException().getTrailers();
assertThat(metaData.get(createExceptionIdKey())).isEqualTo(exceptionId);
}
private StatusException handleException() {
return handler.handleNotFoundException(
new de.ozgcloud.apilib.common.errorhandling.NotFoundException(id, entityName));
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment