mirror of
https://github.com/Dannecron/spring-boot-demo.git
synced 2025-12-25 16:22:35 +03:00
move neko integration to sub-project
This commit is contained in:
7
edge-integration/build.gradle.kts
Normal file
7
edge-integration/build.gradle.kts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
dependencies {
|
||||||
|
implementation(rootProject.libs.springFramework.context)
|
||||||
|
implementation(rootProject.libs.ktor.client.cio)
|
||||||
|
implementation(rootProject.libs.ktor.client.core)
|
||||||
|
|
||||||
|
testImplementation(rootProject.libs.ktor.client.mock)
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.github.dannecron.demo.edgeintegration.client
|
||||||
|
|
||||||
|
import com.github.dannecron.demo.edgeintegration.client.dto.ImagesResponse
|
||||||
|
import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException
|
||||||
|
|
||||||
|
interface Client {
|
||||||
|
@Throws(RequestException::class)
|
||||||
|
fun getCategories(): Set<String>
|
||||||
|
|
||||||
|
@Throws(RequestException::class)
|
||||||
|
fun getImages(category: String, amount: Int): ImagesResponse
|
||||||
|
}
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
package com.github.dannecron.demo.services.neko
|
package com.github.dannecron.demo.edgeintegration.client
|
||||||
|
|
||||||
import com.github.dannecron.demo.services.neko.dto.CategoryFormat
|
import com.github.dannecron.demo.edgeintegration.client.dto.CategoryFormat
|
||||||
import com.github.dannecron.demo.services.neko.dto.ImagesResponse
|
import com.github.dannecron.demo.edgeintegration.client.dto.ImagesResponse
|
||||||
import com.github.dannecron.demo.services.neko.exceptions.RequestException
|
import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException
|
||||||
import io.ktor.client.*
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.engine.*
|
import io.ktor.client.engine.HttpClientEngine
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.request.get
|
||||||
import io.ktor.client.statement.*
|
import io.ktor.client.statement.bodyAsText
|
||||||
import io.ktor.http.*
|
import io.ktor.http.path
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
|
@Service
|
||||||
class ClientImpl(
|
class ClientImpl(
|
||||||
engine: HttpClientEngine,
|
engine: HttpClientEngine,
|
||||||
private val baseUrl: String,
|
private val baseUrl: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.dannecron.demo.services.neko.dto
|
package com.github.dannecron.demo.edgeintegration.client.dto
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.dannecron.demo.services.neko.dto
|
package com.github.dannecron.demo.edgeintegration.client.dto
|
||||||
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.github.dannecron.demo.services.neko.dto
|
package com.github.dannecron.demo.edgeintegration.client.dto
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
package com.github.dannecron.demo.services.neko.exceptions
|
package com.github.dannecron.demo.edgeintegration.client.exceptions
|
||||||
|
|
||||||
class RequestException(message: String): RuntimeException(message)
|
class RequestException(message: String): RuntimeException(message)
|
||||||
@@ -1,14 +1,21 @@
|
|||||||
package com.github.dannecron.demo.services.neko
|
package com.github.dannecron.demo.edgeintegration.client
|
||||||
|
|
||||||
import com.github.dannecron.demo.BaseUnitTest
|
import com.github.dannecron.demo.edgeintegration.client.exceptions.RequestException
|
||||||
import com.github.dannecron.demo.services.neko.exceptions.RequestException
|
import io.ktor.client.engine.mock.MockEngine
|
||||||
import io.ktor.client.engine.mock.*
|
import io.ktor.client.engine.mock.respond
|
||||||
import io.ktor.http.*
|
import io.ktor.http.HttpHeaders
|
||||||
import io.ktor.utils.io.*
|
import io.ktor.http.HttpStatusCode
|
||||||
|
import io.ktor.http.headersOf
|
||||||
|
import io.ktor.utils.io.ByteReadChannel
|
||||||
import org.junit.jupiter.api.assertThrows
|
import org.junit.jupiter.api.assertThrows
|
||||||
import kotlin.test.*
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertContains
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertNotNull
|
||||||
|
import kotlin.test.assertNull
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
class ClientImplTest: BaseUnitTest() {
|
class ClientImplTest {
|
||||||
@Test
|
@Test
|
||||||
fun getCategories_success() {
|
fun getCategories_success() {
|
||||||
val mockEngine = MockEngine { req ->
|
val mockEngine = MockEngine { req ->
|
||||||
@@ -23,19 +23,21 @@ micrometer-registry-prometheus = { module = "io.micrometer:micrometer-registry-p
|
|||||||
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.4.0" }
|
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.4.0" }
|
||||||
otel-exporter = { module = "io.opentelemetry:opentelemetry-exporter-otlp" }
|
otel-exporter = { module = "io.opentelemetry:opentelemetry-exporter-otlp" }
|
||||||
postgres = { module = "org.postgresql:postgresql", version = "42.7.5" }
|
postgres = { module = "org.postgresql:postgresql", version = "42.7.5" }
|
||||||
spring-aspects = { module = "org.springframework:spring-aspects" }
|
springFramework-context = { module = "org.springframework:spring-context"}
|
||||||
spring-boot-devtools = { module = "org.springframework.boot:spring-boot-devtools" }
|
springFramework-aspects = { module = "org.springframework:spring-aspects" }
|
||||||
spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "spring-boot" }
|
springBoot-devtools = { module = "org.springframework.boot:spring-boot-devtools" }
|
||||||
spring-boot-starter-actuatorAutoconfigure = { module = "org.springframework.boot:spring-boot-actuator-autoconfigure" }
|
springBoot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator", version.ref = "spring-boot" }
|
||||||
spring-boot-starter-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot"}
|
springBoot-starter-actuatorAutoconfigure = { module = "org.springframework.boot:spring-boot-actuator-autoconfigure" }
|
||||||
spring-boot-starter-mustache = { module = "org.springframework.boot:spring-boot-starter-mustache", version.ref = "spring-boot" }
|
springBoot-starter-jdbc = { module = "org.springframework.boot:spring-boot-starter-data-jdbc", version.ref = "spring-boot"}
|
||||||
spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" }
|
springBoot-starter-mustache = { module = "org.springframework.boot:spring-boot-starter-mustache", version.ref = "spring-boot" }
|
||||||
spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation", version.ref = "spring-boot" }
|
springBoot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" }
|
||||||
spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot" }
|
springBoot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation", version.ref = "spring-boot" }
|
||||||
spring-cloud-starter-streamKafka = { module = "org.springframework.cloud:spring-cloud-starter-stream-kafka", version.ref = "spring-cloud"}
|
springBoot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web", version.ref = "spring-boot" }
|
||||||
spring-cloud-stream = { module = "org.springframework.cloud:spring-cloud-stream", version.ref = "spring-cloud"}
|
springCloud-starter-streamKafka = { module = "org.springframework.cloud:spring-cloud-starter-stream-kafka", version.ref = "spring-cloud"}
|
||||||
spring-cloud-streamTestBinder = { module = "org.springframework.cloud:spring-cloud-stream-test-binder", version.ref = "spring-cloud"}
|
springCloud-stream = { module = "org.springframework.cloud:spring-cloud-stream", version.ref = "spring-cloud"}
|
||||||
spring-doc-openapi-starter = "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0"
|
springCloud-streamTestBinder = { module = "org.springframework.cloud:spring-cloud-stream-test-binder", version.ref = "spring-cloud"}
|
||||||
|
springData-commons = { module = "org.springframework.data:spring-data-commons", version.ref = "spring-boot" }
|
||||||
|
springDoc-openapi-starter = "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0"
|
||||||
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers"}
|
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers"}
|
||||||
testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers"}
|
testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers"}
|
||||||
testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers"}
|
testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers"}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
package com.github.dannecron.demo.services.neko
|
|
||||||
|
|
||||||
import com.github.dannecron.demo.services.neko.dto.ImagesResponse
|
|
||||||
import com.github.dannecron.demo.services.neko.exceptions.RequestException
|
|
||||||
import org.springframework.stereotype.Service
|
|
||||||
|
|
||||||
@Service
|
|
||||||
interface Client {
|
|
||||||
@Throws(RequestException::class)
|
|
||||||
fun getCategories(): Set<String>
|
|
||||||
|
|
||||||
@Throws(RequestException::class)
|
|
||||||
fun getImages(category: String, amount: Int): ImagesResponse
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user