add schema validator

use ConfigurationProperties instead of Value for configuration
This commit is contained in:
Denis Savosin
2024-10-04 17:59:08 +07:00
parent f58a99a68d
commit ea77bf8b61
11 changed files with 178 additions and 21 deletions

View File

@@ -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"),
),
)
}
}

View File

@@ -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())