Skip to content

Commit 048df9a

Browse files
committed
test: Add unit tests
1 parent d59098f commit 048df9a

File tree

9 files changed

+121
-6
lines changed

9 files changed

+121
-6
lines changed

async/async-commons-api/src/main/java/org/reactivecommons/async/api/HandlerRegistry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public HandlerRegistry listenDomainCloudEvent(String domain, String eventName, C
5252
return this;
5353
}
5454

55-
public HandlerRegistry listenDomainRawEvent(String domain, String eventName, RawEventHandler handler) {
55+
public HandlerRegistry listenDomainRawEvent(String domain, String eventName, RawEventHandler<?> handler) {
5656
domainEventListeners.computeIfAbsent(domain, ignored -> new CopyOnWriteArrayList<>())
5757
.add(new RegisteredEventListener<>(eventName, handler, RawMessage.class));
5858
return this;

async/async-commons-api/src/test/java/org/reactivecommons/async/api/HandlerRegistryTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import org.junit.jupiter.api.Test;
66
import org.reactivecommons.api.domain.Command;
77
import org.reactivecommons.api.domain.DomainEvent;
8+
import org.reactivecommons.api.domain.RawMessage;
89
import org.reactivecommons.async.api.handlers.CloudCommandHandler;
910
import org.reactivecommons.async.api.handlers.CloudEventHandler;
1011
import org.reactivecommons.async.api.handlers.DomainCommandHandler;
1112
import org.reactivecommons.async.api.handlers.DomainEventHandler;
1213
import org.reactivecommons.async.api.handlers.QueryHandler;
1314
import org.reactivecommons.async.api.handlers.QueryHandlerDelegate;
15+
import org.reactivecommons.async.api.handlers.RawEventHandler;
1416
import org.reactivecommons.async.api.handlers.registered.RegisteredCommandHandler;
1517
import org.reactivecommons.async.api.handlers.registered.RegisteredEventListener;
1618
import org.reactivecommons.async.api.handlers.registered.RegisteredQueryHandler;
@@ -54,6 +56,20 @@ void shouldListenDomainCloudEvent() {
5456
.containsExactly(name, CloudEvent.class, eventHandler)).hasSize(1);
5557
}
5658

59+
@Test
60+
void shouldListenDomainRawEvent() {
61+
SomeRawEventHandler eventHandler = new SomeRawEventHandler();
62+
63+
registry.listenDomainRawEvent(domain, name, eventHandler);
64+
65+
assertThat(registry.getDomainEventListeners().get(domain))
66+
.anySatisfy(registered -> assertThat(registered)
67+
.extracting(RegisteredEventListener::getPath, RegisteredEventListener::getInputClass,
68+
RegisteredEventListener::getHandler
69+
)
70+
.containsExactly(name, RawMessage.class, eventHandler)).hasSize(1);
71+
}
72+
5773
@Test
5874
void shouldListenEvent() {
5975
SomeDomainEventHandler<SomeDataClass> eventHandler = new SomeDomainEventHandler<>();
@@ -269,6 +285,13 @@ public Mono<Void> handle(CloudEvent message) {
269285
}
270286
}
271287

288+
private static class SomeRawEventHandler implements RawEventHandler<RawMessage> {
289+
@Override
290+
public Mono<Void> handle(RawMessage message) {
291+
return null;
292+
}
293+
}
294+
272295
private static class SomeDomainCommandHandler<SomeDataClass> implements DomainCommandHandler<SomeDataClass> {
273296
@Override
274297
public Mono<Void> handle(Command<SomeDataClass> message) {

async/async-kafka/src/test/java/org/reactivecommons/async/kafka/KafkaDomainEventBusTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.mockito.Mock;
88
import org.mockito.junit.jupiter.MockitoExtension;
99
import org.reactivecommons.api.domain.DomainEvent;
10+
import org.reactivecommons.api.domain.RawMessage;
1011
import org.reactivecommons.async.kafka.communications.ReactiveMessageSender;
1112
import reactor.core.publisher.Mono;
1213
import reactor.test.StepVerifier;
@@ -21,6 +22,8 @@ class KafkaDomainEventBusTest {
2122
@Mock
2223
private CloudEvent cloudEvent;
2324
@Mock
25+
private RawMessage rawMessage;
26+
@Mock
2427
private ReactiveMessageSender sender;
2528
@InjectMocks
2629
private KafkaDomainEventBus kafkaDomainEventBus;
@@ -48,9 +51,21 @@ void shouldEmitCloudEvent() {
4851
.verifyComplete();
4952
}
5053

54+
@Test
55+
void shouldEmitRawMessage() {
56+
// Arrange
57+
when(sender.send(rawMessage)).thenReturn(Mono.empty());
58+
// Act
59+
Mono<Void> flow = Mono.from(kafkaDomainEventBus.emit(rawMessage));
60+
// Assert
61+
StepVerifier.create(flow)
62+
.verifyComplete();
63+
}
64+
5165
@Test
5266
void operationsShouldNotBeAbleForDomains() {
5367
assertThrows(UnsupportedOperationException.class, () -> kafkaDomainEventBus.emit(domain, domainEvent));
5468
assertThrows(UnsupportedOperationException.class, () -> kafkaDomainEventBus.emit(domain, cloudEvent));
69+
assertThrows(UnsupportedOperationException.class, () -> kafkaDomainEventBus.emit(domain, rawMessage));
5570
}
5671
}

async/async-kafka/src/test/java/org/reactivecommons/async/kafka/converters/json/KafkaJacksonMessageConverterTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ void shouldSerializeDomainEvent() {
4242
String expectedJson = "{\"name\":\"test\",\"eventId\":\"" + id + "\",\"data\":{\"name\":\"name\",\"age\":1}}";
4343
// Act
4444
Message message = converter.toMessage(testEvent);
45+
assertEquals(message, converter.toMessage(message));
4546
// Assert
4647
assertEquals("test", message.getProperties().getTopic());
4748
assertEquals(id, message.getProperties().getKey());

async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/RabbitDomainEventBusTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.mockito.Mock;
88
import org.mockito.junit.jupiter.MockitoExtension;
99
import org.reactivecommons.api.domain.DomainEvent;
10+
import org.reactivecommons.api.domain.RawMessage;
1011
import org.reactivecommons.async.rabbit.communications.ReactiveMessageSender;
1112
import reactor.core.publisher.Mono;
1213
import reactor.test.StepVerifier;
@@ -24,6 +25,8 @@ class RabbitDomainEventBusTest {
2425
@Mock
2526
private CloudEvent cloudEvent;
2627
@Mock
28+
private RawMessage rawMessage;
29+
@Mock
2730
private ReactiveMessageSender sender;
2831
private RabbitDomainEventBus rabbitDomainEventBus;
2932
private final String domain = "domain";
@@ -59,9 +62,23 @@ void shouldEmitCloudEvent() {
5962
.verifyComplete();
6063
}
6164

65+
@Test
66+
void shouldEmitRawMessage() {
67+
// Arrange
68+
when(rawMessage.getType()).thenReturn("event");
69+
when(sender.sendWithConfirm(any(RawMessage.class), anyString(), anyString(), any(), anyBoolean()))
70+
.thenReturn(Mono.empty());
71+
// Act
72+
Mono<Void> flow = Mono.from(rabbitDomainEventBus.emit(rawMessage));
73+
// Assert
74+
StepVerifier.create(flow)
75+
.verifyComplete();
76+
}
77+
6278
@Test
6379
void operationsShouldNotBeAbleForDomains() {
6480
assertThrows(UnsupportedOperationException.class, () -> rabbitDomainEventBus.emit(domain, domainEvent));
6581
assertThrows(UnsupportedOperationException.class, () -> rabbitDomainEventBus.emit(domain, cloudEvent));
82+
assertThrows(UnsupportedOperationException.class, () -> rabbitDomainEventBus.emit(domain, rawMessage));
6683
}
6784
}

async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/converters/json/JacksonMessageConverterTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.UUID;
2020

2121
import static org.assertj.core.api.Assertions.assertThat;
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
2223

2324
class JacksonMessageConverterTest {
2425

@@ -34,6 +35,7 @@ static void setUp() {
3435
@Test
3536
void toMessage() {
3637
final Message message = converter.toMessage(new SampleClass("42", "Daniel", new Date()));
38+
assertEquals(message, converter.toMessage(message));
3739
assertThat(new String(message.getBody())).contains("42").contains("Daniel");
3840
}
3941

async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ApplicationEventListenerTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.reactivecommons.async.rabbit.listeners;
22

3+
import io.cloudevents.CloudEvent;
4+
import io.cloudevents.core.builder.CloudEventBuilder;
35
import org.junit.jupiter.api.Test;
46
import org.junit.jupiter.api.extension.ExtendWith;
57
import org.mockito.junit.jupiter.MockitoExtension;
@@ -8,6 +10,7 @@
810
import org.reactivecommons.async.commons.HandlerResolver;
911
import reactor.core.publisher.Mono;
1012

13+
import java.net.URI;
1114
import java.util.Optional;
1215
import java.util.UUID;
1316

@@ -25,6 +28,13 @@ public class ApplicationEventListenerTest extends ListenerReporterTestSuperClass
2528
"app.event.test2", UUID.randomUUID().toString(), new DummyMessage()
2629
);
2730

31+
private final CloudEvent cloudEvent = CloudEventBuilder.v1()
32+
.withType("app.event.test")
33+
.withId(UUID.randomUUID().toString())
34+
.withSource(URI.create("/test"))
35+
.withData("application/json", "{}".getBytes())
36+
.build();
37+
2838
@Test
2939
void shouldSendErrorToCustomErrorReporter() throws InterruptedException {
3040
final HandlerRegistry registry = HandlerRegistry.register()
@@ -34,6 +44,20 @@ void shouldSendErrorToCustomErrorReporter() throws InterruptedException {
3444
assertSendErrorToCustomReporter(registry, createSource(DomainEvent::getName, event1));
3545
}
3646

47+
@Test
48+
void shouldResolveCorrectCloudEventHandler() throws InterruptedException {
49+
final HandlerRegistry registry = HandlerRegistry.register()
50+
.listenCloudEvent("app.event.test", m -> error(new RuntimeException("testEx")));
51+
assertSendErrorToCustomReporter(registry, createSource(CloudEvent::getType, cloudEvent));
52+
}
53+
54+
@Test
55+
void shouldResolveCorrectRawHandler() throws InterruptedException {
56+
final HandlerRegistry registry = HandlerRegistry.register()
57+
.listenDomainRawEvent("domain","app.event.test", m -> error(new RuntimeException("testEx")));
58+
assertSendErrorToCustomReporter(registry, createSource(CloudEvent::getType, cloudEvent));
59+
}
60+
3761
@Test
3862
void shouldContinueAfterReportError() throws InterruptedException {
3963
final HandlerRegistry handlerRegistry = HandlerRegistry.register()
@@ -44,7 +68,8 @@ void shouldContinueAfterReportError() throws InterruptedException {
4468
m -> Mono.fromRunnable(successSemaphore::release), DummyMessage.class
4569
);
4670

47-
assertContinueAfterSendErrorToCustomReporter(handlerRegistry, createSource(DomainEvent::getName, event1, event2));
71+
assertContinueAfterSendErrorToCustomReporter(handlerRegistry, createSource(DomainEvent::getName, event1,
72+
event2));
4873
}
4974

5075
@Override

async/async-rabbit/src/test/java/org/reactivecommons/async/rabbit/listeners/ListenerReporterTestSuperClass.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public abstract class ListenerReporterTestSuperClass {
6565
protected final CustomReporter errorReporter = mock(CustomReporter.class);
6666
protected final Semaphore semaphore = new Semaphore(0);
6767
protected final Semaphore successSemaphore = new Semaphore(0);
68-
private final ObjectMapper mapper = new ObjectMapper();
68+
private final ObjectMapper mapper = new DefaultObjectMapperSupplier().get();
6969
private final Receiver receiver = mock(Receiver.class);
7070
protected final ReactiveMessageListener reactiveMessageListener = new ReactiveMessageListener(
7171
receiver, topologyCreator
@@ -147,9 +147,15 @@ protected <T> Flux<AcknowledgableDelivery> createSource(Function<T, String> rout
147147
protected abstract GenericMessageListener createMessageListener(final HandlerResolver handlerResolver);
148148

149149
private HandlerResolver createHandlerResolver(final HandlerRegistry registry) {
150-
final Map<String, RegisteredEventListener<?, ?>> eventHandlers = Stream.concat(
151-
registry.getDynamicEventHandlers().stream(),
152-
registry.getDomainEventListeners().get(DEFAULT_DOMAIN).stream())
150+
Stream<RegisteredEventListener<?, ?>> listenerStream = Stream.concat(
151+
registry.getDynamicEventHandlers().stream(),
152+
registry.getDomainEventListeners().get(DEFAULT_DOMAIN).stream());
153+
if (registry.getDomainEventListeners().containsKey("domain")) {
154+
listenerStream = Stream.concat(
155+
listenerStream,
156+
registry.getDomainEventListeners().get("domain").stream());
157+
}
158+
final Map<String, RegisteredEventListener<?, ?>> eventHandlers = listenerStream
153159
.collect(toMap(RegisteredEventListener::getPath, identity()));
154160
final Map<String, RegisteredEventListener<?, ?>> eventsToBind = registry.getDomainEventListeners()
155161
.get(DEFAULT_DOMAIN).stream().collect(toMap(RegisteredEventListener::getPath, identity()));

starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/senders/GenericDomainEventBusTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.mockito.junit.jupiter.MockitoExtension;
99
import org.reactivecommons.api.domain.DomainEvent;
1010
import org.reactivecommons.api.domain.DomainEventBus;
11+
import org.reactivecommons.async.commons.communications.Message;
1112
import org.reactivecommons.async.starter.exceptions.InvalidConfigurationException;
1213
import reactor.core.publisher.Mono;
1314
import reactor.test.StepVerifier;
@@ -28,6 +29,8 @@ class GenericDomainEventBusTest {
2829
@Mock
2930
private CloudEvent cloudEvent;
3031
@Mock
32+
private Message rawMessage;
33+
@Mock
3134
private DomainEvent<?> domainEvent;
3235
private GenericDomainEventBus genericDomainEventBus;
3336

@@ -108,4 +111,27 @@ void shouldFailWhenNoDomainFoundWithCloudEvent() {
108111
.expectError(InvalidConfigurationException.class)
109112
.verify();
110113
}
114+
115+
@Test
116+
void shouldEmitRawEventWithSpecificDomain() {
117+
// Arrange
118+
when(domainEventBus2.emit(rawMessage)).thenReturn(Mono.empty());
119+
// Act
120+
Mono<Void> flow = Mono.from(genericDomainEventBus.emit(DOMAIN_2, rawMessage));
121+
// Assert
122+
StepVerifier.create(flow)
123+
.verifyComplete();
124+
verify(domainEventBus2).emit(rawMessage);
125+
}
126+
127+
@Test
128+
void shouldFailWhenNoDomainFoundEmittingRawEvent() {
129+
// Arrange
130+
// Act
131+
Mono<Void> flow = Mono.from(genericDomainEventBus.emit("another", rawMessage));
132+
// Assert
133+
StepVerifier.create(flow)
134+
.expectError(InvalidConfigurationException.class)
135+
.verify();
136+
}
111137
}

0 commit comments

Comments
 (0)