2020
2121import org .bson .Document ;
2222import org .junit .jupiter .api .Test ;
23+ import org .springframework .data .mongodb .core .CollectionOptions .TimeSeriesOptions ;
24+ import org .springframework .data .mongodb .core .timeseries .Granularity ;
2325
2426/**
2527 * Unit tests for {@link OutOperation}.
2628 *
2729 * @author Nikolay Bogdanov
2830 * @author Christoph Strobl
2931 * @author Mark Paluch
32+ * @author Hyunsang Han
3033 */
3134class OutOperationUnitTest {
3235
@@ -48,4 +51,99 @@ void shouldRenderDocument() {
4851 .containsEntry ("$out.db" , "database-2" );
4952 }
5053
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+
51149}
0 commit comments