Skip to content

Commit 09967b1

Browse files
committed
Add nullability annotations to tests in module/spring-boot-data-mongodb
See gh-47263
1 parent 5c0d2ee commit 09967b1

File tree

7 files changed

+65
-25
lines changed

7 files changed

+65
-25
lines changed

module/spring-boot-data-mongodb/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies {
3939
optional("org.mongodb:mongodb-driver-sync")
4040

4141
testCompileOnly("com.fasterxml.jackson.core:jackson-annotations")
42+
testCompileOnly("com.google.code.findbugs:jsr305")
4243

4344
testImplementation(project(":core:spring-boot-test"))
4445
testImplementation(project(":test-support:spring-boot-test-support"))
@@ -47,3 +48,7 @@ dependencies {
4748

4849
testRuntimeOnly("ch.qos.logback:logback-classic")
4950
}
51+
52+
tasks.named("compileTestJava") {
53+
options.nullability.checking = "tests"
54+
}

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoAutoConfigurationTests.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.mongodb.client.MongoCollection;
2727
import com.mongodb.client.gridfs.GridFSBucket;
2828
import org.assertj.core.api.InstanceOfAssertFactories;
29+
import org.jspecify.annotations.Nullable;
2930
import org.junit.jupiter.api.Test;
3031

3132
import org.springframework.beans.factory.BeanCreationException;
@@ -84,27 +85,23 @@ void templateExists() {
8485
}
8586

8687
@Test
87-
@SuppressWarnings("unchecked")
8888
void whenGridFsDatabaseIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
8989
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.database:grid").run((context) -> {
9090
assertThat(context).hasSingleBean(GridFsTemplate.class);
9191
GridFsTemplate template = context.getBean(GridFsTemplate.class);
92-
GridFSBucket bucket = ((Supplier<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
93-
.get();
92+
GridFSBucket bucket = getBucket(template);
9493
assertThat(bucket).extracting("filesCollection", InstanceOfAssertFactories.type(MongoCollection.class))
9594
.extracting((collection) -> collection.getNamespace().getDatabaseName())
9695
.isEqualTo("grid");
9796
});
9897
}
9998

10099
@Test
101-
@SuppressWarnings("unchecked")
102100
void whenGridFsBucketIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
103101
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.bucket:test-bucket").run((context) -> {
104102
assertThat(context).hasSingleBean(GridFsTemplate.class);
105103
GridFsTemplate template = context.getBean(GridFsTemplate.class);
106-
GridFSBucket bucket = ((Supplier<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
107-
.get();
104+
GridFSBucket bucket = getBucket(template);
108105
assertThat(bucket.getBucketName()).isEqualTo("test-bucket");
109106
});
110107
}
@@ -169,8 +166,7 @@ void usesAutoConfigurationPackageToPickUpDocumentTypes() {
169166
void defaultFieldNamingStrategy() {
170167
this.contextRunner.run((context) -> {
171168
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
172-
FieldNamingStrategy fieldNamingStrategy = (FieldNamingStrategy) ReflectionTestUtils.getField(mappingContext,
173-
"fieldNamingStrategy");
169+
FieldNamingStrategy fieldNamingStrategy = getFieldNamingStrategy(mappingContext);
174170
assertThat(fieldNamingStrategy.getClass()).isEqualTo(PropertyNameFieldNamingStrategy.class);
175171
});
176172
}
@@ -182,8 +178,7 @@ void customFieldNamingStrategy() {
182178
+ CamelCaseAbbreviatingFieldNamingStrategy.class.getName())
183179
.run((context) -> {
184180
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
185-
FieldNamingStrategy fieldNamingStrategy = (FieldNamingStrategy) ReflectionTestUtils
186-
.getField(mappingContext, "fieldNamingStrategy");
181+
FieldNamingStrategy fieldNamingStrategy = getFieldNamingStrategy(mappingContext);
187182
assertThat(fieldNamingStrategy.getClass()).isEqualTo(CamelCaseAbbreviatingFieldNamingStrategy.class);
188183
});
189184
}
@@ -216,6 +211,7 @@ void entityScanShouldSetManagedTypes() {
216211
this.contextRunner.withUserConfiguration(EntityScanConfig.class).run((context) -> {
217212
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
218213
ManagedTypes managedTypes = (ManagedTypes) ReflectionTestUtils.getField(mappingContext, "managedTypes");
214+
assertThat(managedTypes).isNotNull();
219215
assertThat(managedTypes.toList()).containsOnly(City.class, Country.class);
220216
});
221217

@@ -226,7 +222,9 @@ void registersDefaultSimpleTypesWithMappingContext() {
226222
this.contextRunner.run((context) -> {
227223
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
228224
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(Sample.class);
225+
assertThat(entity).isNotNull();
229226
MongoPersistentProperty dateProperty = entity.getPersistentProperty("date");
227+
assertThat(dateProperty).isNotNull();
230228
assertThat(dateProperty.isEntity()).isFalse();
231229
});
232230

@@ -346,9 +344,24 @@ void mappingMongoConverterHasADefaultDbRefResolver() {
346344

347345
private static void assertDomainTypesDiscovered(MongoMappingContext mappingContext, Class<?>... types) {
348346
ManagedTypes managedTypes = (ManagedTypes) ReflectionTestUtils.getField(mappingContext, "managedTypes");
347+
assertThat(managedTypes).isNotNull();
349348
assertThat(managedTypes.toList()).containsOnly(types);
350349
}
351350

351+
@SuppressWarnings("unchecked")
352+
private GridFSBucket getBucket(GridFsTemplate template) {
353+
Supplier<GridFSBucket> field = (Supplier<GridFSBucket>) ReflectionTestUtils.getField(template,
354+
"bucketSupplier");
355+
assertThat(field).isNotNull();
356+
return field.get();
357+
}
358+
359+
private FieldNamingStrategy getFieldNamingStrategy(MongoMappingContext mappingContext) {
360+
Object field = ReflectionTestUtils.getField(mappingContext, "fieldNamingStrategy");
361+
assertThat(field).isNotNull();
362+
return (FieldNamingStrategy) field;
363+
}
364+
352365
@Configuration(proxyBeanMethods = false)
353366
static class CustomConversionsConfig {
354367

@@ -388,15 +401,15 @@ MongoDatabaseFactory mongoDatabaseFactory() {
388401
static class MyConverter implements Converter<MongoClient, Boolean> {
389402

390403
@Override
391-
public Boolean convert(MongoClient source) {
404+
public @Nullable Boolean convert(MongoClient source) {
392405
return null;
393406
}
394407

395408
}
396409

397410
static class Sample {
398411

399-
LocalDateTime date;
412+
@Nullable LocalDateTime date;
400413

401414
}
402415

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoPropertiesTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ void defaultBigDecimalRepresentationIsAlignedWithSpringData() {
5151
}
5252

5353
private BigDecimalRepresentation springDataDefaultBigDecimalRepresentation() {
54-
return (BigDecimalRepresentation) ReflectionTestUtils.getField(new MongoConverterConfigurationAdapter(),
55-
"bigDecimals");
54+
Object field = ReflectionTestUtils.getField(new MongoConverterConfigurationAdapter(), "bigDecimals");
55+
assertThat(field).isNotNull();
56+
return (BigDecimalRepresentation) field;
5657
}
5758

5859
}

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAndBlockingRepositoriesAutoConfigurationTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22+
import org.jspecify.annotations.Nullable;
2223
import org.junit.jupiter.api.AfterEach;
2324
import org.junit.jupiter.api.Test;
2425

@@ -46,11 +47,13 @@
4647
*/
4748
class DataMongoReactiveAndBlockingRepositoriesAutoConfigurationTests {
4849

49-
private AnnotationConfigApplicationContext context;
50+
private @Nullable AnnotationConfigApplicationContext context;
5051

5152
@AfterEach
5253
void close() {
53-
this.context.close();
54+
if (this.context != null) {
55+
this.context.close();
56+
}
5457
}
5558

5659
@Test

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAutoConfigurationTests.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Duration;
2020

2121
import com.mongodb.reactivestreams.client.MongoCollection;
22+
import com.mongodb.reactivestreams.client.MongoDatabase;
2223
import com.mongodb.reactivestreams.client.gridfs.GridFSBucket;
2324
import org.junit.jupiter.api.Test;
2425
import reactor.core.publisher.Mono;
@@ -76,8 +77,10 @@ void whenGridFsBucketIsConfiguredThenGridFsTemplateUsesIt() {
7677
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.bucket:test-bucket").run((context) -> {
7778
assertThat(context).hasSingleBean(ReactiveGridFsTemplate.class);
7879
ReactiveGridFsTemplate template = context.getBean(ReactiveGridFsTemplate.class);
79-
GridFSBucket bucket = ((Mono<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
80-
.block(Duration.ofSeconds(30));
80+
Mono<GridFSBucket> field = (Mono<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier");
81+
assertThat(field).isNotNull();
82+
GridFSBucket bucket = field.block(Duration.ofSeconds(30));
83+
assertThat(bucket).isNotNull();
8184
assertThat(bucket.getBucketName()).isEqualTo("test-bucket");
8285
});
8386
}
@@ -94,7 +97,9 @@ void databaseHasDefault() {
9497
this.contextRunner.run((context) -> {
9598
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
9699
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
97-
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("test");
100+
MongoDatabase mongoDatabase = factory.getMongoDatabase().block();
101+
assertThat(mongoDatabase).isNotNull();
102+
assertThat(mongoDatabase.getName()).isEqualTo("test");
98103
});
99104
}
100105

@@ -103,7 +108,9 @@ void databasePropertyIsUsed() {
103108
this.contextRunner.withPropertyValues("spring.mongodb.database=mydb").run((context) -> {
104109
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
105110
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
106-
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
111+
MongoDatabase mongoDatabase = factory.getMongoDatabase().block();
112+
assertThat(mongoDatabase).isNotNull();
113+
assertThat(mongoDatabase.getName()).isEqualTo("mydb");
107114
});
108115
}
109116

@@ -112,7 +119,9 @@ void databaseInUriPropertyIsUsed() {
112119
this.contextRunner.withPropertyValues("spring.mongodb.uri=mongodb://mongo.example.com/mydb").run((context) -> {
113120
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
114121
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
115-
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
122+
MongoDatabase mongoDatabase = factory.getMongoDatabase().block();
123+
assertThat(mongoDatabase).isNotNull();
124+
assertThat(mongoDatabase.getName()).isEqualTo("mydb");
116125
});
117126
}
118127

@@ -124,7 +133,9 @@ void databasePropertyOverridesUriProperty() {
124133
.run((context) -> {
125134
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
126135
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
127-
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
136+
MongoDatabase mongoDatabase = factory.getMongoDatabase().block();
137+
assertThat(mongoDatabase).isNotNull();
138+
assertThat(mongoDatabase.getName()).isEqualTo("mydb");
128139
});
129140
}
130141

@@ -135,7 +146,9 @@ void databasePropertyIsUsedWhenNoDatabaseInUri() {
135146
.run((context) -> {
136147
ReactiveMongoDatabaseFactory factory = context.getBean(ReactiveMongoDatabaseFactory.class);
137148
assertThat(factory).isInstanceOf(SimpleReactiveMongoDatabaseFactory.class);
138-
assertThat(factory.getMongoDatabase().block().getName()).isEqualTo("mydb");
149+
MongoDatabase mongoDatabase = factory.getMongoDatabase().block();
150+
assertThat(mongoDatabase).isNotNull();
151+
assertThat(mongoDatabase.getName()).isEqualTo("mydb");
139152
});
140153
}
141154

@@ -157,9 +170,12 @@ void mappingMongoConverterHasANoOpDbRefResolver() {
157170
private String grisFsTemplateDatabaseName(AssertableApplicationContext context) {
158171
assertThat(context).hasSingleBean(ReactiveGridFsTemplate.class);
159172
ReactiveGridFsTemplate template = context.getBean(ReactiveGridFsTemplate.class);
160-
GridFSBucket bucket = ((Mono<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
161-
.block(Duration.ofSeconds(30));
173+
Mono<GridFSBucket> field = (Mono<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier");
174+
assertThat(field).isNotNull();
175+
GridFSBucket bucket = field.block(Duration.ofSeconds(30));
176+
assertThat(bucket).isNotNull();
162177
MongoCollection<?> collection = (MongoCollection<?>) ReflectionTestUtils.getField(bucket, "filesCollection");
178+
assertThat(collection).isNotNull();
163179
return collection.getNamespace().getDatabaseName();
164180
}
165181

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveRepositoriesAutoConfigurationTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ void testDefaultRepositoryConfiguration() {
5959
assertThat(context).hasSingleBean(MongoClient.class);
6060
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
6161
ManagedTypes managedTypes = (ManagedTypes) ReflectionTestUtils.getField(mappingContext, "managedTypes");
62+
assertThat(managedTypes).isNotNull();
6263
assertThat(managedTypes.toList()).hasSize(1);
6364
});
6465
}

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoRepositoriesAutoConfigurationTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void testDefaultRepositoryConfiguration() {
5555
assertThat(context).hasSingleBean(MongoClient.class);
5656
MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class);
5757
ManagedTypes managedTypes = (ManagedTypes) ReflectionTestUtils.getField(mappingContext, "managedTypes");
58+
assertThat(managedTypes).isNotNull();
5859
assertThat(managedTypes.toList()).hasSize(1);
5960
});
6061
}

0 commit comments

Comments
 (0)