Skip to content

Commit 0e7d3da

Browse files
committed
test: add StreamConvertersUnitTests for Lettuce stream options (#3276)
1 parent 3d7a77b commit 0e7d3da

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
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

Comments
 (0)