From a37452323c067ae0e7d14d08d94b66dadb3f86af Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 23 Sep 2024 09:19:22 +0200 Subject: [PATCH] =?UTF-8?q?OZG-6751=20Validierung=20zum=20Grpc=20Service?= =?UTF-8?q?=20hinzugef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../info/nachricht/NachrichtGrpcService.java | 21 ++++++++++++++++++- .../NachrichtenGrpcServiceITCase.java | 10 +++++++++ .../NachrichtenGrpcTestConfiguration.java | 15 ++++++++++--- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java index 8b41576..4bae807 100644 --- a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java +++ b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java @@ -20,9 +20,14 @@ package de.ozgcloud.info.nachricht; +import java.util.Set; + +import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validator; import de.ozgcloud.info.common.InvalidNachrichtenListUrlException; +import de.ozgcloud.info.common.NachrichtEvent; import io.grpc.Status; import io.grpc.stub.StreamObserver; import lombok.RequiredArgsConstructor; @@ -35,6 +40,7 @@ public class NachrichtGrpcService extends NachrichtServiceGrpc.NachrichtServiceI private final NachrichtService nachrichtService; private final NachrichtMapper nachrichtenMapper; + private final Validator validator; @Override public void saveNewNachricht(GrpcNewNachrichtRequest request, StreamObserver<GrpcNewNachrichtReply> responseObserver) { @@ -49,7 +55,20 @@ public class NachrichtGrpcService extends NachrichtServiceGrpc.NachrichtServiceI } private void saveNachricht(GrpcNewNachrichtRequest request) { - nachrichtService.save(nachrichtenMapper.fromGrpcNachricht(request.getNachricht())); + var nachricht = nachrichtenMapper.fromGrpcNachricht(request.getNachricht()); + + if (isValid(nachricht)) { + nachrichtService.save(nachricht); + } + } + + private boolean isValid(NachrichtEvent nachrichtEvent) { + Set<ConstraintViolation<NachrichtEvent>> violations = validator.validate(nachrichtEvent); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); + } + + return true; } @Override diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceITCase.java b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceITCase.java index 93025e8..03a5821 100644 --- a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceITCase.java +++ b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceITCase.java @@ -30,6 +30,7 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import de.ozgcloud.info.NachrichtEventTestFactory; +import io.grpc.StatusRuntimeException; import net.devh.boot.grpc.client.inject.GrpcClient; @SpringBootTest(properties = { @@ -54,6 +55,15 @@ class NachrichtenGrpcServiceITCase { assertThat(response.getStatus()).isEqualTo(STATUS_OK); } + + @Test + @DirtiesContext + void shouldNotSaveInvalidNewNachricht() { + var nachricht = GrpcNachricht.newBuilder().setNachrichtenListUrl("lala").build(); + var request = NachrichtEventTestFactory.createNewNachrichtRequest().toBuilder().setNachricht(nachricht).build(); + + assertThatExceptionOfType(StatusRuntimeException.class).isThrownBy(() -> service.saveNewNachricht(request)); + } } @Nested diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcTestConfiguration.java b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcTestConfiguration.java index daac2ed..1585b16 100644 --- a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcTestConfiguration.java +++ b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcTestConfiguration.java @@ -24,9 +24,13 @@ package de.ozgcloud.info.nachricht; import static org.mockito.Mockito.*; +import jakarta.validation.Validator; + import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration; import net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration; @@ -40,7 +44,12 @@ import net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguratio class NachrichtenGrpcTestConfiguration { @Bean NachrichtService nachrichtenService() { - return mock(NachrichtService.class); + return new NachrichtService(nachrichtenRepository()); + } + + @Bean + Validator validator() { + return new LocalValidatorFactoryBean(); } @Bean @@ -50,11 +59,11 @@ class NachrichtenGrpcTestConfiguration { @Bean NachrichtMapper nachrichtenMapper() { - return mock(NachrichtMapper.class); + return new NachrichtMapper(mock(Environment.class)); } @Bean NachrichtGrpcService nachrichtenGrpcService() { - return new NachrichtGrpcService(nachrichtenService(), nachrichtenMapper()); + return new NachrichtGrpcService(nachrichtenService(), nachrichtenMapper(), validator()); } } -- GitLab