Enforce non-null value in requiredSingleResult/requiredUniqueResult

Closes gh-33300
This commit is contained in:
Juergen Hoeller
2024-08-05 15:53:17 +02:00
parent 1e804d8d4f
commit 28668d774b
2 changed files with 109 additions and 59 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,21 +52,25 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.optionalResult(col.stream())).isEmpty();
assertThat(DataAccessUtils.optionalResult(col.iterator())).isEmpty();
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.requiredUniqueResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredSingleResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.objectResult(col, String.class))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredUniqueResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.intResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.objectResult(col, String.class))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.longResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.intResult(col))
.satisfies(sizeRequirements(1, 0));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.longResult(col))
.satisfies(sizeRequirements(1, 0));
}
@Test
@@ -75,49 +79,83 @@ class DataAccessUtilsTests {
col.add("test1");
col.add("test2");
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.uniqueResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.uniqueResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.requiredUniqueResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredUniqueResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.objectResult(col, String.class))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.objectResult(col, String.class))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.intResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.intResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.longResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.longResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.singleResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredSingleResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.singleResult(col.stream()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.singleResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.singleResult(col.iterator()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.singleResult(col.stream()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.optionalResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.singleResult(col.iterator()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.optionalResult(col.stream()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.optionalResult(col))
.satisfies(sizeRequirements(1, 2));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class).isThrownBy(() ->
DataAccessUtils.optionalResult(col.iterator()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.optionalResult(col.stream()))
.satisfies(sizeRequirements(1));
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.optionalResult(col.iterator()))
.satisfies(sizeRequirements(1));
}
@Test
void withNullValueInCollection() {
Collection<String> col = new HashSet<>();
col.add(null);
assertThat(DataAccessUtils.uniqueResult(col)).isNull();
assertThat(DataAccessUtils.singleResult(col)).isNull();
assertThat(DataAccessUtils.singleResult(col.stream())).isNull();
assertThat(DataAccessUtils.singleResult(col.iterator())).isNull();
assertThat(DataAccessUtils.optionalResult(col)).isEmpty();
assertThat(DataAccessUtils.optionalResult(col.stream())).isEmpty();
assertThat(DataAccessUtils.optionalResult(col.iterator())).isEmpty();
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredSingleResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.requiredUniqueResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.objectResult(col, String.class));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.intResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.longResult(col));
}
@Test
@@ -131,6 +169,7 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.objectResult(col, String.class)).isEqualTo("5");
assertThat(DataAccessUtils.intResult(col)).isEqualTo(5);
assertThat(DataAccessUtils.longResult(col)).isEqualTo(5);
assertThat(DataAccessUtils.requiredSingleResult(col)).isEqualTo(Integer.valueOf(5));
assertThat(DataAccessUtils.singleResult(col)).isEqualTo(5);
assertThat(DataAccessUtils.singleResult(col.stream())).isEqualTo(5);
assertThat(DataAccessUtils.singleResult(col.iterator())).isEqualTo(5);
@@ -159,8 +198,8 @@ class DataAccessUtilsTests {
Collection<Integer> col = Arrays.asList(555, 555);
assertThatExceptionOfType(IncorrectResultSizeDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.uniqueResult(col))
.satisfies(sizeRequirements(1, 2));
.isThrownBy(() -> DataAccessUtils.uniqueResult(col))
.satisfies(sizeRequirements(1, 2));
}
@Test
@@ -174,6 +213,7 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.objectResult(col, String.class)).isEqualTo("5");
assertThat(DataAccessUtils.intResult(col)).isEqualTo(5);
assertThat(DataAccessUtils.longResult(col)).isEqualTo(5);
assertThat(DataAccessUtils.requiredSingleResult(col)).isEqualTo(Long.valueOf(5L));
assertThat(DataAccessUtils.singleResult(col)).isEqualTo(Long.valueOf(5L));
assertThat(DataAccessUtils.singleResult(col.stream())).isEqualTo(Long.valueOf(5L));
assertThat(DataAccessUtils.singleResult(col.iterator())).isEqualTo(Long.valueOf(5L));
@@ -190,6 +230,7 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.uniqueResult(col)).isEqualTo("test1");
assertThat(DataAccessUtils.requiredUniqueResult(col)).isEqualTo("test1");
assertThat(DataAccessUtils.objectResult(col, String.class)).isEqualTo("test1");
assertThat(DataAccessUtils.requiredSingleResult(col)).isEqualTo("test1");
assertThat(DataAccessUtils.singleResult(col)).isEqualTo("test1");
assertThat(DataAccessUtils.singleResult(col.stream())).isEqualTo("test1");
assertThat(DataAccessUtils.singleResult(col.iterator())).isEqualTo("test1");
@@ -197,11 +238,11 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.optionalResult(col.stream())).isEqualTo(Optional.of("test1"));
assertThat(DataAccessUtils.optionalResult(col.iterator())).isEqualTo(Optional.of("test1"));
assertThatExceptionOfType(TypeMismatchDataAccessException.class).isThrownBy(() ->
DataAccessUtils.intResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.intResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class).isThrownBy(() ->
DataAccessUtils.longResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.longResult(col));
}
@Test
@@ -214,6 +255,7 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.requiredUniqueResult(col)).isEqualTo(date);
assertThat(DataAccessUtils.objectResult(col, Date.class)).isEqualTo(date);
assertThat(DataAccessUtils.objectResult(col, String.class)).isEqualTo(date.toString());
assertThat(DataAccessUtils.requiredSingleResult(col)).isEqualTo(date);
assertThat(DataAccessUtils.singleResult(col)).isEqualTo(date);
assertThat(DataAccessUtils.singleResult(col.stream())).isEqualTo(date);
assertThat(DataAccessUtils.singleResult(col.iterator())).isEqualTo(date);
@@ -221,11 +263,11 @@ class DataAccessUtilsTests {
assertThat(DataAccessUtils.optionalResult(col.stream())).isEqualTo(Optional.of(date));
assertThat(DataAccessUtils.optionalResult(col.iterator())).isEqualTo(Optional.of(date));
assertThatExceptionOfType(TypeMismatchDataAccessException.class).isThrownBy(() ->
DataAccessUtils.intResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.intResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class).isThrownBy(() ->
DataAccessUtils.longResult(col));
assertThatExceptionOfType(TypeMismatchDataAccessException.class)
.isThrownBy(() -> DataAccessUtils.longResult(col));
}
@Test