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

Merge pull request 'OZG-6710 Update common-lib' (#31) from OZG-6710-Update-common-lib into master

parents 87d62c18 b7d748c9
No related branches found
No related tags found
No related merge requests found
Showing
with 515 additions and 159 deletions
......@@ -11,11 +11,9 @@
<artifactId>api-lib-core</artifactId>
<properties>
<lombok.version>1.18.30</lombok.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<lombok.version>1.18.34</lombok.version>
<!-- plugins -->
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
<maven-failsafe-plugin.version>3.2.5</maven-failsafe-plugin.version>
<jacoco.plugin.version>0.8.11</jacoco.plugin.version>
</properties>
......@@ -50,9 +48,11 @@
<!--spring -->
<dependency>
<!-- FIXME letzte Version von dieser Dependency ist 2.15.0.RELEASE. -->
<!-- Kann es durch ein adneres Dependency ersetz werden? -->
<groupId>net.devh</groupId>
<artifactId>grpc-client-spring-boot-autoconfigure</artifactId>
<version>2.14.0.RELEASE</version>
<version>2.15.0.RELEASE</version>
</dependency>
<dependency>
......@@ -155,7 +155,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<version>${failsafe-plugin.version}</version>
<configuration>
<argLine>
${surefire.jacoco.args}
......
......@@ -9,8 +9,6 @@ import java.util.concurrent.TimeoutException;
import java.util.logging.Level;
import org.apache.commons.io.IOUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import com.google.protobuf.ByteString;
......@@ -40,8 +38,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log;
import net.devh.boot.grpc.client.inject.GrpcClient;
@Service
@ConditionalOnProperty("ozgcloud.file-manager.address")
@RequiredArgsConstructor
@Log
public class GrpcOzgCloudFileService implements OzgCloudFileService {
......
......@@ -23,31 +23,31 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression.Builder;
@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.WARN)
public interface OzgCloudVorgangQueryMapper {
static final String FORM_ENGINE_NAME_PATH = "eingangs.header.formEngineName";
static final String STATUS_PATH = "status";
static final String ORGANISATIONS_EINHEIT_ID_PATH = "eingangs.zustaendigeStelle.organisationseinheitenId";
static final String AKTENZEICHEN_PATH = "aktenzeichen";
static final String FORM_ID_PATH = "eingangs.header.formId";
String FORM_ENGINE_NAME_PATH = "eingangs.header.formEngineName";
String STATUS_PATH = "status";
String ORGANISATIONS_EINHEIT_ID_PATH = "eingangs.zustaendigeStelle.organisationseinheitenId";
String AKTENZEICHEN_PATH = "aktenzeichen";
String FORM_ID_PATH = "eingangs.header.formId";
default GrpcQuery toGrpc(OzgCloudVorgangQuery ozgCloudVorgangQuery) {
var queryBuilder = mapPropertiesToQuery(ozgCloudVorgangQuery);
if (queryBuilder.getExpressionsList().isEmpty()) {
return ozgCloudVorgangQuery.getQuery().map(this::toQuery)
.orElseGet(GrpcQuery::getDefaultInstance);
return hasPropertyExpressions(ozgCloudVorgangQuery)
? mapAllToQuery(ozgCloudVorgangQuery)
: ozgCloudVorgangQuery.getQuery().map(this::toQuery).orElseGet(GrpcQuery::getDefaultInstance);
}
ozgCloudVorgangQuery.getQuery().map(this::toQuery).ifPresent(queryBuilder::setNestedQuery);
return queryBuilder.build();
default boolean hasPropertyExpressions(OzgCloudVorgangQuery query) {
return query.getAktenzeichen().isPresent() || query.getForm().isPresent() || query.getStatus().isPresent()
|| query.getOrganisationsEinheitId().isPresent();
}
default GrpcQuery.Builder mapPropertiesToQuery(OzgCloudVorgangQuery query) {
default GrpcQuery mapAllToQuery(OzgCloudVorgangQuery query) {
var queryBuilder = GrpcQuery.newBuilder().setLogicalOperator(GrpcLogicalOperator.AND);
query.getAktenzeichen().map(this::toAktenzeichenExpression).ifPresent(queryBuilder::addExpressions);
query.getForm().map(this::toFormExpressions).ifPresent(queryBuilder::addAllExpressions);
query.getStatus().map(this::toStatusExpression).ifPresent(queryBuilder::addExpressions);
query.getOrganisationsEinheitId().map(this::toOrganisationsEinheitIdExpression).ifPresent(queryBuilder::addExpressions);
return queryBuilder;
query.getQuery().map(this::toQuery).ifPresent(queryBuilder::setNestedQuery);
return queryBuilder.build();
}
default GrpcVorgangQueryExpression toAktenzeichenExpression(String aktenzeichen) {
......@@ -72,24 +72,20 @@ public interface OzgCloudVorgangQueryMapper {
}
default Set<GrpcVorgangQueryExpression> toFormExpressions(FormIdentification formIdentification) {
var expressions = new HashSet<GrpcVorgangQueryExpression>(2);
Optional.ofNullable(formIdentification.getFormEngineName())
.map(this::toFormEngineNameExpression)
.ifPresent(expressions::add);
Optional.ofNullable(formIdentification.getFormId())
.map(this::toFormIdExpression)
.ifPresent(expressions::add);
var expressions = HashSet.<GrpcVorgangQueryExpression>newHashSet(2);
Optional.ofNullable(formIdentification.getFormEngineName()).map(this::toFormEngineNameExpression).ifPresent(expressions::add);
Optional.ofNullable(formIdentification.getFormId()).map(this::toFormIdExpression).ifPresent(expressions::add);
return Collections.unmodifiableSet(expressions);
}
private GrpcVorgangQueryExpression toFormEngineNameExpression(String formEngineName) {
default GrpcVorgangQueryExpression toFormEngineNameExpression(String formEngineName) {
return getEqualExpressionBuilder()
.setPath(FORM_ENGINE_NAME_PATH)
.setOperandStringValue(formEngineName)
.build();
}
private GrpcVorgangQueryExpression toFormIdExpression(String formId) {
default GrpcVorgangQueryExpression toFormIdExpression(String formId) {
return getEqualExpressionBuilder()
.setPath(FORM_ID_PATH)
.setOperandStringValue(formId)
......
package de.ozgcloud.apilib.vorgang.grpc;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
......@@ -12,10 +12,12 @@ 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.Mock;
import org.mockito.Spy;
import de.ozgcloud.apilib.vorgang.FormIdentificationTestFactory;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.FormIdentification;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.Query;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQueryTestFactory;
import de.ozgcloud.apilib.vorgang.QueryTestFactory;
......@@ -31,111 +33,132 @@ class OzgCloudVorgangQueryMapperTest {
@Nested
class TestToGrpc {
@Mock
private GrpcQuery grpcQuery;
@Test
void shouldCallMapProperetiesToQuery() {
var query = OzgCloudVorgangQueryTestFactory.create();
void shouldCallHasPropertyExpressions() {
var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
mapper.toGrpc(query);
mapper.toGrpc(ozgCloudVorgangQuery);
verify(mapper).mapPropertiesToQuery(query);
verify(mapper).hasPropertyExpressions(ozgCloudVorgangQuery);
}
@Nested
class OnNoNestedQuery {
class TestHasPropertyExpressions {
private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.createBuilder()
.query(Optional.empty())
.build();
@BeforeEach
void init() {
doReturn(true).when(mapper).hasPropertyExpressions(any());
}
@Test
void shouldCallMapToQuery() {
var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder();
mapper.toGrpc(ozgCloudVorgangQuery);
@BeforeEach
void mock() {
doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
verify(mapper).mapAllToQuery(ozgCloudVorgangQuery);
}
@Test
void shouldReturnBuiltQuery() {
var grpcQuery = mapper.toGrpc(query);
void shouldReturnResult() {
doReturn(grpcQuery).when(mapper).mapAllToQuery(any());
var result = mapper.toGrpc(OzgCloudVorgangQueryTestFactory.create());
assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(GrpcQueryTestFactory.create());
assertThat(result).isSameAs(grpcQuery);
}
}
@Nested
class OnNoProperties {
private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.create();
class TestHasNoPropertyExpressions {
@BeforeEach
void mock() {
doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
void init() {
doReturn(false).when(mapper).hasPropertyExpressions(any());
}
private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder()
.clearExpressions();
@Test
void shouldMapQueryToGrpcQuery() {
mapper.toGrpc(query);
void shouldCallToQuery() {
var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
mapper.toGrpc(ozgCloudVorgangQuery);
verify(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
}
@Test
void shouldReturnMappedQuery() {
var mappedQuery = GrpcQueryTestFactory.create();
doReturn(mappedQuery).when(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
void shouldReturnResult() {
doReturn(grpcQuery).when(mapper).toQuery(any(Query.class));
var grpcQuery = mapper.toGrpc(query);
var result = mapper.toGrpc(OzgCloudVorgangQueryTestFactory.create());
assertThat(grpcQuery).isEqualTo(mappedQuery);
assertThat(result).isSameAs(grpcQuery);
}
@Test
void shouldReturnDefaultInstance() {
var ozgCloudQuery = OzgCloudVorgangQueryTestFactory.createBuilder().query(Optional.empty()).build();
var result = mapper.toGrpc(ozgCloudQuery);
assertThat(result).isEqualTo(GrpcQuery.getDefaultInstance());
}
}
}
@Nested
class OnNestedQueryAndProperties {
class TestHasPropertyExpressions {
private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.create();
@Test
void shouldReturnFalse() {
var query = OzgCloudVorgangQuery.builder().query(Optional.of(OzgCloudVorgangQueryTestFactory.QUERY)).build();
private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder();
var result = mapper.hasPropertyExpressions(query);
@BeforeEach
void mock() {
doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
assertThat(result).isFalse();
}
@Nested
class TestOnPropertySet {
@Test
void shouldCallMapQuery() {
mapper.toGrpc(query);
void shouldReturnTrueWithAktenzeichen() {
var query = OzgCloudVorgangQuery.builder().aktenzeichen(Optional.of(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN)).build();
verify(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
var result = mapper.hasPropertyExpressions(query);
assertThat(result).isTrue();
}
@Test
void shouldReturnGrpcQuery() {
var nestedQuery = GrpcQueryTestFactory.create();
var expectedQuery = GrpcQueryTestFactory.createBuilder()
.setNestedQuery(nestedQuery)
.build();
doReturn(nestedQuery).when(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
void shouldReturnTrueWithOrganisationsEinheitId() {
var query = OzgCloudVorgangQuery.builder()
.organisationsEinheitId(Optional.of(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID)).build();
var grpcQuery = mapper.toGrpc(query);
var result = mapper.hasPropertyExpressions(query);
assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(expectedQuery);
assertThat(result).isTrue();
}
}
@Test
void shouldReturnTrueWithForm() {
var query = OzgCloudVorgangQuery.builder().form(Optional.of(FormIdentificationTestFactory.create())).build();
@Nested
class OnEmptyQuery {
var result = mapper.hasPropertyExpressions(query);
private final OzgCloudVorgangQuery query = OzgCloudVorgangQuery.builder().build();
assertThat(result).isTrue();
}
@Test
void shouldMapToDefaultGrpcQuery() {
var grpcQuery = mapper.toGrpc(query);
void shouldReturnTrueWithStatus() {
var query = OzgCloudVorgangQuery.builder().status(Optional.of(OzgCloudVorgangQueryTestFactory.STATUS)).build();
var result = mapper.hasPropertyExpressions(query);
assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(GrpcQuery.getDefaultInstance());
assertThat(result).isTrue();
}
}
}
......@@ -154,7 +177,7 @@ class OzgCloudVorgangQueryMapperTest {
@Test
void shouldCallToAktenzeichenExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
verify(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
}
......@@ -163,14 +186,14 @@ class OzgCloudVorgangQueryMapperTest {
void shouldSetAktenzeichenExpression() {
doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
assertThat(queryBuidler.getExpressionsList()).contains(aktenzeichenExpression);
}
@Test
void shouldNotCallToAktenzeichenExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().aktenzeichen(Optional.empty()).build());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().aktenzeichen(Optional.empty()).build());
verify(mapper, never()).toAktenzeichenExpression(any());
}
......@@ -187,7 +210,7 @@ class OzgCloudVorgangQueryMapperTest {
@Test
void shouldCallToOrganisationsEinheitIdExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
verify(mapper).toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
}
......@@ -197,14 +220,14 @@ class OzgCloudVorgangQueryMapperTest {
doReturn(organisationsEinheitIdExpression).when(mapper)
.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
assertThat(queryBuidler.getExpressionsList()).contains(organisationsEinheitIdExpression);
}
@Test
void shouldNotCallToOrganisationsEinheitIdExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().organisationsEinheitId(Optional.empty()).build());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().organisationsEinheitId(Optional.empty()).build());
verify(mapper, never()).toOrganisationsEinheitIdExpression(any());
}
......@@ -223,7 +246,7 @@ class OzgCloudVorgangQueryMapperTest {
@Test
void shouldCallToFormExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
verify(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
}
......@@ -232,17 +255,27 @@ class OzgCloudVorgangQueryMapperTest {
void shouldSetFormExpression() {
doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
assertThat(queryBuidler.getExpressionsList()).containsAll(formExpressions);
}
@Test
void shouldNotCallToFormExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().form(Optional.empty()).build());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().form(Optional.empty()).build());
verify(mapper, never()).toFormExpressions(any());
}
@Test
void shouldNotSetEmptyFormExpressions() {
doReturn(Collections.emptySet()).when(mapper).toFormExpressions(any());
var ozgCloudVorgangQuery = OzgCloudVorgangQuery.builder().form(Optional.of(FormIdentification.builder().build())).build();
var result = mapper.mapAllToQuery(ozgCloudVorgangQuery);
assertThat(result.getExpressionsList()).isEmpty();
}
}
@Nested
......@@ -256,7 +289,7 @@ class OzgCloudVorgangQueryMapperTest {
@Test
void shouldCallToStatusExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
verify(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
}
......@@ -266,14 +299,14 @@ class OzgCloudVorgangQueryMapperTest {
doReturn(statusExpression).when(mapper)
.toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
assertThat(queryBuidler.getExpressionsList()).contains(statusExpression);
}
@Test
void shouldNotCallToStatusExpression() {
mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().status(Optional.empty()).build());
mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().status(Optional.empty()).build());
verify(mapper, never()).toStatusExpression(any());
}
......@@ -335,47 +368,96 @@ class OzgCloudVorgangQueryMapperTest {
@Nested
class TestToFormExpressions {
private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
.setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH)
.setOperator(GrpcQueryOperator.EQUAL)
.setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME)
.build();
@Mock
private GrpcVorgangQueryExpression formEngineNameExpression;
private final GrpcVorgangQueryExpression formIdExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
.setPath(OzgCloudVorgangQueryMapper.FORM_ID_PATH)
.setOperator(GrpcQueryOperator.EQUAL)
.setOperandStringValue(FormIdentificationTestFactory.FORM_ID)
.build();
@Mock
private GrpcVorgangQueryExpression formIdExpression;
@Test
void shouldCallToFormEngineNameExpression() {
toFormExpressions();
verify(mapper).toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
}
@Test
void shouldSetFormEngineNameExpression() {
doReturn(formEngineNameExpression).when(mapper).toFormEngineNameExpression(any());
var expressions = toFormExpressions();
assertThat(expressions).contains(formEngineNameExpression);
}
@Test
void shouldReturnFormEngineNameExpression() {
var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.createBuilder().formId(null).build());
void shouldCallToFormIdExpression() {
toFormExpressions();
assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formEngineNameExpression);
verify(mapper).toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
}
@Test
void shouldReturnFormIdExpression() {
var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.createBuilder().formEngineName(null).build());
doReturn(formIdExpression).when(mapper).toFormIdExpression(any());
var expressions = toFormExpressions();
assertThat(expressions).contains(formIdExpression);
}
private Set<GrpcVorgangQueryExpression> toFormExpressions() {
return mapper.toFormExpressions(FormIdentificationTestFactory.create());
}
}
assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formIdExpression);
@Nested
class TestToFormEngineNameExpression {
@Test
void shouldSetPath() {
var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
assertThat(expression.getPath()).isEqualTo(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH);
}
@Test
void shouldSetOperandStringValue() {
var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
assertThat(expression.getOperandStringValue()).isEqualTo(FormIdentificationTestFactory.FORM_ENGINE_NAME);
}
@Test
void shouldSetOperator() {
var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
assertThat(expression.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
}
}
@Nested
class TestToFormIdExpression {
@Test
void shouldReturnBothExpressions() {
var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create());
void shouldSetPath() {
var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder(formEngineNameExpression,
formIdExpression);
assertThat(expression.getPath()).isEqualTo(OzgCloudVorgangQueryMapper.FORM_ID_PATH);
}
@Test
void shouldReturnUnmodifiableSet() {
var newExpression = GrpcVorgangQueryExpressionTestFactory.create();
void shouldSetOperandStringValue() {
var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
assertThat(expression.getOperandStringValue()).isEqualTo(FormIdentificationTestFactory.FORM_ID);
}
var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create());
@Test
void shouldSetOperator() {
var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
assertThrows(UnsupportedOperationException.class, () -> expressions.add(newExpression));
assertThat(expression.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
}
}
......
......@@ -56,6 +56,11 @@
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
......
......@@ -4,27 +4,26 @@ import java.util.Collection;
import java.util.Map;
import org.mapstruct.factory.Mappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import de.ozgcloud.apilib.alfa.AlfaService;
import de.ozgcloud.apilib.alfa.CommandAlfaService;
import de.ozgcloud.apilib.alfa.dummy.DummyAlfaService;
import de.ozgcloud.apilib.common.callcontext.DefaultOzgCloudCallContextProvider;
import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor;
import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService;
import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService;
import de.ozgcloud.apilib.file.OzgCloudFileService;
import de.ozgcloud.apilib.file.grpc.GrpcOzgCloudFileService;
import de.ozgcloud.apilib.file.grpc.OzgCloudFileMapper;
import de.ozgcloud.apilib.user.GrpcOzgCloudUserProfileService;
import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
import de.ozgcloud.apilib.user.UserProfileMapper;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
......@@ -33,20 +32,19 @@ import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangMapper;
import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangQueryMapper;
import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangStubMapper;
import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc;
import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc;
import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc;
import io.grpc.ManagedChannelBuilder;
import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration;
import net.devh.boot.grpc.client.config.GrpcChannelProperties;
import net.devh.boot.grpc.client.config.GrpcChannelsProperties;
@AutoConfiguration(before = GrpcClientAutoConfiguration.class)
@ComponentScan("de.ozgcloud.client.autoconfigure")
@Import({
GrpcOzgCloudFileService.class, DummyOzgCloudFileService.class,
OzgCloudCallContextAttachingInterceptor.class
})
@RequiredArgsConstructor
public class OzgCloudClientAutoConfiguration {
private static final String CLIENT_NAME_VORGANG_MANAGER = "vorgang-manager";
......@@ -54,14 +52,10 @@ public class OzgCloudClientAutoConfiguration {
private static final String CLIENT_NAME_COMMAND_MANAGER = "ozgcloud-command-manager";
private static final String CLIENT_NAME_USER_MANAGER = "ozgcloud-user-manager";
@Autowired
private OzgCloudVorgangManagerProperties vorgangManagerProperties;
@Autowired
private OzgCloudFileManagerProperties fileManagerProperties;
@Autowired
private OzgCloudCommandManagerProperties commandManagerProperties;
@Autowired
private OzgCloudUserManagerProperties userManagerProperties;
private final OzgCloudVorgangManagerProperties vorgangManagerProperties;
private final OzgCloudFileManagerProperties fileManagerProperties;
private final OzgCloudCommandManagerProperties commandManagerProperties;
private final OzgCloudUserManagerProperties userManagerProperties;
// @Bean
// @ConditionalOnProperty("ozgcloud.vorgang-manager.address")
......@@ -99,7 +93,7 @@ public class OzgCloudClientAutoConfiguration {
@Bean
GrpcChannelsProperties clientProperties(Collection<GrpcChannelConfigurator> configurators) {
var properties = new GrpcChannelsProperties();
configurators.stream().forEach(configurator -> configurator.addToProperties(properties));
configurators.forEach(configurator -> configurator.addToProperties(properties));
return properties;
}
......@@ -136,10 +130,11 @@ public class OzgCloudClientAutoConfiguration {
@Bean("ozgCloudVorgangService")
@ConditionalOnProperty("ozgcloud.vorgang-manager.address")
OzgCloudVorgangService grpcOzgCloudVorgangService(VorgangServiceBlockingStub vorgangServiceStub,
OzgCloudVorgangMapper mapper, OzgCloudVorgangStubMapper stubMapper, OzgCloudVorgangQueryMapper queryMapper,
OzgCloudCallContextProvider contextProvider) {
@ConditionalOnMissingBean(OzgCloudVorgangService.class)
OzgCloudVorgangService grpcOzgCloudVorgangService(OzgCloudVorgangMapper mapper, OzgCloudVorgangStubMapper stubMapper,
OzgCloudVorgangQueryMapper queryMapper, OzgCloudCallContextProvider contextProvider) {
var channel = ManagedChannelBuilder.forTarget(vorgangManagerProperties.getAddress()).usePlaintext().build();
var vorgangServiceStub = VorgangServiceGrpc.newBlockingStub(channel);
return new GrpcOzgCloudVorgangService(vorgangServiceStub, mapper, stubMapper, queryMapper, contextProvider);
}
......@@ -210,13 +205,22 @@ public class OzgCloudClientAutoConfiguration {
return Mappers.getMapper(OzgCloudFileMapper.class);
}
// @Bean
// @ConditionalOnProperty("ozgcloud.user-manager.address")
// OzgCloudUserProfileService
// grpcOzgCloudUserProfileService(@GrpcClient("ozgcloud-user-manager")
// UserProfileServiceBlockingStub grpcStub,
// UserProfileMapper mapper) {
// System.out.println("#### building UM-ProfileService");
// return new GrpcOzgCloudUserProfileService(grpcStub, mapper);
// }
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty("ozgcloud.user-manager.address")
OzgCloudUserProfileService grpcOzgCloudUserProfileService(UserProfileMapper mapper, OzgCloudCallContextProvider contextProvider) {
var channel = ManagedChannelBuilder.forTarget(userManagerProperties.getAddress()).usePlaintext().build();
var userServiceStub = UserProfileServiceGrpc.newBlockingStub(channel);
return new GrpcOzgCloudUserProfileService(userServiceStub, mapper, contextProvider);
}
@Bean
@ConditionalOnProperty("ozgcloud.file-manager.address")
@ConditionalOnMissingBean
OzgCloudFileService grpcOzgCloudFileService(OzgCloudFileMapper mapper, OzgCloudCallContextProvider contextProvider) {
var channel = ManagedChannelBuilder.forTarget(fileManagerProperties.getAddress()).usePlaintext().build();
var blockingStub = BinaryFileServiceGrpc.newBlockingStub(channel);
var asyncStub = BinaryFileServiceGrpc.newStub(channel);
return new GrpcOzgCloudFileService(blockingStub, asyncStub, contextProvider, mapper);
}
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.client.autoconfigure;
import static org.assertj.core.api.Assertions.*;
import java.util.Optional;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
import de.ozgcloud.apilib.file.OzgCloudFileService;
import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService;
import de.ozgcloud.apilib.file.grpc.GrpcOzgCloudFileService;
public class OzgCloudFileServiceStarterITCase {
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class)
@DirtiesContext()
class TestWithoutOzgCloudFileService {
@Autowired
private Optional<OzgCloudFileService> ozgCloudFileService;
@Test
void shouldStart() {
assertThat(ozgCloudFileService).isEmpty();
}
}
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
"ozgcloud.file-manager.address=address"
})
@DirtiesContext
class TestWithOzgCloudFileService {
@Autowired
private OzgCloudFileService ozgCloudFileService;
@Test
void shouldStart() {
assertThat(ozgCloudFileService).isInstanceOf(GrpcOzgCloudFileService.class);
}
}
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
"ozgcloud.file-manager.address=address"
})
@Import(TestWithExistingOzgCloudFileService.Config.class)
class TestWithExistingOzgCloudFileService {
@Autowired
private OzgCloudFileService ozgCloudFileService;
@Test
void shouldStart() { // NOSONAR
assertThat(ozgCloudFileService).isInstanceOf(DummyOzgCloudFileService.class);
}
static class Config {
@Bean
OzgCloudFileService ozgCloudFileService() {
return new DummyOzgCloudFileService();
}
}
}
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.client.autoconfigure;
import static org.assertj.core.api.Assertions.*;
import java.util.Optional;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
import de.ozgcloud.apilib.user.GrpcOzgCloudUserProfileService;
import de.ozgcloud.apilib.user.OzgCloudUserId;
import de.ozgcloud.apilib.user.OzgCloudUserProfile;
import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
public class OzgCloudUserProfileServiceStarterITCase {
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class)
@DirtiesContext()
class TestNoOzgCloudUserProfileService {
@Autowired
private Optional<OzgCloudUserProfileService> ozgCloudUserProfileService;
@Test
void shouldStart() {
assertThat(ozgCloudUserProfileService).isEmpty();
}
}
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
"ozgcloud.user-manager.address=address"
})
@DirtiesContext
class TestWithOzgCloudUserProfileService {
@Autowired
private OzgCloudUserProfileService ozgCloudUserProfileService;
@Test
void shouldStart() {
assertThat(ozgCloudUserProfileService).isInstanceOf(GrpcOzgCloudUserProfileService.class);
}
}
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
"ozgcloud.file-manager.address=address"
})
@Import(TestWithExistingOzgCloudFileService.Config.class)
class TestWithExistingOzgCloudFileService {
@Autowired
private OzgCloudUserProfileService ozgCloudUserProfileService;
@Test
void shouldStart() { // NOSONAR
assertThat(ozgCloudUserProfileService).isInstanceOf(DummyOzgCloudUserProfileService.class);
}
record DummyOzgCloudUserProfileService() implements OzgCloudUserProfileService {
@Override
public OzgCloudUserProfile getById(final OzgCloudUserId userId) {
return OzgCloudUserProfile.builder().build();
}
}
static class Config {
@Bean
OzgCloudUserProfileService zgCloudUserProfileService() {
return new DummyOzgCloudUserProfileService();
}
}
}
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.client.autoconfigure;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
import de.ozgcloud.apilib.vorgang.dummy.DummyVorgangService;
import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
public class OzgCloudVorgangServiceStarterITCase {
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
"ozgcloud.vorgang-manager.address=address"
})
class TestWithOzgCloudVorgangService {
@Autowired
private OzgCloudVorgangService ozgCloudVorgangService;
@Test
void shouldStart() {
assertThat(ozgCloudVorgangService).isInstanceOf(GrpcOzgCloudVorgangService.class);
}
}
@Nested
@SpringBootTest(classes = ApiLibTestApplication.class)
class TestWithExistingOzgCloudVorgangService {
@Autowired
private OzgCloudVorgangService ozgCloudVorgangService;
@Test
void shouldStart() { // NOSONAR
assertThat(ozgCloudVorgangService).isInstanceOf(DummyVorgangService.class);
}
}
}
......@@ -7,7 +7,7 @@
<parent>
<groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-dependencies</artifactId>
<version>4.3.1</version>
<version>4.5.0-SNAPSHOT</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
......@@ -25,10 +25,10 @@
<properties>
<source-plugin.version>3.3.0</source-plugin.version>
<failsafe-plugin.version>3.2.2</failsafe-plugin.version>
<failsafe-plugin.version>3.2.5</failsafe-plugin.version>
<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
<vorgang-manager.version>2.11.0</vorgang-manager.version>
<vorgang-manager.version>2.17.0-SNAPSHOT</vorgang-manager.version>
<user-manager.version>2.1.0</user-manager.version>
</properties>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment