Skip to content

Commit 0366964

Browse files
committed
build(sonar): Fix some sonar issues and add unit tests
1 parent b2816df commit 0366964

File tree

8 files changed

+193
-26
lines changed

8 files changed

+193
-26
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.reactivecommons.async.kafka;
2+
3+
import io.cloudevents.CloudEvent;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mockito.Mock;
7+
import org.mockito.junit.jupiter.MockitoExtension;
8+
import org.reactivecommons.api.domain.Command;
9+
import org.reactivecommons.async.api.AsyncQuery;
10+
import org.reactivecommons.async.api.DirectAsyncGateway;
11+
import org.reactivecommons.async.api.From;
12+
13+
import static org.junit.jupiter.api.Assertions.assertThrows;
14+
15+
@ExtendWith(MockitoExtension.class)
16+
class KafkaDirectAsyncGatewayTest {
17+
private final DirectAsyncGateway directAsyncGateway = new KafkaDirectAsyncGateway();
18+
private final String targetName = "targetName";
19+
private final String domain = "domain";
20+
private final long delay = 1000L;
21+
@Mock
22+
private CloudEvent cloudEvent;
23+
@Mock
24+
private Command<String> command;
25+
@Mock
26+
private AsyncQuery<String> query;
27+
@Mock
28+
private From from;
29+
30+
@Test
31+
void allMethodsAreNotImplemented() {
32+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(cloudEvent, targetName));
33+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(cloudEvent, targetName, domain));
34+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(cloudEvent, targetName, delay));
35+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(cloudEvent, targetName, delay, domain));
36+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(command, targetName));
37+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(command, targetName, domain));
38+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(command, targetName, delay));
39+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.sendCommand(command, targetName, delay, domain));
40+
41+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.requestReply(cloudEvent, targetName, CloudEvent.class));
42+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.requestReply(cloudEvent, targetName, CloudEvent.class, domain));
43+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.requestReply(query, targetName, CloudEvent.class));
44+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.requestReply(query, targetName, CloudEvent.class, domain));
45+
46+
assertThrows(UnsupportedOperationException.class, () -> directAsyncGateway.reply(targetName, from));
47+
}
48+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.reactivecommons.async.kafka;
2+
3+
import io.cloudevents.CloudEvent;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mockito.InjectMocks;
7+
import org.mockito.Mock;
8+
import org.mockito.junit.jupiter.MockitoExtension;
9+
import org.reactivecommons.api.domain.DomainEvent;
10+
import org.reactivecommons.async.kafka.communications.ReactiveMessageSender;
11+
import reactor.core.publisher.Mono;
12+
import reactor.test.StepVerifier;
13+
14+
import static org.junit.jupiter.api.Assertions.assertThrows;
15+
import static org.mockito.Mockito.when;
16+
17+
@ExtendWith(MockitoExtension.class)
18+
class KafkaDomainEventBusTest {
19+
@Mock
20+
private DomainEvent<String> domainEvent;
21+
@Mock
22+
private CloudEvent cloudEvent;
23+
@Mock
24+
private ReactiveMessageSender sender;
25+
@InjectMocks
26+
private KafkaDomainEventBus kafkaDomainEventBus;
27+
private final String domain = "domain";
28+
29+
@Test
30+
void shouldEmitDomainEvent() {
31+
// Arrange
32+
when(sender.send(domainEvent)).thenReturn(Mono.empty());
33+
// Act
34+
Mono<Void> flow = Mono.from(kafkaDomainEventBus.emit(domainEvent));
35+
// Assert
36+
StepVerifier.create(flow)
37+
.verifyComplete();
38+
}
39+
40+
@Test
41+
void shouldEmitCloudEvent() {
42+
// Arrange
43+
when(sender.send(cloudEvent)).thenReturn(Mono.empty());
44+
// Act
45+
Mono<Void> flow = Mono.from(kafkaDomainEventBus.emit(cloudEvent));
46+
// Assert
47+
StepVerifier.create(flow)
48+
.verifyComplete();
49+
}
50+
51+
@Test
52+
void operationsShouldNotBeAbleForDomains() {
53+
assertThrows(UnsupportedOperationException.class, () -> kafkaDomainEventBus.emit(domain, domainEvent));
54+
assertThrows(UnsupportedOperationException.class, () -> kafkaDomainEventBus.emit(domain, cloudEvent));
55+
}
56+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.reactivecommons.async.rabbit;
2+
3+
import io.cloudevents.CloudEvent;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.extension.ExtendWith;
7+
import org.mockito.Mock;
8+
import org.mockito.junit.jupiter.MockitoExtension;
9+
import org.reactivecommons.api.domain.DomainEvent;
10+
import org.reactivecommons.async.rabbit.communications.ReactiveMessageSender;
11+
import reactor.core.publisher.Mono;
12+
import reactor.test.StepVerifier;
13+
14+
import static org.junit.jupiter.api.Assertions.assertThrows;
15+
import static org.mockito.ArgumentMatchers.any;
16+
import static org.mockito.ArgumentMatchers.anyBoolean;
17+
import static org.mockito.ArgumentMatchers.anyString;
18+
import static org.mockito.Mockito.when;
19+
20+
@ExtendWith(MockitoExtension.class)
21+
class RabbitDomainEventBusTest {
22+
@Mock
23+
private DomainEvent<String> domainEvent;
24+
@Mock
25+
private CloudEvent cloudEvent;
26+
@Mock
27+
private ReactiveMessageSender sender;
28+
private RabbitDomainEventBus rabbitDomainEventBus;
29+
private final String domain = "domain";
30+
31+
@BeforeEach
32+
void setUp() {
33+
rabbitDomainEventBus = new RabbitDomainEventBus(sender, "exchange");
34+
}
35+
36+
@Test
37+
void shouldEmitDomainEvent() {
38+
// Arrange
39+
when(domainEvent.getName()).thenReturn("event");
40+
when(sender.sendWithConfirm(any(DomainEvent.class), anyString(), anyString(), any(), anyBoolean()))
41+
.thenReturn(Mono.empty());
42+
// Act
43+
Mono<Void> flow = Mono.from(rabbitDomainEventBus.emit(domainEvent));
44+
// Assert
45+
StepVerifier.create(flow)
46+
.verifyComplete();
47+
}
48+
49+
@Test
50+
void shouldEmitCloudEvent() {
51+
// Arrange
52+
when(cloudEvent.getType()).thenReturn("event");
53+
when(sender.sendWithConfirm(any(CloudEvent.class), anyString(), anyString(), any(), anyBoolean()))
54+
.thenReturn(Mono.empty());
55+
// Act
56+
Mono<Void> flow = Mono.from(rabbitDomainEventBus.emit(cloudEvent));
57+
// Assert
58+
StepVerifier.create(flow)
59+
.verifyComplete();
60+
}
61+
62+
@Test
63+
void operationsShouldNotBeAbleForDomains() {
64+
assertThrows(UnsupportedOperationException.class, () -> rabbitDomainEventBus.emit(domain, domainEvent));
65+
assertThrows(UnsupportedOperationException.class, () -> rabbitDomainEventBus.emit(domain, cloudEvent));
66+
}
67+
}

starters/async-commons-starter/src/main/java/org/reactivecommons/async/starter/props/GenericAsyncPropsDomain.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
5-
import lombok.EqualsAndHashCode;
65
import lombok.Getter;
76
import lombok.Setter;
87
import lombok.SneakyThrows;
@@ -34,7 +33,7 @@ public GenericAsyncPropsDomain(String defaultAppName,
3433
ObjectMapper mapper = new ObjectMapper();
3534
mapper.registerModule(new JavaTimeModule());
3635
this.computeIfAbsent(DEFAULT_DOMAIN, k -> {
37-
T defaultApp = GenericAsyncPropsDomain.instantiate(asyncPropsClass);
36+
T defaultApp = AsyncPropsDomainBuilder.instantiate(asyncPropsClass);
3837
defaultApp.setConnectionProperties(mapper.convertValue(defaultProperties, propsClass));
3938
return defaultApp;
4039
});
@@ -81,11 +80,10 @@ public T getProps(String domain) {
8180
P,
8281
X extends GenericAsyncPropsDomainProperties<T, P>,
8382
R extends GenericAsyncPropsDomain<T, P>>
84-
AsyncPropsDomainBuilder<T, P, X, R> builder(Class<T> asyncPropsClass,
85-
Class<P> propsClass,
83+
AsyncPropsDomainBuilder<T, P, X, R> builder(Class<P> propsClass,
8684
Class<X> asyncPropsDomainClass,
8785
Constructor<R> returnType) {
88-
return new AsyncPropsDomainBuilder<>(asyncPropsClass, propsClass, asyncPropsDomainClass, returnType);
86+
return new AsyncPropsDomainBuilder<>(propsClass, asyncPropsDomainClass, returnType);
8987
}
9088

9189
public static class AsyncPropsDomainBuilder<
@@ -101,7 +99,7 @@ public static class AsyncPropsDomainBuilder<
10199
private P defaultProperties;
102100
private SecretFiller<P> secretFiller;
103101

104-
public AsyncPropsDomainBuilder(Class<T> asynPropsClass, Class<P> propsClass, Class<X> asyncPropsDomainClass,
102+
public AsyncPropsDomainBuilder(Class<P> propsClass, Class<X> asyncPropsDomainClass,
105103
Constructor<R> returnType) {
106104
this.propsClass = propsClass;
107105
this.asyncPropsDomainClass = asyncPropsDomainClass;
@@ -139,16 +137,16 @@ public R build() {
139137
return returnType.newInstance(defaultAppName, defaultProperties, domainProperties, secretFiller);
140138
}
141139

142-
}
140+
@SneakyThrows
141+
private static <X> X instantiate(Class<X> xClass) {
142+
return xClass.getDeclaredConstructor().newInstance();
143+
}
143144

144-
@SneakyThrows
145-
private static <X> X instantiate(Class<X> xClass) {
146-
return xClass.getDeclaredConstructor().newInstance();
147-
}
145+
@SneakyThrows
146+
private static <X> X instantiate(Class<X> xClass, Map<?, ?> arg) {
147+
return xClass.getDeclaredConstructor(Map.class).newInstance(arg);
148+
}
148149

149-
@SneakyThrows
150-
private static <X> X instantiate(Class<X> xClass, Map<?, ?> arg) {
151-
return xClass.getDeclaredConstructor(Map.class).newInstance(arg);
152150
}
153151

154152
public interface SecretFiller<P> {

starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/mybroker/MyBrokerProvider.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,27 @@ public DirectAsyncGateway getDirectAsyncGateway(HandlerResolver resolver) {
3333

3434
@Override
3535
public void listenDomainEvents(HandlerResolver resolver) {
36-
36+
// for testing purposes
3737
}
3838

3939
@Override
4040
public void listenNotificationEvents(HandlerResolver resolver) {
41-
41+
// for testing purposes
4242
}
4343

4444
@Override
4545
public void listenCommands(HandlerResolver resolver) {
46-
46+
// for testing purposes
4747
}
4848

4949
@Override
5050
public void listenQueries(HandlerResolver resolver) {
51-
51+
// for testing purposes
5252
}
5353

5454
@Override
5555
public void listenReplies(HandlerResolver resolver) {
56-
56+
// for testing purposes
5757
}
5858

5959
@Override

starters/async-commons-starter/src/test/java/org/reactivecommons/async/starter/props/GenericAsyncPropsDomainTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import org.junit.jupiter.api.Test;
44
import org.reactivecommons.async.starter.exceptions.InvalidConfigurationException;
5+
import org.reactivecommons.async.starter.mybroker.MyBrokerSecretFiller;
56
import org.reactivecommons.async.starter.mybroker.props.AsyncMyBrokerPropsDomainProperties;
67
import org.reactivecommons.async.starter.mybroker.props.MyBrokerAsyncProps;
7-
import org.reactivecommons.async.starter.mybroker.props.MyBrokerConnProps;
88
import org.reactivecommons.async.starter.mybroker.props.MyBrokerAsyncPropsDomain;
9-
import org.reactivecommons.async.starter.mybroker.MyBrokerSecretFiller;
9+
import org.reactivecommons.async.starter.mybroker.props.MyBrokerConnProps;
1010

1111
import java.lang.reflect.Constructor;
1212

@@ -47,7 +47,7 @@ void shouldCreatePropsWithDefaultConnectionProperties() {
4747
String defaultAppName = "sample";
4848
MyBrokerConnProps defaultMyBrokerProps = new MyBrokerConnProps();
4949
MyBrokerAsyncProps propsConfigured = new MyBrokerAsyncProps();
50-
MyBrokerAsyncPropsDomain propsDomain = MyBrokerAsyncPropsDomain.builder(MyBrokerAsyncProps.class, MyBrokerConnProps.class,
50+
MyBrokerAsyncPropsDomain propsDomain = MyBrokerAsyncPropsDomain.builder(MyBrokerConnProps.class,
5151
AsyncMyBrokerPropsDomainProperties.class,
5252
(Constructor<MyBrokerAsyncPropsDomain>) MyBrokerAsyncPropsDomain.class.getDeclaredConstructors()[0])
5353
.withDefaultAppName(defaultAppName)

starters/async-kafka-starter/src/main/java/org/reactivecommons/async/kafka/config/props/AsyncKafkaPropsDomain.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ public AsyncKafkaPropsDomain(@Value("${spring.application.name}") String default
2323
@SuppressWarnings("unchecked")
2424
public static AsyncPropsDomainBuilder<AsyncKafkaProps, KafkaProperties, AsyncKafkaPropsDomainProperties,
2525
AsyncKafkaPropsDomain> builder() {
26-
return GenericAsyncPropsDomain.builder(AsyncKafkaProps.class,
27-
KafkaProperties.class,
26+
return GenericAsyncPropsDomain.builder(KafkaProperties.class,
2827
AsyncKafkaPropsDomainProperties.class,
2928
(Constructor<AsyncKafkaPropsDomain>) AsyncKafkaPropsDomain.class.getDeclaredConstructors()[0]);
3029
}

starters/async-rabbit-starter/src/main/java/org/reactivecommons/async/rabbit/config/props/AsyncPropsDomain.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ public AsyncPropsDomain(@Value("${spring.application.name}") String defaultAppNa
2222
@SuppressWarnings("unchecked")
2323
public static AsyncPropsDomainBuilder<AsyncProps, RabbitProperties, AsyncRabbitPropsDomainProperties,
2424
AsyncPropsDomain> builder() {
25-
return GenericAsyncPropsDomain.builder(AsyncProps.class,
26-
RabbitProperties.class,
25+
return GenericAsyncPropsDomain.builder(RabbitProperties.class,
2726
AsyncRabbitPropsDomainProperties.class,
2827
(Constructor<AsyncPropsDomain>) AsyncPropsDomain.class.getDeclaredConstructors()[0]);
2928
}

0 commit comments

Comments
 (0)