Skip to content

Commit bc48614

Browse files
authored
Fix bug #114 by adding @builder and @Jacksonized to KafkaMessageDto (#131)
1 parent 5021b7c commit bc48614

File tree

4 files changed

+78
-45
lines changed

4 files changed

+78
-45
lines changed

springwolf-plugins/springwolf-kafka-plugin/build.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,9 @@ dependencies {
3434
annotationProcessor 'org.projectlombok:lombok:1.18.24'
3535
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
3636

37+
testImplementation('org.springframework.boot:spring-boot-starter-web')
3738
testImplementation('org.springframework.boot:spring-boot-starter-test')
3839

39-
testImplementation 'org.projectlombok:lombok:1.18.24'
40-
testAnnotationProcessor 'org.projectlombok:lombok:1.18.24'
41-
4240
testImplementation 'org.assertj:assertj-core:3.23.1'
4341
}
4442

springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/dtos/KafkaMessageDto.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package io.github.stavshamir.springwolf.asyncapi.dtos;
22

3+
import lombok.Builder;
34
import lombok.Data;
5+
import lombok.extern.jackson.Jacksonized;
46

57
import java.util.Map;
68

9+
710
@Data
11+
@Builder
12+
@Jacksonized
813
public class KafkaMessageDto {
914

1015
private final Map<String, String> headers;
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
11
package io.github.stavshamir.springwolf.asyncapi;
22

3-
import io.github.stavshamir.springwolf.asyncapi.dtos.KafkaMessageDto;
43
import io.github.stavshamir.springwolf.producer.SpringwolfKafkaProducer;
54
import org.junit.jupiter.api.Test;
6-
import org.junit.jupiter.api.extension.ExtendWith;
75
import org.mockito.ArgumentCaptor;
86
import org.mockito.Captor;
9-
import org.mockito.InjectMocks;
10-
import org.mockito.Mock;
11-
import org.mockito.junit.jupiter.MockitoExtension;
12-
import org.springframework.http.HttpStatus;
13-
import org.springframework.web.server.ResponseStatusException;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
9+
import org.springframework.boot.test.mock.mockito.MockBean;
10+
import org.springframework.http.MediaType;
11+
import org.springframework.test.context.ContextConfiguration;
12+
import org.springframework.test.context.TestPropertySource;
13+
import org.springframework.test.web.servlet.MockMvc;
1414

15-
import java.util.Collections;
1615
import java.util.Map;
1716

17+
import static java.util.Collections.singletonMap;
1818
import static org.assertj.core.api.Assertions.assertThat;
19-
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
20-
import static org.mockito.Mockito.*;
21-
22-
@ExtendWith(MockitoExtension.class)
19+
import static org.mockito.ArgumentMatchers.eq;
20+
import static org.mockito.ArgumentMatchers.isNull;
21+
import static org.mockito.Mockito.verify;
22+
import static org.mockito.Mockito.verifyNoInteractions;
23+
import static org.mockito.Mockito.when;
24+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
25+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
26+
27+
@WebMvcTest(SpringwolfKafkaController.class)
28+
@ContextConfiguration(classes = {SpringwolfKafkaController.class, SpringwolfKafkaProducer.class})
29+
@TestPropertySource(properties = {"springwolf.plugin.kafka.publishing.enabled=true"})
2330
public class SpringwolfKafkaControllerTest {
2431

25-
@InjectMocks
26-
private SpringwolfKafkaController springwolfKafkaController;
32+
@Autowired
33+
private MockMvc mvc;
2734

28-
@Mock
35+
@MockBean
2936
private SpringwolfKafkaProducer springwolfKafkaProducer;
3037

3138
@Captor
@@ -37,57 +44,57 @@ public class SpringwolfKafkaControllerTest {
3744
@Test
3845
public void testControllerShouldReturnBadRequestIfPayloadIsEmpty() {
3946
try {
40-
springwolfKafkaController.publish("test-topic", new KafkaMessageDto(null, null));
41-
failBecauseExceptionWasNotThrown(ResponseStatusException.class);
42-
} catch (ResponseStatusException e) {
43-
assertThat(e.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST);
47+
String content = "{\"headers\": null, \"payload\": null }";
48+
mvc.perform(post("/springwolf/kafka/publish?topic=test-topic")
49+
.contentType(MediaType.APPLICATION_JSON)
50+
.content(content))
51+
.andExpect(status().isBadRequest());
52+
} catch (Exception e) {
4453
verifyNoInteractions(springwolfKafkaProducer);
4554
}
4655
}
4756

4857
@Test
49-
public void testControllerShouldReturnNotFoundIfNoKafkaProducerIsEnabled() {
58+
public void testControllerShouldReturnNotFoundIfNoKafkaProducerIsEnabled() throws Exception {
5059
when(springwolfKafkaProducer.isEnabled()).thenReturn(false);
5160

52-
Map<String, String> payload = Collections.singletonMap("some-key", "some-value");
53-
KafkaMessageDto messageToPublish = new KafkaMessageDto(null, payload);
54-
55-
try {
56-
springwolfKafkaController.publish("test-topic", messageToPublish);
57-
failBecauseExceptionWasNotThrown(ResponseStatusException.class);
58-
} catch (ResponseStatusException e) {
59-
assertThat(e.getStatus()).isEqualTo(HttpStatus.NOT_FOUND);
60-
}
61+
String content = "{\"headers\": null, \"payload\": { \"some-key\" : \"some-value\" }}";
62+
mvc.perform(post("/springwolf/kafka/publish?topic=test-topic")
63+
.contentType(MediaType.APPLICATION_JSON)
64+
.content(content))
65+
.andExpect(status().isNotFound());
6166
}
6267

6368
@Test
64-
public void testControllerShouldCallKafkaProducerIfOnlyPayloadIsSend() {
69+
public void testControllerShouldCallKafkaProducerIfOnlyPayloadIsSend() throws Exception {
6570
when(springwolfKafkaProducer.isEnabled()).thenReturn(true);
6671

67-
Map<String, String> payload = Collections.singletonMap("some-key", "some-value");
68-
KafkaMessageDto messageToPublish = new KafkaMessageDto(null, payload);
72+
String content = "{\"headers\": null, \"payload\": { \"some-key\" : \"some-value\" }}";
6973

70-
springwolfKafkaController.publish("test-topic", messageToPublish);
74+
mvc.perform(post("/springwolf/kafka/publish").param("topic", "test-topic")
75+
.contentType(MediaType.APPLICATION_JSON)
76+
.content(content))
77+
.andExpect(status().isOk());
7178

7279
verify(springwolfKafkaProducer).send(eq("test-topic"), isNull(), payloadCaptor.capture());
7380

74-
assertThat(payloadCaptor.getValue()).isEqualTo(payload);
81+
assertThat(payloadCaptor.getValue()).isEqualTo(singletonMap("some-key", "some-value"));
7582
}
7683

7784
@Test
78-
public void testControllerShouldCallKafkaProducerIfPayloadAndHeadersAreSend() {
85+
public void testControllerShouldCallKafkaProducerIfPayloadAndHeadersAreSend() throws Exception {
7986
when(springwolfKafkaProducer.isEnabled()).thenReturn(true);
8087

81-
Map<String, String> headers = Collections.singletonMap("some-header-key", "some-header-value");
82-
Map<String, String> payload = Collections.singletonMap("some-payload-key", "some-payload-value");
83-
84-
KafkaMessageDto messageToPublish = new KafkaMessageDto(headers, payload);
88+
String content = "{\"headers\": { \"some-header-key\" : \"some-header-value\" }, \"payload\": { \"some-payload-key\" : \"some-payload-value\" }}";
8589

86-
springwolfKafkaController.publish("test-topic", messageToPublish);
90+
mvc.perform(post("/springwolf/kafka/publish?topic=test-topic")
91+
.contentType(MediaType.APPLICATION_JSON)
92+
.content(content))
93+
.andExpect(status().isOk());
8794

8895
verify(springwolfKafkaProducer).send(eq("test-topic"), headerCaptor.capture(), payloadCaptor.capture());
8996

90-
assertThat(headerCaptor.getValue()).isEqualTo(headers);
91-
assertThat(payloadCaptor.getValue()).isEqualTo(payload);
97+
assertThat(headerCaptor.getValue()).isEqualTo(singletonMap("some-header-key", "some-header-value"));
98+
assertThat(payloadCaptor.getValue()).isEqualTo(singletonMap("some-payload-key", "some-payload-value"));
9299
}
93100
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.github.stavshamir.springwolf.asyncapi.dtos;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.io.IOException;
7+
8+
import static java.util.Collections.singletonMap;
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
public class KafkaMessageDtoDeserializationTest {
12+
13+
@Test
14+
public void testCanBeSerialized() throws IOException {
15+
String content = "{\"headers\": { \"some-header-key\" : \"some-header-value\" }, \"payload\": { \"some-payload-key\" : \"some-payload-value\" }}";
16+
17+
KafkaMessageDto value = new ObjectMapper().readValue(content, KafkaMessageDto.class);
18+
19+
assertThat(value).isNotNull();
20+
assertThat(value.getHeaders()).isEqualTo(singletonMap("some-header-key", "some-header-value"));
21+
assertThat(value.getPayload()).isEqualTo(singletonMap("some-payload-key", "some-payload-value"));
22+
}
23+
}

0 commit comments

Comments
 (0)