mirror of
https://github.com/Dannecron/spring-boot-demo.git
synced 2025-12-26 00:32:34 +03:00
add schema validator
use ConfigurationProperties instead of Value for configuration
This commit is contained in:
@@ -1,9 +1,33 @@
|
||||
package com.example.demo
|
||||
|
||||
import com.example.demo.config.KafkaProperties
|
||||
import com.example.demo.services.kafka.Consumer
|
||||
import org.springframework.boot.test.context.TestConfiguration
|
||||
import org.springframework.boot.test.mock.mockito.MockBean
|
||||
import org.springframework.context.annotation.Bean
|
||||
|
||||
open class BaseUnitTest {
|
||||
@MockBean
|
||||
lateinit var consumer: Consumer
|
||||
|
||||
@TestConfiguration
|
||||
class TestConfig {
|
||||
@Bean
|
||||
fun kafkaProperties(): KafkaProperties = KafkaProperties(
|
||||
bootstrapServers = "localhost:1111",
|
||||
producer = KafkaProperties.Producer(
|
||||
product = KafkaProperties.Producer.Product(
|
||||
defaultSyncTopic = "some-default",
|
||||
),
|
||||
),
|
||||
consumer = KafkaProperties.Consumer(
|
||||
groupId = "group",
|
||||
topics = "topic",
|
||||
autoStartup = false,
|
||||
),
|
||||
validation = KafkaProperties.Validation(
|
||||
schema = mapOf("product-sync" to "foo"),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,9 @@ import com.example.demo.BaseUnitTest
|
||||
import com.example.demo.models.Product
|
||||
import com.example.demo.services.kafka.dto.ProductDto
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.encodeToJsonElement
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.kotlin.argumentCaptor
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.whenever
|
||||
import org.mockito.kotlin.*
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.boot.test.mock.mockito.MockBean
|
||||
@@ -31,6 +30,9 @@ class ProducerImplTest: BaseUnitTest() {
|
||||
@MockBean
|
||||
private lateinit var kafkaTemplate: KafkaTemplate<String, Any>
|
||||
|
||||
@MockBean
|
||||
private lateinit var schemaValidator: SchemaValidator
|
||||
|
||||
@Test
|
||||
fun produceProductInfo_success() {
|
||||
val topic = "some-topic"
|
||||
@@ -50,6 +52,12 @@ class ProducerImplTest: BaseUnitTest() {
|
||||
whenever(kafkaTemplate.send(captor.capture()))
|
||||
.doReturn(CompletableFuture<SendResult<String, Any>>())
|
||||
|
||||
whenever(schemaValidator.validate(
|
||||
eq("product-sync"),
|
||||
eq(Json.encodeToJsonElement(product))
|
||||
))
|
||||
.doAnswer { }
|
||||
|
||||
producerImpl.produceProductInfo(topic, product)
|
||||
|
||||
assertEquals(1, captor.allValues.count())
|
||||
|
||||
Reference in New Issue
Block a user