1+ /*
2+ * Copyright 2025-present the original author or authors.
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * https://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+ package org .springframework .data .redis .connection .lettuce ;
17+
18+ import static org .assertj .core .api .Assertions .*;
19+ import static org .junit .jupiter .params .provider .Arguments .*;
20+
21+ import io .lettuce .core .XAddArgs ;
22+ import java .util .stream .Stream ;
23+
24+ import org .junit .jupiter .api .DisplayName ;
25+ import org .junit .jupiter .api .Nested ;
26+ import org .junit .jupiter .api .Test ;
27+ import org .junit .jupiter .params .ParameterizedTest ;
28+ import org .junit .jupiter .params .provider .Arguments ;
29+ import org .junit .jupiter .params .provider .MethodSource ;
30+
31+ import org .springframework .data .redis .connection .RedisStreamCommands .StreamDeletionPolicy ;
32+ import org .springframework .data .redis .connection .RedisStreamCommands .TrimOptions ;
33+ import org .springframework .data .redis .connection .RedisStreamCommands .XAddOptions ;
34+ import org .springframework .data .redis .connection .RedisStreamCommands .XDelOptions ;
35+ import org .springframework .data .redis .connection .RedisStreamCommands .XTrimOptions ;
36+ import org .springframework .data .redis .connection .stream .RecordId ;
37+
38+ /**
39+ * @author Christoph Strobl
40+ * @author Mark Paluch
41+ * @author Jimin Sin
42+ */
43+ class StreamConvertersUnitTests {
44+
45+ @ Nested // GH-3232
46+ class ToXAddArgsShould {
47+
48+ @ ParameterizedTest
49+ @ DisplayName ("ConvertXAddOptions" )
50+ @ MethodSource
51+ void convertXAddOptions (XAddOptions options , String paramsFieldToCheck , Object paramsFieldExpectedValue ) {
52+ assertThat (StreamConverters .toXAddArgs (RecordId .autoGenerate (), options )).hasFieldOrPropertyWithValue (paramsFieldToCheck , paramsFieldExpectedValue );
53+ }
54+
55+ static Stream <Arguments > convertXAddOptions () {
56+ return Stream .of (
57+ argumentSet ("withMaxLen" , XAddOptions .trim (TrimOptions .maxLen (100 )), "maxlen" , 100L ),
58+ argumentSet ("withMinId" , XAddOptions .trim (TrimOptions .minId (RecordId .of ("1234567890-0" ))), "minid" , "1234567890-0" ),
59+ argumentSet ("withApproximateTrimming" , XAddOptions .trim (TrimOptions .maxLen (100 ).approximate ()), "approximateTrimming" , true ),
60+ argumentSet ("withExactTrimming" , XAddOptions .trim (TrimOptions .maxLen (100 ).exact ()), "exactTrimming" , true ),
61+ argumentSet ("withLimit" , XAddOptions .trim (TrimOptions .maxLen (100 ).approximate ().limit (50 )), "limit" , 50L ),
62+ argumentSet ("withDeletionPolicy" , XAddOptions .trim (TrimOptions .maxLen (100 ).deletionPolicy (StreamDeletionPolicy .keep ())), "trimmingMode" , io .lettuce .core .StreamDeletionPolicy .KEEP_REFERENCES )
63+ );
64+ }
65+
66+ @ Test // GH-2047
67+ void convertXAddOptionsWithNoMkStream () {
68+
69+ XAddOptions options = XAddOptions .makeNoStream ();
70+
71+ XAddArgs args = StreamConverters .toXAddArgs (RecordId .autoGenerate (), options );
72+
73+ assertThat (args ).hasFieldOrPropertyWithValue ("nomkstream" , true );
74+ }
75+ }
76+
77+ @ Nested // GH-3232
78+ class ToXTrimArgsShould {
79+
80+ @ ParameterizedTest
81+ @ DisplayName ("ToXTrimArgsShouldConvertXTrimOptions" )
82+ @ MethodSource
83+ void toXTrimArgsShouldConvertXTrimOptions (XTrimOptions options , String paramsFieldToCheck , Object paramsFieldExpectedValue ) {
84+ assertThat (StreamConverters .toXTrimArgs (options )).hasFieldOrPropertyWithValue (paramsFieldToCheck , paramsFieldExpectedValue );
85+ }
86+
87+ static Stream <Arguments > toXTrimArgsShouldConvertXTrimOptions () {
88+ return Stream .of (
89+ argumentSet ("withMaxLen" , XTrimOptions .trim (TrimOptions .maxLen (100 )), "maxlen" , 100L ),
90+ argumentSet ("withMinId" , XTrimOptions .trim (TrimOptions .minId (RecordId .of ("1234567890-0" ))), "minId" , "1234567890-0" ),
91+ argumentSet ("withApproximateTrimming" , XTrimOptions .trim (TrimOptions .maxLen (100 ).approximate ()), "approximateTrimming" , true ),
92+ argumentSet ("withExactTrimming" , XTrimOptions .trim (TrimOptions .maxLen (100 ).exact ()), "exactTrimming" , true ),
93+ argumentSet ("withLimit" , XTrimOptions .trim (TrimOptions .maxLen (100 ).approximate ().limit (50 )), "limit" , 50L ),
94+ argumentSet ("withDeletionPolicy" , XTrimOptions .trim (TrimOptions .maxLen (100 ).deletionPolicy (StreamDeletionPolicy .keep ())), "trimmingMode" , io .lettuce .core .StreamDeletionPolicy .KEEP_REFERENCES )
95+ );
96+ }
97+ }
98+
99+ @ ParameterizedTest // GH-3232
100+ @ DisplayName ("ToStreamDeletionPolicyShouldConvertXDelOptions" )
101+ @ MethodSource
102+ void toStreamDeletionPolicyShouldConvertXDelOptions (XDelOptions options , io .lettuce .core .StreamDeletionPolicy expectedDeletionPolicy ) {
103+ assertThat (StreamConverters .toXDelArgs (options )).isEqualTo (expectedDeletionPolicy );
104+ }
105+
106+ static Stream <Arguments > toStreamDeletionPolicyShouldConvertXDelOptions () {
107+ return Stream .of (
108+ argumentSet ("withDefaultOptions" , XDelOptions .defaults (), io .lettuce .core .StreamDeletionPolicy .KEEP_REFERENCES ),
109+ argumentSet ("withKeepReferencesPolicy" , XDelOptions .deletionPolicy (StreamDeletionPolicy .keep ()), io .lettuce .core .StreamDeletionPolicy .KEEP_REFERENCES ),
110+ argumentSet ("withDeleteReferencesPolicy" , XDelOptions .deletionPolicy (StreamDeletionPolicy .delete ()), io .lettuce .core .StreamDeletionPolicy .DELETE_REFERENCES ),
111+ argumentSet ("withRemoveAcknowledgedPolicy" , XDelOptions .deletionPolicy (StreamDeletionPolicy .removeAcknowledged ()), io .lettuce .core .StreamDeletionPolicy .ACKNOWLEDGED )
112+ );
113+ }
114+
115+ }
0 commit comments