Skip to content

Commit 10e5f75

Browse files
committed
Merge remote-tracking branch 'upstream/bugfix/0.14.1' into sovity/0.14.1
2 parents e02f889 + 2b35deb commit 10e5f75

40 files changed

Lines changed: 714 additions & 417 deletions

File tree

DEPENDENCIES

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.19
3333
maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.19.1, Apache-2.0, approved, #20841
3434
maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.19.2, Apache-2.0, approved, #20841
3535
maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.16.2, Apache-2.0, approved, #11853
36-
maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.19.2, Apache-2.0, approved, clearlydefined
36+
maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.19.2, Apache-2.0, approved, #23299
3737
maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/2.19.2, Apache-2.0, approved, #20840
3838
maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.16.2, Apache-2.0, approved, #11858
3939
maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.19.2, Apache-2.0, approved, #20839
@@ -65,7 +65,7 @@ maven/mavencentral/com.networknt/json-schema-validator/1.5.7, Apache-2.0 AND Uni
6565
maven/mavencentral/com.networknt/json-schema-validator/1.5.8, Apache-2.0 AND Unicode-TOU, approved, #15630
6666
maven/mavencentral/com.nimbusds/nimbus-jose-jwt/10.3, Apache-2.0, approved, #22529
6767
maven/mavencentral/com.nimbusds/nimbus-jose-jwt/10.4.2, Apache-2.0, approved, #22824
68-
maven/mavencentral/com.puppycrawl.tools/checkstyle/10.26.1, LGPL-2.1-or-later, approved, #22306
68+
maven/mavencentral/com.puppycrawl.tools/checkstyle/11.0.1, LGPL-2.1-or-later, approved, #23559
6969
maven/mavencentral/com.squareup.okhttp3/okhttp-dnsoverhttps/5.1.0, Apache-2.0, approved, clearlydefined
7070
maven/mavencentral/com.squareup.okhttp3/okhttp-jvm/5.1.0, Apache-2.0, approved, clearlydefined
7171
maven/mavencentral/com.squareup.okhttp3/okhttp/4.12.0, Apache-2.0, approved, #15227
@@ -76,7 +76,6 @@ maven/mavencentral/com.squareup.okio/okio/3.15.0, Apache-2.0, approved, clearlyd
7676
maven/mavencentral/com.sun.activation/jakarta.activation/2.0.1, EPL-2.0 OR BSD-3-Clause OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jaf
7777
maven/mavencentral/commons-beanutils/commons-beanutils/1.11.0, Apache-2.0, approved, #21555
7878
maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0 AND BSD-3-Clause, approved, CQ15971
79-
maven/mavencentral/commons-codec/commons-codec/1.15, Apache-2.0 AND BSD-3-Clause AND LicenseRef-Public-Domain, approved, CQ22641
8079
maven/mavencentral/commons-collections/commons-collections/3.2.2, Apache-2.0, approved, #15185
8180
maven/mavencentral/commons-fileupload/commons-fileupload/1.6.0, Apache-2.0, approved, #21847
8281
maven/mavencentral/commons-io/commons-io/2.19.0, Apache-2.0, approved, #20657
@@ -88,9 +87,9 @@ maven/mavencentral/io.cloudevents/cloudevents-api/4.0.1, Apache-2.0, approved, c
8887
maven/mavencentral/io.cloudevents/cloudevents-core/4.0.1, Apache-2.0, approved, clearlydefined
8988
maven/mavencentral/io.cloudevents/cloudevents-http-basic/4.0.1, Apache-2.0, approved, clearlydefined
9089
maven/mavencentral/io.github.classgraph/classgraph/4.8.176, MIT, approved, CQ22530
91-
maven/mavencentral/io.micrometer/micrometer-commons/1.15.2, Apache-2.0, approved, clearlydefined
92-
maven/mavencentral/io.micrometer/micrometer-core/1.15.2, Apache-2.0, approved, clearlydefined
93-
maven/mavencentral/io.micrometer/micrometer-observation/1.15.2, Apache-2.0, approved, clearlydefined
90+
maven/mavencentral/io.micrometer/micrometer-commons/1.15.2, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #23144
91+
maven/mavencentral/io.micrometer/micrometer-core/1.15.2, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #23142
92+
maven/mavencentral/io.micrometer/micrometer-observation/1.15.2, Apache-2.0, approved, #23139
9493
maven/mavencentral/io.opentelemetry.instrumentation/opentelemetry-instrumentation-annotations/1.32.0, Apache-2.0, approved, #11684
9594
maven/mavencentral/io.opentelemetry.proto/opentelemetry-proto/1.7.0-alpha, Apache-2.0, approved, clearlydefined
9695
maven/mavencentral/io.opentelemetry/opentelemetry-api/1.32.0, Apache-2.0, approved, #11682
@@ -132,20 +131,20 @@ maven/mavencentral/javax.servlet/javax.servlet-api/3.1.0, (CDDL-1.1 OR GPL-2.0-o
132131
maven/mavencentral/javax.ws.rs/javax.ws.rs-api/2.1, (CDDL-1.1 OR GPL-2.0 WITH Classpath-exception-2.0) AND Apache-2.0, approved, CQ18121
133132
maven/mavencentral/junit/junit/4.13.2, EPL-2.0, approved, CQ23636
134133
maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.14.1, Apache-2.0, approved, #7164
135-
maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.17.5, Apache-2.0, approved, #19238
134+
maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.17.7, Apache-2.0, approved, #19238
136135
maven/mavencentral/net.bytebuddy/byte-buddy/1.14.1, Apache-2.0 AND BSD-3-Clause, approved, #7163
137136
maven/mavencentral/net.bytebuddy/byte-buddy/1.15.11, Apache-2.0 AND BSD-3-Clause, approved, #16008
138-
maven/mavencentral/net.bytebuddy/byte-buddy/1.17.5, Apache-2.0 AND BSD-3-Clause, approved, #19239
137+
maven/mavencentral/net.bytebuddy/byte-buddy/1.17.7, Apache-2.0 AND BSD-3-Clause, approved, #19239
139138
maven/mavencentral/net.java.dev.jna/jna/5.13.0, Apache-2.0 AND LGPL-2.1-or-later, approved, #15196
140139
maven/mavencentral/net.javacrumbs.json-unit/json-unit-core/2.40.1, Apache-2.0, approved, clearlydefined
141140
maven/mavencentral/net.minidev/accessors-smart/2.5.0, Apache-2.0, approved, #19432
142141
maven/mavencentral/net.minidev/json-smart/2.5.0, Apache-2.0, approved, #19431
143142
maven/mavencentral/net.sf.jopt-simple/jopt-simple/5.0.4, MIT, approved, CQ13174
144-
maven/mavencentral/net.sf.saxon/Saxon-HE/12.5, W3C-19980720 AND MPL-2.0 AND MPL-1.0, approved, #16061
143+
maven/mavencentral/net.sf.saxon/Saxon-HE/12.8, MPL-2.0-no-copyleft-exception AND MPL-1.0 AND MIT AND X11 AND Apache-2.0, approved, #22928
145144
maven/mavencentral/org.antlr/antlr4-runtime/4.13.2, BSD-3-Clause, approved, #10767
146145
maven/mavencentral/org.apache.commons/commons-compress/1.24.0, Apache-2.0 AND BSD-3-Clause AND bzip2-1.0.6 AND LicenseRef-Public-Domain, approved, #10368
147146
maven/mavencentral/org.apache.commons/commons-lang3/3.12.0, Apache-2.0, approved, clearlydefined
148-
maven/mavencentral/org.apache.commons/commons-lang3/3.16.0, Apache-2.0, approved, clearlydefined
147+
maven/mavencentral/org.apache.commons/commons-lang3/3.16.0, Apache-2.0, approved, #23154
149148
maven/mavencentral/org.apache.commons/commons-lang3/3.17.0, Apache-2.0, approved, #16044
150149
maven/mavencentral/org.apache.commons/commons-lang3/3.7, Apache-2.0, approved, clearlydefined
151150
maven/mavencentral/org.apache.commons/commons-lang3/3.8.1, Apache-2.0, approved, #815
@@ -155,11 +154,8 @@ maven/mavencentral/org.apache.groovy/groovy-bom/4.0.22, Apache-2.0, approved, #9
155154
maven/mavencentral/org.apache.groovy/groovy-json/4.0.22, Apache-2.0, approved, #7411
156155
maven/mavencentral/org.apache.groovy/groovy-xml/4.0.22, Apache-2.0, approved, #10179
157156
maven/mavencentral/org.apache.groovy/groovy/4.0.22, Apache-2.0 AND BSD-3-Clause AND MIT, approved, #1742
158-
maven/mavencentral/org.apache.httpcomponents.client5/httpclient5/5.1.3, Apache-2.0, approved, #6276
159157
maven/mavencentral/org.apache.httpcomponents.client5/httpclient5/5.5, Apache-2.0 AND MPL-2.0, approved, #21346
160-
maven/mavencentral/org.apache.httpcomponents.core5/httpcore5-h2/5.1.3, Apache-2.0, approved, clearlydefined
161158
maven/mavencentral/org.apache.httpcomponents.core5/httpcore5-h2/5.3.4, Apache-2.0, approved, #16867
162-
maven/mavencentral/org.apache.httpcomponents.core5/httpcore5/5.1.3, Apache-2.0, approved, clearlydefined
163159
maven/mavencentral/org.apache.httpcomponents.core5/httpcore5/5.3.4, Apache-2.0, approved, #16866
164160
maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0, approved, #15248
165161
maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.13, Apache-2.0, approved, CQ23528
@@ -174,13 +170,15 @@ maven/mavencentral/org.apache.xbean/xbean-reflect/3.7, Apache-2.0, approved, cle
174170
maven/mavencentral/org.apiguardian/apiguardian-api/1.1.2, Apache-2.0, approved, #17641
175171
maven/mavencentral/org.assertj/assertj-core/3.26.3, Apache-2.0, approved, #14886
176172
maven/mavencentral/org.assertj/assertj-core/3.27.3, Apache-2.0, approved, #17980
173+
maven/mavencentral/org.assertj/assertj-core/3.27.6, Apache-2.0, approved, #17980
177174
maven/mavencentral/org.awaitility/awaitility/4.2.0, Apache-2.0, approved, #14178
178175
maven/mavencentral/org.awaitility/awaitility/4.2.2, Apache-2.0, approved, #14178
179176
maven/mavencentral/org.awaitility/awaitility/4.3.0, Apache-2.0, approved, clearlydefined
180177
maven/mavencentral/org.bouncycastle/bcpkix-jdk18on/1.81, MIT, approved, #21822
181178
maven/mavencentral/org.bouncycastle/bcprov-jdk18on/1.81, MIT AND CC0-1.0, approved, #21819
182179
maven/mavencentral/org.ccil.cowan.tagsoup/tagsoup/1.2.1, Apache-2.0, approved, clearlydefined
183180
maven/mavencentral/org.checkerframework/checker-qual/3.49.3, MIT, approved, #20842
181+
maven/mavencentral/org.checkerframework/checker-qual/3.49.5, MIT, approved, #20842
184182
maven/mavencentral/org.codehaus.plexus/plexus-classworlds/2.6.0, Apache-2.0 AND Plexus, approved, CQ22821
185183
maven/mavencentral/org.codehaus.plexus/plexus-component-annotations/2.1.0, Apache-2.0, approved, #809
186184
maven/mavencentral/org.codehaus.plexus/plexus-container-default/2.1.0, Apache-2.0, approved, clearlydefined
@@ -198,8 +196,8 @@ maven/mavencentral/org.eclipse.dataspacetck.dsp/dsp-metadata/1.0.0-RC4, Apache-2
198196
maven/mavencentral/org.eclipse.dataspacetck.dsp/dsp-system/1.0.0-RC4, Apache-2.0, approved, technology.dataspacetck
199197
maven/mavencentral/org.eclipse.dataspacetck.dsp/dsp-transfer-process/1.0.0-RC4, Apache-2.0, approved, technology.dataspacetck
200198
maven/mavencentral/org.eclipse.dataspacetck.dsp/tck-runtime/1.0.0-RC4, Apache-2.0, approved, technology.dataspacetck
201-
maven/mavencentral/org.eclipse.edc/autodoc-processor/0.14.0, Apache-2.0, approved, technology.edc
202-
maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.14.0, Apache-2.0, approved, technology.edc
199+
maven/mavencentral/org.eclipse.edc/autodoc-processor/0.14.1, Apache-2.0, approved, technology.edc
200+
maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.14.1, Apache-2.0, approved, technology.edc
203201
maven/mavencentral/org.eclipse.jetty.ee10/jetty-ee10-bom/12.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty
204202
maven/mavencentral/org.eclipse.jetty.ee10/jetty-ee10-servlet/12.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty
205203
maven/mavencentral/org.eclipse.jetty.ee10/jetty-ee10-servlet/12.0.23, EPL-2.0 OR Apache-2.0, approved, rt.jetty
@@ -248,7 +246,7 @@ maven/mavencentral/org.glassfish.jersey.media/jersey-media-multipart/3.1.10, EPL
248246
maven/mavencentral/org.glassfish/jakarta.json/2.0.0, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jsonp
249247
maven/mavencentral/org.glassfish/jakarta.json/2.0.1, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jsonp
250248
maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ11429
251-
maven/mavencentral/org.hamcrest/hamcrest-core/2.2, BSD-3-Clause, approved, clearlydefined
249+
maven/mavencentral/org.hamcrest/hamcrest-core/2.2, BSD-3-Clause, approved, #23163
252250
maven/mavencentral/org.hamcrest/hamcrest/2.1, BSD-3-Clause, approved, clearlydefined
253251
maven/mavencentral/org.hamcrest/hamcrest/2.2, BSD-3-Clause, approved, #17677
254252
maven/mavencentral/org.hdrhistogram/HdrHistogram/2.2.2, BSD-2-Clause AND CC0-1.0 AND CC0-1.0, approved, #14828
@@ -284,6 +282,7 @@ maven/mavencentral/org.latencyutils/LatencyUtils/2.0.3, CC0-1.0, approved, #1528
284282
maven/mavencentral/org.lz4/lz4-java/1.8.0, Apache-2.0, approved, #20005
285283
maven/mavencentral/org.mockito/mockito-core/5.18.0, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #21306
286284
maven/mavencentral/org.mockito/mockito-core/5.2.0, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7401
285+
maven/mavencentral/org.mockito/mockito-core/5.20.0, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #23392
287286
maven/mavencentral/org.mockito/mockito-inline/5.2.0, MIT, approved, clearlydefined
288287
maven/mavencentral/org.objenesis/objenesis/3.3, Apache-2.0, approved, #19727
289288
maven/mavencentral/org.opentest4j/opentest4j/1.3.0, Apache-2.0, approved, #9713
@@ -309,7 +308,7 @@ maven/mavencentral/org.testcontainers/vault/1.21.3, MIT, approved, clearlydefine
309308
maven/mavencentral/org.wiremock/wiremock-jetty12/3.13.1, Apache-2.0, approved, #21027
310309
maven/mavencentral/org.wiremock/wiremock/3.13.1, MIT AND Apache-2.0, approved, #21025
311310
maven/mavencentral/org.xerial.snappy/snappy-java/1.1.10.5, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #9098
312-
maven/mavencentral/org.xmlresolver/xmlresolver/5.2.2, Apache-2.0, approved, #19677
311+
maven/mavencentral/org.xmlresolver/xmlresolver/5.3.3, Apache-2.0, approved, clearlydefined
313312
maven/mavencentral/org.xmlunit/xmlunit-core/2.10.2, Apache-2.0, approved, #14590
314313
maven/mavencentral/org.xmlunit/xmlunit-legacy/2.10.2, Apache-2.0 AND BSD-3-Clause AND BSD-3-Clause, approved, #20661
315314
maven/mavencentral/org.xmlunit/xmlunit-placeholders/2.10.2, Apache-2.0, approved, #22214

core/common/lib/query-lib/src/main/java/org/eclipse/edc/query/CriterionOperatorRegistryImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.function.Predicate;
2828

2929
import static java.lang.String.format;
30+
import static org.eclipse.edc.query.NotOperatorPredicate.not;
3031

3132
/**
3233
* Implementation for {@link CriterionOperatorRegistry}
@@ -40,11 +41,12 @@ public static CriterionOperatorRegistry ofDefaults() {
4041
var registry = new CriterionOperatorRegistryImpl();
4142
registry.registerPropertyLookup(new ReflectionPropertyLookup());
4243
registry.registerOperatorPredicate(EQUAL, new EqualOperatorPredicate());
43-
registry.registerOperatorPredicate(IN, new InOperatorPredicate());
44+
registry.registerOperatorPredicate(NOT_EQUAL, not(new EqualOperatorPredicate()));
45+
registry.registerOperatorPredicate(IN, InOperatorPredicate.in());
46+
registry.registerOperatorPredicate(NOT_IN, InOperatorPredicate.notIn());
4447
registry.registerOperatorPredicate(LIKE, new LikeOperatorPredicate());
4548
registry.registerOperatorPredicate(ILIKE, new IlikeOperatorPredicate());
4649
registry.registerOperatorPredicate(CONTAINS, new ContainsOperatorPredicate());
47-
registry.registerOperatorPredicate(NOT_EQUAL, new NotEqualOperatorPredicate());
4850
registry.registerOperatorPredicate(LESS_THAN, NumberStringOperatorPredicate.lessThan());
4951
registry.registerOperatorPredicate(LESS_THAN_EQUAL, NumberStringOperatorPredicate.lessThanEqual());
5052
registry.registerOperatorPredicate(GREATER_THAN, NumberStringOperatorPredicate.greaterThan());

core/common/lib/query-lib/src/main/java/org/eclipse/edc/query/InOperatorPredicate.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,21 @@
1616

1717
import org.eclipse.edc.spi.query.OperatorPredicate;
1818

19+
import static org.eclipse.edc.query.NotOperatorPredicate.not;
20+
1921
public class InOperatorPredicate implements OperatorPredicate {
2022

23+
public static OperatorPredicate notIn() {
24+
return not(new InOperatorPredicate());
25+
}
26+
27+
public static OperatorPredicate in() {
28+
return new InOperatorPredicate();
29+
}
30+
31+
private InOperatorPredicate() {
32+
}
33+
2134
@Override
2235
public boolean test(Object property, Object operandRight) {
2336
if (operandRight instanceof Iterable<?> iterable) {
@@ -28,7 +41,8 @@ public boolean test(Object property, Object operandRight) {
2841
}
2942
return false;
3043
} else {
31-
throw new IllegalArgumentException("Operator IN requires the right-hand operand to be an " + Iterable.class.getName() + " but was " + operandRight.getClass().getName());
44+
throw new IllegalArgumentException("Operators ['IN', 'NOT IN'] require the right-hand operand to be an " +
45+
Iterable.class.getName() + " but was " + operandRight.getClass().getName());
3246
}
3347
}
3448
}

core/common/lib/query-lib/src/main/java/org/eclipse/edc/query/NotEqualOperatorPredicate.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) 2025 Think-it GmbH
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Apache License, Version 2.0 which is available at
6+
* https://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* SPDX-License-Identifier: Apache-2.0
9+
*
10+
* Contributors:
11+
* Think-it GmbH - initial API and implementation
12+
*
13+
*/
14+
15+
package org.eclipse.edc.query;
16+
17+
import org.eclipse.edc.spi.query.OperatorPredicate;
18+
19+
/**
20+
* Decorator that negates the passed operator
21+
*/
22+
public class NotOperatorPredicate implements OperatorPredicate {
23+
24+
private final OperatorPredicate delegate;
25+
26+
public static OperatorPredicate not(OperatorPredicate delegate) {
27+
return new NotOperatorPredicate(delegate);
28+
}
29+
30+
public NotOperatorPredicate(OperatorPredicate delegate) {
31+
this.delegate = delegate;
32+
}
33+
34+
@Override
35+
public boolean test(Object o, Object o2) {
36+
return delegate.negate().test(o, o2);
37+
}
38+
}

core/common/lib/query-lib/src/test/java/org/eclipse/edc/query/InOperatorPredicateTest.java

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package org.eclipse.edc.query;
1616

1717
import org.eclipse.edc.spi.query.OperatorPredicate;
18+
import org.junit.jupiter.api.Nested;
1819
import org.junit.jupiter.api.Test;
1920

2021
import java.util.List;
@@ -24,20 +25,44 @@
2425

2526
class InOperatorPredicateTest {
2627

27-
private final OperatorPredicate predicate = new InOperatorPredicate();
28+
@Nested
29+
class In {
30+
private final OperatorPredicate predicate = InOperatorPredicate.in();
2831

29-
@Test
30-
void shouldReturnTrue_whenPropertyValueIsContainedInTheList() {
31-
assertThat(predicate.test("first", List.of("first", "second"))).isTrue();
32-
assertThat(predicate.test("third", List.of("first", "second"))).isFalse();
33-
assertThat(predicate.test("", List.of("first", "second"))).isFalse();
32+
@Test
33+
void shouldReturnTrue_whenPropertyValueIsContainedInTheList() {
34+
assertThat(predicate.test("first", List.of("first", "second"))).isTrue();
35+
assertThat(predicate.test("third", List.of("first", "second"))).isFalse();
36+
assertThat(predicate.test("", List.of("first", "second"))).isFalse();
37+
}
38+
39+
@Test
40+
void shouldThrowException_whenOperandRightIsNotList() {
41+
assertThatThrownBy(() -> predicate.test("any", "(first, second)"))
42+
.isInstanceOf(IllegalArgumentException.class)
43+
.hasMessageContaining("'IN'")
44+
.hasMessageContaining("require the right-hand operand to be an");
45+
}
3446
}
3547

36-
@Test
37-
void shouldThrowException_whenOperandRightIsNotList() {
38-
assertThatThrownBy(() -> predicate.test("any", "(first, second)"))
39-
.isInstanceOf(IllegalArgumentException.class)
40-
.hasMessageContaining("Operator IN requires the right-hand operand to be an");
48+
@Nested
49+
class NotIn {
50+
private final OperatorPredicate predicate = InOperatorPredicate.notIn();
51+
52+
@Test
53+
void shouldReturnTrue_whenPropertyValueIsNotContainedInTheList() {
54+
assertThat(predicate.test("first", List.of("first", "second"))).isFalse();
55+
assertThat(predicate.test("third", List.of("first", "second"))).isTrue();
56+
assertThat(predicate.test("", List.of("first", "second"))).isTrue();
57+
}
58+
59+
@Test
60+
void shouldThrowException_whenOperandRightIsNotList() {
61+
assertThatThrownBy(() -> predicate.test("any", "(first, second)"))
62+
.isInstanceOf(IllegalArgumentException.class)
63+
.hasMessageContaining("'NOT IN'")
64+
.hasMessageContaining("require the right-hand operand to be an");
65+
}
4166
}
4267

4368
}

0 commit comments

Comments
 (0)