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 96a696ee9ce7847154863b1c39043a4d5a733440..aaf82cc3bbe9a05cd9cb21102acd28920441be64 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 @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Optional; import java.util.Set; +import org.apache.commons.collections.CollectionUtils; import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -23,31 +24,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.getForm().map(this::toFormExpressions).filter(CollectionUtils::isNotEmpty).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 +73,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) 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 bcdc22ee4286ea121954f3772080085a2d38279c..f4bf8cac7748af137a4299664dce04e907b8f9b8 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 @@ -1,10 +1,10 @@ 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 shoulcCallHasPropertyExpressions() { + 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 { + @Nested + 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); } }