diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java index 5210fc4085042c585bc0fd3e8db871443d794c1d..1d40d47706cb193303cc429ff4202c3c444b29fe 100644 --- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java @@ -1,5 +1,8 @@ package de.ozgcloud.apilib.vorgang.grpc; +import java.util.ArrayList; +import java.util.Objects; + import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -18,10 +21,11 @@ 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 = "formEngineName"; + 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"; default GrpcQuery toGrpc(OzgCloudVorgangQuery ozgCloudVorgangQuery) { var queryBuilder = mapPropertiesToQuery(ozgCloudVorgangQuery); @@ -38,7 +42,7 @@ public interface OzgCloudVorgangQueryMapper { default GrpcQuery.Builder mapPropertiesToQuery(OzgCloudVorgangQuery query) { var queryBuilder = GrpcQuery.newBuilder().setLogicalOperator(GrpcLogicalOperator.AND); query.getAktenzeichen().map(this::toAktenzeichenExpression).ifPresent(queryBuilder::addExpressions); - query.getForm().map(this::toFormExpression).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; @@ -65,11 +69,29 @@ public interface OzgCloudVorgangQueryMapper { .build(); } - default GrpcVorgangQueryExpression toFormExpression(FormIdentification formIdentification) { - return getEqualExpressionBuilder() + default Iterable<GrpcVorgangQueryExpression> toFormExpressions(FormIdentification formIdentification) { + var expressions = new ArrayList<GrpcVorgangQueryExpression>(2); + if (Objects.nonNull(formIdentification.formEngineName())) { + addFormEngineNameExpression(formIdentification, expressions); + } + if (Objects.nonNull(formIdentification.formId())) { + addFormIdExpression(formIdentification, expressions); + } + return expressions; + } + + private void addFormEngineNameExpression(FormIdentification formIdentification, ArrayList<GrpcVorgangQueryExpression> expressions) { + expressions.add(getEqualExpressionBuilder() .setPath(FORM_ENGINE_NAME_PATH) .setOperandStringValue(formIdentification.formEngineName()) - .build(); + .build()); + } + + private void addFormIdExpression(FormIdentification formIdentification, ArrayList<GrpcVorgangQueryExpression> expressions) { + expressions.add(getEqualExpressionBuilder() + .setPath(FORM_ID_PATH) + .setOperandStringValue(formIdentification.formId()) + .build()); } private Builder getEqualExpressionBuilder() { diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java index 32e3f49a2dcf18f7076f82247c08a6ba223c9efa..f639b98071d522da640f7ccaf2b6f92e657e4eb7 100644 --- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -14,6 +15,7 @@ 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; @@ -142,16 +144,18 @@ class OzgCloudVorgangQueryMapperTest { @Nested class TestMapPropertiesToQuery { - private final GrpcVorgangQueryExpression aktenzeichenExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() - .setPath(OzgCloudVorgangQueryMapper.AKTENZEICHEN_PATH) + private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() + .setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH) .setOperator(GrpcQueryOperator.EQUAL) - .setOperandStringValue(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN) + .setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME) .build(); - private final GrpcVorgangQueryExpression formExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() - .setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH) + private final List<GrpcVorgangQueryExpression> formExpressions = List.of(formEngineNameExpression); + + private final GrpcVorgangQueryExpression aktenzeichenExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() + .setPath(OzgCloudVorgangQueryMapper.AKTENZEICHEN_PATH) .setOperator(GrpcQueryOperator.EQUAL) - .setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME) + .setOperandStringValue(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN) .build(); private final GrpcVorgangQueryExpression statusExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() @@ -174,9 +178,10 @@ class OzgCloudVorgangQueryMapperTest { @BeforeEach void mock() { doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN); - doReturn(formExpression).when(mapper).toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID); + doReturn(organisationsEinheitIdExpression).when(mapper) + .toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID); doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS); - doReturn(organisationsEinheitIdExpression).when(mapper).toFormExpression(OzgCloudVorgangQueryTestFactory.FORM); + doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM); } @Test @@ -204,15 +209,15 @@ class OzgCloudVorgangQueryMapperTest { void shouldCallToFormExpression() { callMapPropertiesToQuery(); - verify(mapper).toFormExpression(OzgCloudVorgangQueryTestFactory.FORM); + verify(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM); } @Test void shouldReturnQueryBuilderContainingAllExpressions() { var queryBuilder = callMapPropertiesToQuery(); - assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, formExpression, - organisationsEinheitIdExpression); + assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, + formEngineNameExpression, organisationsEinheitIdExpression); } @Test @@ -234,6 +239,14 @@ class OzgCloudVorgangQueryMapperTest { .aktenzeichen(Optional.empty()) .build(); + @BeforeEach + void mock() { + doReturn(organisationsEinheitIdExpression).when(mapper) + .toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID); + doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS); + doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM); + } + @Test void shouldNotCallToAktenzeichenExpression() { callMapPropertiesToQuery(); @@ -245,7 +258,7 @@ class OzgCloudVorgangQueryMapperTest { void shouldReturnQueryBuilderContainingAllOtherExpressions() { var queryBuilder = callMapPropertiesToQuery(); - assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(statusExpression, formExpression, + assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(statusExpression, formEngineNameExpression, organisationsEinheitIdExpression); } @@ -261,11 +274,19 @@ class OzgCloudVorgangQueryMapperTest { .form(Optional.empty()) .build(); + @BeforeEach + void mock() { + doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN); + doReturn(organisationsEinheitIdExpression).when(mapper) + .toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID); + doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS); + } + @Test void shouldNotCallToFormExpression() { callMapPropertiesToQuery(); - verify(mapper, never()).toFormExpression(any()); + verify(mapper, never()).toFormExpressions(any()); } @Test @@ -288,6 +309,14 @@ class OzgCloudVorgangQueryMapperTest { .status(Optional.empty()) .build(); + @BeforeEach + void mock() { + doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN); + doReturn(organisationsEinheitIdExpression).when(mapper) + .toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID); + doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM); + } + @Test void shouldNotCallToStatusExpression() { callMapPropertiesToQuery(); @@ -299,7 +328,7 @@ class OzgCloudVorgangQueryMapperTest { void shouldReturnQueryBuilderContainingAllOtherExpressions() { var queryBuilder = callMapPropertiesToQuery(); - assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, formExpression, + assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, formEngineNameExpression, organisationsEinheitIdExpression); } @@ -315,6 +344,13 @@ class OzgCloudVorgangQueryMapperTest { .organisationsEinheitId(Optional.empty()) .build(); + @BeforeEach + void mock() { + doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN); + doReturn(statusExpression).when(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS); + doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM); + } + @Test void shouldNotCallToOrganisationsEinheitIdExpression() { callMapPropertiesToQuery(); @@ -326,7 +362,8 @@ class OzgCloudVorgangQueryMapperTest { void shouldReturnQueryBuilderContainingAllOtherExpressions() { var queryBuilder = callMapPropertiesToQuery(); - assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, formExpression); + assertThat(queryBuilder.getExpressionsList()).containsExactlyInAnyOrder(aktenzeichenExpression, statusExpression, + formEngineNameExpression); } private GrpcQuery.Builder callMapPropertiesToQuery() { @@ -389,17 +426,38 @@ class OzgCloudVorgangQueryMapperTest { @Nested class TestToFormExpression { - private final GrpcVorgangQueryExpression formExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() + private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() .setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH) .setOperator(GrpcQueryOperator.EQUAL) .setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME) .build(); + private final GrpcVorgangQueryExpression formIdExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder() + .setPath(OzgCloudVorgangQueryMapper.FORM_ID_PATH) + .setOperator(GrpcQueryOperator.EQUAL) + .setOperandStringValue(FormIdentificationTestFactory.FORM_ID) + .build(); + + @Test + void shouldReturnFormEngineNameExpression() { + var expressions = mapper.toFormExpressions(new FormIdentification(null, FormIdentificationTestFactory.FORM_ENGINE_NAME)); + + assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formEngineNameExpression); + } + + @Test + void shouldReturnFormIdExpression() { + var expressions = mapper.toFormExpressions(new FormIdentification(FormIdentificationTestFactory.FORM_ID, null)); + + assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formIdExpression); + } + @Test - void shouldReturnFormExpression() { - var expression = mapper.toFormExpression(OzgCloudVorgangQueryTestFactory.FORM); + void shouldReturnBothExpressions() { + var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create()); - assertThat(expression).usingRecursiveComparison().isEqualTo(formExpression); + assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder(formEngineNameExpression, + formIdExpression); } }