|
15 | 15 | */
|
16 | 16 | package org.springframework.data.mongodb.core.convert;
|
17 | 17 |
|
| 18 | +import static java.time.ZoneId.*; |
18 | 19 | import static org.hamcrest.Matchers.*;
|
19 | 20 | import static org.junit.Assert.*;
|
20 | 21 | import static org.mockito.Mockito.*;
|
|
36 | 37 | import java.util.List;
|
37 | 38 | import java.util.Locale;
|
38 | 39 | import java.util.Map;
|
| 40 | +import java.util.Optional; |
39 | 41 | import java.util.Set;
|
40 | 42 | import java.util.SortedMap;
|
41 | 43 | import java.util.TreeMap;
|
@@ -1962,6 +1964,43 @@ public void convertsJava8DateTimeTypesToDateAndBack() {
|
1962 | 1964 | assertThat(converter.read(TypeWithLocalDateTime.class, result).date, is(reference));
|
1963 | 1965 | }
|
1964 | 1966 |
|
| 1967 | + /** |
| 1968 | + * @see DATAMONGO-1128 |
| 1969 | + */ |
| 1970 | + @Test |
| 1971 | + public void writesOptionalsCorrectly() { |
| 1972 | + |
| 1973 | + TypeWithOptional type = new TypeWithOptional(); |
| 1974 | + type.localDateTime = Optional.of(LocalDateTime.now()); |
| 1975 | + |
| 1976 | + DBObject result = new BasicDBObject(); |
| 1977 | + |
| 1978 | + converter.write(type, result); |
| 1979 | + |
| 1980 | + assertThat(getAsDBObject(result, "string"), is((DBObject) new BasicDBObject())); |
| 1981 | + |
| 1982 | + DBObject localDateTime = getAsDBObject(result, "localDateTime"); |
| 1983 | + assertThat(localDateTime.get("value"), is(instanceOf(Date.class))); |
| 1984 | + } |
| 1985 | + |
| 1986 | + /** |
| 1987 | + * @see DATAMONGO-1128 |
| 1988 | + */ |
| 1989 | + @Test |
| 1990 | + public void readsOptionalsCorrectly() { |
| 1991 | + |
| 1992 | + LocalDateTime now = LocalDateTime.now(); |
| 1993 | + Date reference = Date.from(now.atZone(systemDefault()).toInstant()); |
| 1994 | + |
| 1995 | + BasicDBObject optionalOfLocalDateTime = new BasicDBObject("value", reference); |
| 1996 | + DBObject result = new BasicDBObject("localDateTime", optionalOfLocalDateTime); |
| 1997 | + |
| 1998 | + TypeWithOptional read = converter.read(TypeWithOptional.class, result); |
| 1999 | + |
| 2000 | + assertThat(read.string, is(Optional.<String> empty())); |
| 2001 | + assertThat(read.localDateTime, is(Optional.of(now))); |
| 2002 | + } |
| 2003 | + |
1965 | 2004 | static class GenericType<T> {
|
1966 | 2005 | T content;
|
1967 | 2006 | }
|
@@ -2258,4 +2297,10 @@ static class TypeWithLocalDateTime {
|
2258 | 2297 | this.date = LocalDateTime.now();
|
2259 | 2298 | }
|
2260 | 2299 | }
|
| 2300 | + |
| 2301 | + static class TypeWithOptional { |
| 2302 | + |
| 2303 | + Optional<String> string = Optional.empty(); |
| 2304 | + Optional<LocalDateTime> localDateTime = Optional.empty(); |
| 2305 | + } |
2261 | 2306 | }
|
0 commit comments