diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/MultiPartBodyTest.java b/components/abstractions/src/test/java/com/microsoft/kiota/MultiPartBodyTest.java index 94a527d64..3549ef2b4 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/MultiPartBodyTest.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/MultiPartBodyTest.java @@ -12,21 +12,25 @@ import org.junit.jupiter.api.Test; class MultiPartBodyTest { + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + @Test void defensive() { final MultipartBody multipartBody = new MultipartBody(); assertThrows( IllegalArgumentException.class, - () -> multipartBody.addOrReplacePart(null, "foo", "bar")); + () -> multipartBody.addOrReplacePart(nullValue(), "foo", "bar")); assertThrows( IllegalArgumentException.class, - () -> multipartBody.addOrReplacePart("foo", null, "bar")); + () -> multipartBody.addOrReplacePart("foo", nullValue(), "bar")); assertThrows( NullPointerException.class, - () -> multipartBody.addOrReplacePart("foo", "bar", null)); - assertThrows(IllegalArgumentException.class, () -> multipartBody.getPartValue(null)); - assertThrows(IllegalArgumentException.class, () -> multipartBody.removePart(null)); - assertThrows(NullPointerException.class, () -> multipartBody.serialize(null)); + () -> multipartBody.addOrReplacePart("foo", "bar", nullValue())); + assertThrows(IllegalArgumentException.class, () -> multipartBody.getPartValue(nullValue())); + assertThrows(IllegalArgumentException.class, () -> multipartBody.removePart(nullValue())); + assertThrows(NullPointerException.class, () -> multipartBody.serialize(nullValue())); assertThrows( UnsupportedOperationException.class, () -> multipartBody.getFieldDeserializers()); } diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/PeriodAndDurationTest.java b/components/abstractions/src/test/java/com/microsoft/kiota/PeriodAndDurationTest.java index 3db4cd53c..619ed7900 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/PeriodAndDurationTest.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/PeriodAndDurationTest.java @@ -10,30 +10,40 @@ import java.time.temporal.ChronoUnit; class PeriodAndDurationTest { + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + @Test void Defensive() { // Assert var exception = - assertThrows(NullPointerException.class, () -> PeriodAndDuration.of(null, null)); + assertThrows( + NullPointerException.class, + () -> PeriodAndDuration.of(nullValue(), nullValue())); assertTrue(exception.getMessage().contains("period cannot be null")); var exception2 = assertThrows( NullPointerException.class, - () -> PeriodAndDuration.of(null, Duration.ZERO)); + () -> PeriodAndDuration.of(nullValue(), Duration.ZERO)); assertTrue(exception2.getMessage().contains("period cannot be null")); var exception3 = assertThrows( - NullPointerException.class, () -> PeriodAndDuration.of(Period.ZERO, null)); + NullPointerException.class, + () -> PeriodAndDuration.of(Period.ZERO, nullValue())); assertTrue(exception3.getMessage().contains("duration cannot be null")); var exception4 = - assertThrows(NullPointerException.class, () -> PeriodAndDuration.ofDuration(null)); + assertThrows( + NullPointerException.class, + () -> PeriodAndDuration.ofDuration(nullValue())); assertTrue(exception4.getMessage().contains("duration cannot be null")); var exception5 = - assertThrows(NullPointerException.class, () -> PeriodAndDuration.ofPeriod(null)); + assertThrows( + NullPointerException.class, () -> PeriodAndDuration.ofPeriod(nullValue())); assertTrue(exception5.getMessage().contains("period cannot be null")); final PeriodAndDuration periodAndDuration = diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/authentication/ApiKeyAuthenticationProviderTest.java b/components/abstractions/src/test/java/com/microsoft/kiota/authentication/ApiKeyAuthenticationProviderTest.java index 36d8f2431..1c066bfea 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/authentication/ApiKeyAuthenticationProviderTest.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/authentication/ApiKeyAuthenticationProviderTest.java @@ -10,6 +10,10 @@ import java.util.HashSet; public class ApiKeyAuthenticationProviderTest { + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + @Test void DefensivePrograming() { assertThrows( @@ -23,7 +27,9 @@ void DefensivePrograming() { var value = new ApiKeyAuthenticationProvider("key", "param", ApiKeyLocation.QUERY_PARAMETER); - assertThrows(NullPointerException.class, () -> value.authenticateRequest(null, null)); + assertThrows( + NullPointerException.class, + () -> value.authenticateRequest(nullValue(), nullValue())); } @Test diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/DeserializationHelpersTest.java b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/DeserializationHelpersTest.java index ae379e77d..a47f9be8a 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/DeserializationHelpersTest.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/DeserializationHelpersTest.java @@ -19,21 +19,37 @@ class DeserializationHelpersTest { private static final String _jsonContentType = "application/json"; private static final String _charset = "utf-8"; + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + + private static String nullString() { + return nullValue(); + } + + private static InputStream nullInputStream() { + return nullValue(); + } + + private static ParsableFactory nullFactory() { + return nullValue(); + } + @Test void defensive() { assertThrows( NullPointerException.class, () -> KiotaSerialization.deserialize( - null, - (InputStream) null, + nullString(), + nullInputStream(), TestEntity::createFromDiscriminatorValue)); assertThrows( NullPointerException.class, () -> KiotaSerialization.deserialize( _jsonContentType, - (InputStream) null, + nullInputStream(), TestEntity::createFromDiscriminatorValue)); assertThrows( NullPointerException.class, @@ -41,7 +57,7 @@ void defensive() { KiotaSerialization.deserialize( _jsonContentType, new ByteArrayInputStream("{}".getBytes(_charset)), - (ParsableFactory) null)); + nullFactory())); } @Test @@ -50,15 +66,15 @@ void defensiveCollection() { NullPointerException.class, () -> KiotaSerialization.deserializeCollection( - null, - (InputStream) null, + nullString(), + nullInputStream(), TestEntity::createFromDiscriminatorValue)); assertThrows( NullPointerException.class, () -> KiotaSerialization.deserializeCollection( _jsonContentType, - (InputStream) null, + nullInputStream(), TestEntity::createFromDiscriminatorValue)); assertThrows( NullPointerException.class, @@ -66,7 +82,7 @@ void defensiveCollection() { KiotaSerialization.deserializeCollection( _jsonContentType, new ByteArrayInputStream("{}".getBytes(_charset)), - (ParsableFactory) null)); + nullFactory())); } @Test diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/SerializationHelpersTest.java b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/SerializationHelpersTest.java index 320050a7c..602ca3e30 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/SerializationHelpersTest.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/SerializationHelpersTest.java @@ -25,26 +25,42 @@ class SerializationHelpersTest { private static final String _jsonContentType = "application/json"; private static final String _charset = "utf-8"; + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + + private static String nullString() { + return nullValue(); + } + + private static Parsable nullParsable() { + return nullValue(); + } + + private static Iterable nullParsableCollection() { + return nullValue(); + } + @Test void defensive() { assertThrows( NullPointerException.class, - () -> KiotaSerialization.serializeAsStream(null, (Parsable) null)); + () -> KiotaSerialization.serializeAsStream(nullString(), nullParsable())); assertThrows( NullPointerException.class, - () -> KiotaSerialization.serializeAsStream(_jsonContentType, (Parsable) null)); + () -> KiotaSerialization.serializeAsStream(_jsonContentType, nullParsable())); } @Test void defensiveCollection() { assertThrows( NullPointerException.class, - () -> KiotaSerialization.serializeAsStream(null, (Iterable) null)); + () -> KiotaSerialization.serializeAsStream(nullString(), nullParsableCollection())); assertThrows( NullPointerException.class, () -> KiotaSerialization.serializeAsStream( - _jsonContentType, (Iterable) null)); + _jsonContentType, nullParsableCollection())); } @Test diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestBackedModelEntity.java b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestBackedModelEntity.java index cadacf5b0..237f38ef8 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestBackedModelEntity.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestBackedModelEntity.java @@ -104,7 +104,10 @@ public Map> getFieldDeserializers() { put( "workDuration", n -> { - setWorkDuration(n.getPeriodAndDurationValue()); + final var value = n.getPeriodAndDurationValue(); + if (value != null) { + setWorkDuration(value); + } }); put( "startWorkTime", diff --git a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java index 7b45706a3..4f1a1363e 100644 --- a/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java +++ b/components/abstractions/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java @@ -110,7 +110,10 @@ public Map> getFieldDeserializers() { put( "workDuration", (n) -> { - setWorkDuration(n.getPeriodAndDurationValue()); + final var value = n.getPeriodAndDurationValue(); + if (value != null) { + setWorkDuration(value); + } }); put( "startWorkTime", diff --git a/components/bundle/src/test/java/com/microsoft/kiota/bundle/BundleTests.java b/components/bundle/src/test/java/com/microsoft/kiota/bundle/BundleTests.java index 529dd0151..2fdfcc728 100644 --- a/components/bundle/src/test/java/com/microsoft/kiota/bundle/BundleTests.java +++ b/components/bundle/src/test/java/com/microsoft/kiota/bundle/BundleTests.java @@ -10,10 +10,15 @@ import org.junit.jupiter.api.Test; class BundleTests { + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + @Test void throwsErrorNullAuthenticationProvider() throws Exception { var exception = - assertThrows(NullPointerException.class, () -> new DefaultRequestAdapter(null)); + assertThrows( + NullPointerException.class, () -> new DefaultRequestAdapter(nullValue())); assertEquals("parameter authenticationProvider cannot be null", exception.getMessage()); } diff --git a/components/http/okHttp/gradle/dependencies.gradle b/components/http/okHttp/gradle/dependencies.gradle index 42342cc85..bcf8c7332 100644 --- a/components/http/okHttp/gradle/dependencies.gradle +++ b/components/http/okHttp/gradle/dependencies.gradle @@ -6,6 +6,7 @@ dependencies { testImplementation(libs.org.mockito.mockito.core) testImplementation(libs.com.squareup.okhttp3.logging.interceptor) testImplementation(libs.com.squareup.okhttp3.mockwebserver) + testImplementation(libs.io.github.std.uritemplate.std.uritemplate) // This dependency is used internally, and not exposed to consumers on their own compile classpath. diff --git a/components/http/okHttp/src/test/java/com/microsoft/kiota/http/OkHttpRequestAdapterTest.java b/components/http/okHttp/src/test/java/com/microsoft/kiota/http/OkHttpRequestAdapterTest.java index a953218ca..ec6ae90ca 100644 --- a/components/http/okHttp/src/test/java/com/microsoft/kiota/http/OkHttpRequestAdapterTest.java +++ b/components/http/okHttp/src/test/java/com/microsoft/kiota/http/OkHttpRequestAdapterTest.java @@ -51,6 +51,10 @@ import java.util.stream.Stream; public class OkHttpRequestAdapterTest { + private static T nullValue() { + return java.util.Collections.emptyMap().get("missing"); + } + @ParameterizedTest @EnumSource( value = HttpMethod.class, @@ -618,7 +622,7 @@ public static OkHttpClient getMockClient(final Response response) throws IOExcep (Answer) invocation -> { Callback callback = invocation.getArgument(0); - callback.onResponse(null, response); + callback.onResponse(nullValue(), response); return null; }) .when(remoteCall) diff --git a/components/serialization/form/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java b/components/serialization/form/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java index ccae3a332..975ba86d6 100644 --- a/components/serialization/form/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java +++ b/components/serialization/form/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java @@ -116,7 +116,10 @@ public Map> getFieldDeserializers() { put( "workDuration", (n) -> { - setWorkDuration(n.getPeriodAndDurationValue()); + final var value = n.getPeriodAndDurationValue(); + if (value != null) { + setWorkDuration(value); + } }); put( "startWorkTime", @@ -136,7 +139,10 @@ public Map> getFieldDeserializers() { put( "deviceNames", (n) -> { - setDeviceNames(n.getCollectionOfPrimitiveValues(String.class)); + final var value = n.getCollectionOfPrimitiveValues(String.class); + if (value != null) { + setDeviceNames(value); + } }); } }; diff --git a/components/serialization/json/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java b/components/serialization/json/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java index afc99ebe5..1c86dab32 100644 --- a/components/serialization/json/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java +++ b/components/serialization/json/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java @@ -139,7 +139,10 @@ public Map> getFieldDeserializers() { put( "workDuration", (n) -> { - setWorkDuration(n.getPeriodAndDurationValue()); + final var value = n.getPeriodAndDurationValue(); + if (value != null) { + setWorkDuration(value); + } }); put( "startWorkTime", @@ -159,7 +162,10 @@ public Map> getFieldDeserializers() { put( "enumCollection", (n) -> { - setEnumCollection(n.getCollectionOfEnumValues(MyEnum::forValue)); + final var value = n.getCollectionOfEnumValues(MyEnum::forValue); + if (value != null) { + setEnumCollection(value); + } }); put( "createdDateTime", @@ -169,7 +175,10 @@ public Map> getFieldDeserializers() { put( "phones", (n) -> { - setPhones(n.getCollectionOfPrimitiveValues(String.class)); + final var value = n.getCollectionOfPrimitiveValues(String.class); + if (value != null) { + setPhones(value); + } }); } }; diff --git a/components/serialization/multipart/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java b/components/serialization/multipart/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java index ccae3a332..975ba86d6 100644 --- a/components/serialization/multipart/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java +++ b/components/serialization/multipart/src/test/java/com/microsoft/kiota/serialization/mocks/TestEntity.java @@ -116,7 +116,10 @@ public Map> getFieldDeserializers() { put( "workDuration", (n) -> { - setWorkDuration(n.getPeriodAndDurationValue()); + final var value = n.getPeriodAndDurationValue(); + if (value != null) { + setWorkDuration(value); + } }); put( "startWorkTime", @@ -136,7 +139,10 @@ public Map> getFieldDeserializers() { put( "deviceNames", (n) -> { - setDeviceNames(n.getCollectionOfPrimitiveValues(String.class)); + final var value = n.getCollectionOfPrimitiveValues(String.class); + if (value != null) { + setDeviceNames(value); + } }); } }; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e3353527a..ddfab22b4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,5 +22,5 @@ org-mockito-mockito-core = { group = "org.mockito", name = "mockito-core", versi [plugins] com-diffplug-spotless = { id = "com.diffplug.spotless", version = "8.8.0" } -com-github-spotbugs = { id = "com.github.spotbugs", version = "6.5.8" } +com-github-spotbugs = { id = "com.github.spotbugs", version = "6.5.9" } org-sonarqube = { id = "org.sonarqube", version = "7.3.1.8318" }