Skip to content

Commit df8b2bc

Browse files
committed
Add unit tests for RqueueNatsConfig defaults and fluent setters
Assisted-By: Claude Code
1 parent 8f98b9d commit df8b2bc

1 file changed

Lines changed: 132 additions & 0 deletions

File tree

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
/*
2+
* Copyright (c) 2024-2026 Sonu Kumar
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+
package com.github.sonus21.rqueue.nats;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
import static org.junit.jupiter.api.Assertions.assertNotNull;
14+
import static org.junit.jupiter.api.Assertions.assertSame;
15+
import static org.junit.jupiter.api.Assertions.assertTrue;
16+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
17+
18+
import com.github.sonus21.rqueue.nats.RqueueNatsConfig.ConsumerDefaults;
19+
import com.github.sonus21.rqueue.nats.RqueueNatsConfig.StreamDefaults;
20+
import io.nats.client.api.RetentionPolicy;
21+
import io.nats.client.api.StorageType;
22+
import java.time.Duration;
23+
import org.junit.jupiter.api.Test;
24+
25+
/** POJO-only tests for {@link RqueueNatsConfig}; no broker / no NATS. */
26+
@NatsUnitTest
27+
class RqueueNatsConfigTest {
28+
29+
@Test
30+
void defaults_returnsSensibleValues() {
31+
RqueueNatsConfig c = RqueueNatsConfig.defaults();
32+
assertNotNull(c.getStreamPrefix());
33+
assertNotNull(c.getSubjectPrefix());
34+
assertNotNull(c.getDlqStreamSuffix());
35+
assertNotNull(c.getDlqSubjectSuffix());
36+
assertTrue(c.isAutoCreateStreams());
37+
assertTrue(c.isAutoCreateConsumers());
38+
assertTrue(c.isAutoCreateDlqStream());
39+
assertNotNull(c.getDefaultFetchWait());
40+
assertTrue(c.getDefaultFetchWait().toMillis() > 0);
41+
assertNotNull(c.getStreamDefaults());
42+
assertNotNull(c.getConsumerDefaults());
43+
// sanity-check sane consumer defaults
44+
assertTrue(c.getConsumerDefaults().getMaxAckPending() > 0);
45+
assertTrue(c.getConsumerDefaults().getMaxDeliver() > 0);
46+
assertNotNull(c.getConsumerDefaults().getAckWait());
47+
}
48+
49+
@Test
50+
void fluentSetters_returnSameInstanceAndUpdateFields() {
51+
RqueueNatsConfig c = RqueueNatsConfig.defaults();
52+
assertSame(c, c.setStreamPrefix("s-"));
53+
assertSame(c, c.setSubjectPrefix("sub."));
54+
assertSame(c, c.setDlqStreamSuffix("-x"));
55+
assertSame(c, c.setDlqSubjectSuffix(".x"));
56+
assertSame(c, c.setAutoCreateStreams(false));
57+
assertSame(c, c.setAutoCreateConsumers(false));
58+
assertSame(c, c.setAutoCreateDlqStream(false));
59+
assertSame(c, c.setDefaultFetchWait(Duration.ofSeconds(7)));
60+
61+
assertEquals("s-", c.getStreamPrefix());
62+
assertEquals("sub.", c.getSubjectPrefix());
63+
assertEquals("-x", c.getDlqStreamSuffix());
64+
assertEquals(".x", c.getDlqSubjectSuffix());
65+
assertEquals(false, c.isAutoCreateStreams());
66+
assertEquals(false, c.isAutoCreateConsumers());
67+
assertEquals(false, c.isAutoCreateDlqStream());
68+
assertEquals(Duration.ofSeconds(7), c.getDefaultFetchWait());
69+
}
70+
71+
@Test
72+
void streamDefaults_setNestedReference() {
73+
RqueueNatsConfig c = RqueueNatsConfig.defaults();
74+
StreamDefaults sd = new StreamDefaults();
75+
assertSame(c, c.setStreamDefaults(sd));
76+
assertSame(sd, c.getStreamDefaults());
77+
}
78+
79+
@Test
80+
void consumerDefaults_setNestedReference() {
81+
RqueueNatsConfig c = RqueueNatsConfig.defaults();
82+
ConsumerDefaults cd = new ConsumerDefaults();
83+
assertSame(c, c.setConsumerDefaults(cd));
84+
assertSame(cd, c.getConsumerDefaults());
85+
}
86+
87+
@Test
88+
void streamDefaults_fluentSettersRoundtripEachProperty() {
89+
StreamDefaults sd = new StreamDefaults();
90+
assertSame(sd, sd.setReplicas(3));
91+
assertSame(sd, sd.setStorage(StorageType.Memory));
92+
assertSame(sd, sd.setRetention(RetentionPolicy.Limits));
93+
assertSame(sd, sd.setDuplicateWindow(Duration.ofMinutes(10)));
94+
assertSame(sd, sd.setMaxMsgs(1234L));
95+
assertSame(sd, sd.setMaxBytes(99999L));
96+
97+
assertEquals(3, sd.getReplicas());
98+
assertEquals(StorageType.Memory, sd.getStorage());
99+
assertEquals(RetentionPolicy.Limits, sd.getRetention());
100+
assertEquals(Duration.ofMinutes(10), sd.getDuplicateWindow());
101+
assertEquals(1234L, sd.getMaxMsgs());
102+
assertEquals(99999L, sd.getMaxBytes());
103+
}
104+
105+
@Test
106+
void consumerDefaults_fluentSettersRoundtripEachProperty() {
107+
ConsumerDefaults cd = new ConsumerDefaults();
108+
assertSame(cd, cd.setAckWait(Duration.ofSeconds(45)));
109+
assertSame(cd, cd.setMaxDeliver(11));
110+
assertSame(cd, cd.setMaxAckPending(2048));
111+
112+
assertEquals(Duration.ofSeconds(45), cd.getAckWait());
113+
assertEquals(11L, cd.getMaxDeliver());
114+
assertEquals(2048L, cd.getMaxAckPending());
115+
}
116+
117+
@Test
118+
void emptyAndNullPrefixesAreAccepted() {
119+
RqueueNatsConfig c = RqueueNatsConfig.defaults().setSubjectPrefix("").setStreamPrefix(null);
120+
assertEquals("", c.getSubjectPrefix());
121+
assertEquals(null, c.getStreamPrefix());
122+
}
123+
124+
@Test
125+
void toString_doesNotNpeOnDefaults() {
126+
// RqueueNatsConfig is plain Java (no Lombok) — but still verify no surprise NPEs and equals to
127+
// self holds.
128+
RqueueNatsConfig c = RqueueNatsConfig.defaults();
129+
assertDoesNotThrow(c::toString);
130+
assertEquals(c, c);
131+
}
132+
}

0 commit comments

Comments
 (0)