diff --git a/src/test/kotlin/com/example/demo/services/kafka/ProducerImplTest.kt b/src/test/kotlin/com/example/demo/services/kafka/ProducerImplTest.kt new file mode 100644 index 0000000..929d96e --- /dev/null +++ b/src/test/kotlin/com/example/demo/services/kafka/ProducerImplTest.kt @@ -0,0 +1,60 @@ +package com.example.demo.services.kafka + +import com.example.demo.models.Product +import com.example.demo.services.kafka.dto.ProductDto +import org.junit.runner.RunWith +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.whenever +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.mock.mockito.MockBean +import org.springframework.kafka.core.KafkaTemplate +import org.springframework.kafka.support.KafkaHeaders +import org.springframework.kafka.support.SendResult +import org.springframework.messaging.Message +import org.springframework.test.context.junit4.SpringRunner +import java.time.OffsetDateTime +import java.util.* +import java.util.concurrent.CompletableFuture +import kotlin.test.Test +import kotlin.test.assertEquals + +@RunWith(SpringRunner::class) +@SpringBootTest +class ProducerImplTest { + @Autowired + private lateinit var producerImpl: ProducerImpl + + @MockBean + private lateinit var kafkaTemplate: KafkaTemplate + + @Test + fun produceProductInfo_success() { + val topic = "some-topic" + val product = Product( + id = 123, + guid = UUID.randomUUID(), + name = "name", + description = null, + price = 10050, + createdAt = OffsetDateTime.now().minusDays(2), + updatedAt = OffsetDateTime.now().minusHours(1), + deletedAt = OffsetDateTime.now(), + ) + + val captor = argumentCaptor>() + + whenever(kafkaTemplate.send(captor.capture())) + .doReturn(CompletableFuture>()) + + producerImpl.produceProductInfo(topic, product) + + assertEquals(1, captor.allValues.count()) + val actualArgument = captor.firstValue + assertEquals(product.id, actualArgument.payload.id) + assertEquals(product.guid.toString(), actualArgument.payload.guid) + assertEquals(topic, actualArgument.headers[KafkaHeaders.TOPIC]) + assertEquals("some-custom-header", actualArgument.headers["X-Custom-Header"]) + } +} \ No newline at end of file