2323import java .util .HashMap ;
2424import java .util .HashSet ;
2525import java .util .Map ;
26+ import java .util .Optional ;
2627import java .util .function .Consumer ;
2728
2829import org .junit .jupiter .api .Test ;
@@ -47,6 +48,13 @@ public void withEmptyCollection() {
4748
4849 assertThat (DataAccessUtils .uniqueResult (col )).isNull ();
4950
51+ assertThat (DataAccessUtils .singleResult (col )).isNull ();
52+ assertThat (DataAccessUtils .singleResult (col .stream ())).isNull ();
53+ assertThat (DataAccessUtils .singleResult (col .iterator ())).isNull ();
54+ assertThat (DataAccessUtils .optionalResult (col )).isEmpty ();
55+ assertThat (DataAccessUtils .optionalResult (col .stream ())).isEmpty ();
56+ assertThat (DataAccessUtils .optionalResult (col .iterator ())).isEmpty ();
57+
5058 assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
5159 DataAccessUtils .requiredUniqueResult (col ))
5260 .satisfies (sizeRequirements (1 , 0 ));
@@ -89,6 +97,30 @@ public void withTooLargeCollection() {
8997 assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
9098 DataAccessUtils .longResult (col ))
9199 .satisfies (sizeRequirements (1 , 2 ));
100+
101+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
102+ DataAccessUtils .singleResult (col ))
103+ .satisfies (sizeRequirements (1 , 2 ));
104+
105+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
106+ DataAccessUtils .singleResult (col .stream ()))
107+ .satisfies (sizeRequirements (1 ));
108+
109+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
110+ DataAccessUtils .singleResult (col .iterator ()))
111+ .satisfies (sizeRequirements (1 ));
112+
113+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
114+ DataAccessUtils .optionalResult (col ))
115+ .satisfies (sizeRequirements (1 , 2 ));
116+
117+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
118+ DataAccessUtils .optionalResult (col .stream ()))
119+ .satisfies (sizeRequirements (1 ));
120+
121+ assertThatExceptionOfType (IncorrectResultSizeDataAccessException .class ).isThrownBy (() ->
122+ DataAccessUtils .optionalResult (col .iterator ()))
123+ .satisfies (sizeRequirements (1 ));
92124 }
93125
94126 @ Test
@@ -102,6 +134,12 @@ public void withInteger() {
102134 assertThat (DataAccessUtils .objectResult (col , String .class )).isEqualTo ("5" );
103135 assertThat (DataAccessUtils .intResult (col )).isEqualTo (5 );
104136 assertThat (DataAccessUtils .longResult (col )).isEqualTo (5 );
137+ assertThat (DataAccessUtils .singleResult (col )).isEqualTo (5 );
138+ assertThat (DataAccessUtils .singleResult (col .stream ())).isEqualTo (5 );
139+ assertThat (DataAccessUtils .singleResult (col .iterator ())).isEqualTo (5 );
140+ assertThat (DataAccessUtils .optionalResult (col )).isEqualTo (Optional .of (5 ));
141+ assertThat (DataAccessUtils .optionalResult (col .stream ())).isEqualTo (Optional .of (5 ));
142+ assertThat (DataAccessUtils .optionalResult (col .iterator ())).isEqualTo (Optional .of (5 ));
105143 }
106144
107145 @ Test
@@ -139,6 +177,12 @@ public void withLong() {
139177 assertThat (DataAccessUtils .objectResult (col , String .class )).isEqualTo ("5" );
140178 assertThat (DataAccessUtils .intResult (col )).isEqualTo (5 );
141179 assertThat (DataAccessUtils .longResult (col )).isEqualTo (5 );
180+ assertThat (DataAccessUtils .singleResult (col )).isEqualTo (Long .valueOf (5L ));
181+ assertThat (DataAccessUtils .singleResult (col .stream ())).isEqualTo (Long .valueOf (5L ));
182+ assertThat (DataAccessUtils .singleResult (col .iterator ())).isEqualTo (Long .valueOf (5L ));
183+ assertThat (DataAccessUtils .optionalResult (col )).isEqualTo (Optional .of (5L ));
184+ assertThat (DataAccessUtils .optionalResult (col .stream ())).isEqualTo (Optional .of (5L ));
185+ assertThat (DataAccessUtils .optionalResult (col .iterator ())).isEqualTo (Optional .of (5L ));
142186 }
143187
144188 @ Test
@@ -149,6 +193,12 @@ public void withString() {
149193 assertThat (DataAccessUtils .uniqueResult (col )).isEqualTo ("test1" );
150194 assertThat (DataAccessUtils .requiredUniqueResult (col )).isEqualTo ("test1" );
151195 assertThat (DataAccessUtils .objectResult (col , String .class )).isEqualTo ("test1" );
196+ assertThat (DataAccessUtils .singleResult (col )).isEqualTo ("test1" );
197+ assertThat (DataAccessUtils .singleResult (col .stream ())).isEqualTo ("test1" );
198+ assertThat (DataAccessUtils .singleResult (col .iterator ())).isEqualTo ("test1" );
199+ assertThat (DataAccessUtils .optionalResult (col )).isEqualTo (Optional .of ("test1" ));
200+ assertThat (DataAccessUtils .optionalResult (col .stream ())).isEqualTo (Optional .of ("test1" ));
201+ assertThat (DataAccessUtils .optionalResult (col .iterator ())).isEqualTo (Optional .of ("test1" ));
152202
153203 assertThatExceptionOfType (TypeMismatchDataAccessException .class ).isThrownBy (() ->
154204 DataAccessUtils .intResult (col ));
@@ -167,6 +217,12 @@ public void withDate() {
167217 assertThat (DataAccessUtils .requiredUniqueResult (col )).isEqualTo (date );
168218 assertThat (DataAccessUtils .objectResult (col , Date .class )).isEqualTo (date );
169219 assertThat (DataAccessUtils .objectResult (col , String .class )).isEqualTo (date .toString ());
220+ assertThat (DataAccessUtils .singleResult (col )).isEqualTo (date );
221+ assertThat (DataAccessUtils .singleResult (col .stream ())).isEqualTo (date );
222+ assertThat (DataAccessUtils .singleResult (col .iterator ())).isEqualTo (date );
223+ assertThat (DataAccessUtils .optionalResult (col )).isEqualTo (Optional .of (date ));
224+ assertThat (DataAccessUtils .optionalResult (col .stream ())).isEqualTo (Optional .of (date ));
225+ assertThat (DataAccessUtils .optionalResult (col .iterator ())).isEqualTo (Optional .of (date ));
170226
171227 assertThatExceptionOfType (TypeMismatchDataAccessException .class ).isThrownBy (() ->
172228 DataAccessUtils .intResult (col ));
@@ -199,6 +255,13 @@ private <E extends IncorrectResultSizeDataAccessException> Consumer<E> sizeRequi
199255 };
200256 }
201257
258+ private <E extends IncorrectResultSizeDataAccessException > Consumer <E > sizeRequirements (
259+ int expectedSize ) {
260+ return ex -> {
261+ assertThat (ex .getExpectedSize ()).as ("expected size" ).isEqualTo (expectedSize );
262+ };
263+ }
264+
202265 public static class MapPersistenceExceptionTranslator implements PersistenceExceptionTranslator {
203266
204267 // in to out
0 commit comments