20
20
21
21
import org .bson .Document ;
22
22
import org .junit .jupiter .api .Test ;
23
+ import org .springframework .data .mongodb .core .CollectionOptions .TimeSeriesOptions ;
24
+ import org .springframework .data .mongodb .core .timeseries .Granularity ;
23
25
24
26
/**
25
27
* Unit tests for {@link OutOperation}.
26
28
*
27
29
* @author Nikolay Bogdanov
28
30
* @author Christoph Strobl
29
31
* @author Mark Paluch
32
+ * @author Hyunsang Han
30
33
*/
31
34
class OutOperationUnitTest {
32
35
@@ -48,4 +51,99 @@ void shouldRenderDocument() {
48
51
.containsEntry ("$out.db" , "database-2" );
49
52
}
50
53
54
+ @ Test // GH-4985
55
+ void shouldRenderTimeSeriesCollectionWithTimeFieldOnly () {
56
+
57
+ Document result = out ("timeseries-col" ).timeSeries ("timestamp" ).toDocument (Aggregation .DEFAULT_CONTEXT );
58
+
59
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
60
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
61
+ assertThat (result ).doesNotContainKey ("$out.timeseries.metaField" );
62
+ assertThat (result ).doesNotContainKey ("$out.timeseries.granularity" );
63
+ }
64
+
65
+ @ Test // GH-4985
66
+ void shouldRenderTimeSeriesCollectionWithAllOptions () {
67
+
68
+ Document result = out ("timeseries-col" ).timeSeries ("timestamp" , "metadata" , Granularity .SECONDS )
69
+ .toDocument (Aggregation .DEFAULT_CONTEXT );
70
+
71
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
72
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
73
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
74
+ assertThat (result ).containsEntry ("$out.timeseries.granularity" , "seconds" );
75
+ }
76
+
77
+ @ Test // GH-4985
78
+ void shouldRenderTimeSeriesCollectionWithDatabaseAndAllOptions () {
79
+
80
+ Document result = out ("timeseries-col" ).in ("test-db" ).timeSeries ("timestamp" , "metadata" , Granularity .MINUTES )
81
+ .toDocument (Aggregation .DEFAULT_CONTEXT );
82
+
83
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
84
+ assertThat (result ).containsEntry ("$out.db" , "test-db" );
85
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
86
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
87
+ assertThat (result ).containsEntry ("$out.timeseries.granularity" , "minutes" );
88
+ }
89
+
90
+ @ Test // GH-4985
91
+ void shouldRenderTimeSeriesCollectionWithTimeSeriesOptions () {
92
+
93
+ TimeSeriesOptions options = TimeSeriesOptions .timeSeries ("timestamp" ).metaField ("metadata" ).granularity (Granularity .HOURS );
94
+ Document result = out ("timeseries-col" ).timeSeries (options ).toDocument (Aggregation .DEFAULT_CONTEXT );
95
+
96
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
97
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
98
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
99
+ assertThat (result ).containsEntry ("$out.timeseries.granularity" , "hours" );
100
+ }
101
+
102
+ @ Test // GH-4985
103
+ void shouldRenderTimeSeriesCollectionWithPartialOptions () {
104
+
105
+ Document result = out ("timeseries-col" ).timeSeries ("timestamp" , "metadata" , null )
106
+ .toDocument (Aggregation .DEFAULT_CONTEXT );
107
+
108
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
109
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
110
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
111
+ assertThat (result ).doesNotContainKey ("$out.timeseries.granularity" );
112
+ }
113
+
114
+ @ Test // GH-4985
115
+ void outWithTimeSeriesOptionsShouldRenderCorrectly () {
116
+
117
+ TimeSeriesOptions options = TimeSeriesOptions .timeSeries ("timestamp" ).metaField ("metadata" ).granularity (Granularity .SECONDS );
118
+ Document result = Aggregation .out ("timeseries-col" , options ).toDocument (Aggregation .DEFAULT_CONTEXT );
119
+
120
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
121
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
122
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
123
+ assertThat (result ).containsEntry ("$out.timeseries.granularity" , "seconds" );
124
+ }
125
+
126
+ @ Test // GH-4985
127
+ void outWithTimeFieldOnlyShouldRenderCorrectly () {
128
+
129
+ Document result = Aggregation .out ("timeseries-col" , "timestamp" ).toDocument (Aggregation .DEFAULT_CONTEXT );
130
+
131
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
132
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
133
+ assertThat (result ).doesNotContainKey ("$out.timeseries.metaField" );
134
+ assertThat (result ).doesNotContainKey ("$out.timeseries.granularity" );
135
+ }
136
+
137
+ @ Test // GH-4985
138
+ void outWithAllOptionsShouldRenderCorrectly () {
139
+
140
+ Document result = Aggregation .out ("timeseries-col" , "timestamp" , "metadata" , Granularity .MINUTES )
141
+ .toDocument (Aggregation .DEFAULT_CONTEXT );
142
+
143
+ assertThat (result ).containsEntry ("$out.coll" , "timeseries-col" );
144
+ assertThat (result ).containsEntry ("$out.timeseries.timeField" , "timestamp" );
145
+ assertThat (result ).containsEntry ("$out.timeseries.metaField" , "metadata" );
146
+ assertThat (result ).containsEntry ("$out.timeseries.granularity" , "minutes" );
147
+ }
148
+
51
149
}
0 commit comments