Skip to content

Commit

Permalink
test: order-service messaging provider test
Browse files Browse the repository at this point in the history
  • Loading branch information
jangjunha committed Sep 14, 2023
1 parent f2083ff commit 4dc11e5
Show file tree
Hide file tree
Showing 6 changed files with 161 additions and 0 deletions.
8 changes: 8 additions & 0 deletions ftgo-order-service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ dependencies {
testImplementation 'org.jetbrains.kotlin:kotlin-test'
testImplementation "io.eventuate.tram.core:eventuate-tram-test-util"
testImplementation "io.eventuate.tram.sagas:eventuate-tram-sagas-spring-testing-support"
testImplementation 'au.com.dius.pact.provider:junit5spring:4.6.2'
testImplementation(project(':ftgo-pact')) {
capabilities {
requireCapability("me.jangjunha.ftgo:ftgo-pact-provider")
}
}
testImplementation 'io.eventuate.tram.core:eventuate-tram-spring-in-memory'
testRuntimeOnly 'com.h2database:h2'

integrationTestImplementation 'io.eventuate.tram.core:eventuate-tram-spring-in-memory'
integrationTestImplementation ("org.springframework.boot:spring-boot-starter-test:$springBootVersion") {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package me.jangjunha.ftgo.order_service

import au.com.dius.pact.core.model.Interaction
import au.com.dius.pact.core.model.Pact
import au.com.dius.pact.provider.MessageAndMetadata
import au.com.dius.pact.provider.PactVerifyProvider
import au.com.dius.pact.provider.junit5.MessageTestTarget
import au.com.dius.pact.provider.junit5.PactVerificationContext
import au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider
import au.com.dius.pact.provider.junitsupport.Provider
import au.com.dius.pact.provider.junitsupport.loader.PactBroker
import au.com.dius.pact.provider.junitsupport.loader.PactFilter
import io.eventuate.common.json.mapper.JSonMapper
import me.jangjunha.ftgo.common.Money
import me.jangjunha.ftgo.order_service.api.OrderDetails
import me.jangjunha.ftgo.order_service.api.events.OrderAuthorized
import me.jangjunha.ftgo.order_service.api.events.OrderCreated
import me.jangjunha.ftgo.order_service.api.events.OrderRejected
import me.jangjunha.ftgo.pact.provider.junitsupport.filter.ByInteractionType
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.TestTemplate
import org.junit.jupiter.api.extension.ExtendWith
import java.util.*


@Provider("ftgo-order-service")
@PactFilter(value = ["Message"], filter = ByInteractionType::class)
@PactBroker(url = "https://pact.ftgo.jangjunha.me/")
class OrderMessagingPactProviderTest {

@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider::class)
fun testTemplate(pact: Pact, interaction: Interaction, context: PactVerificationContext) {
context.verifyInteraction()
}

@BeforeEach
fun setUp(context: PactVerificationContext) {
context.target = MessageTestTarget()
}

@PactVerifyProvider("`OrderCreated` event")
fun orderCreatedEvent(): MessageAndMetadata {
val event = OrderCreated(
OrderDetails(
listOf(
OrderDetails.LineItem(2, "americano", "Americano", Money("2500")),
),
Money("5000"),
UUID.fromString("97e3c4c2-f336-4435-9314-ad1a633495df"),
UUID.fromString("627a9a8a-41af-4daf-a968-00ffc80b53ad")
),
"서울시 강남구 테헤란로 1",
"A Cafe"
)
return MessageAndMetadata(
JSonMapper.toJson(event).toByteArray(),
mapOf(
Pair("event-type", "me.jangjunha.ftgo.order_service.api.events.OrderCreated"),
Pair("event-aggregate-type", "me.jangjunha.ftgo.order_service.domain.Order"),
Pair("event-aggregate-id", "6f2d06a3-5dd2-4096-8644-6084d64eae35"),
Pair("ID", ""),
),
)
}

@PactVerifyProvider("`OrderAuthorized` event")
fun orderAuthorizedEvent(): MessageAndMetadata {
val event = OrderAuthorized()
return MessageAndMetadata(
JSonMapper.toJson(event).toByteArray(),
mapOf(
Pair("event-type", "me.jangjunha.ftgo.order_service.api.events.OrderAuthorized"),
Pair("event-aggregate-type", "me.jangjunha.ftgo.order_service.domain.Order"),
Pair("event-aggregate-id", "6f2d06a3-5dd2-4096-8644-6084d64eae35"),
Pair("ID", ""),
),
)
}

@PactVerifyProvider("`OrderRejected` event")
fun orderRejectedEvent(): MessageAndMetadata {
val event = OrderRejected()
return MessageAndMetadata(
JSonMapper.toJson(event).toByteArray(),
mapOf(
Pair("event-type", "me.jangjunha.ftgo.order_service.api.events.OrderRejected"),
Pair("event-aggregate-type", "me.jangjunha.ftgo.order_service.domain.Order"),
Pair("event-aggregate-id", "6f2d06a3-5dd2-4096-8644-6084d64eae35"),
Pair("ID", ""),
),
)
}
}
9 changes: 9 additions & 0 deletions ftgo-order-service/src/test/resources/application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
spring:
datasource:
url: jdbc:h2:mem:db
driver-class-name: org.h2.Driver
grpc:
server:
port: 0
pactbroker:
url: https://pact.ftgo.jangjunha.me/
25 changes: 25 additions & 0 deletions ftgo-pact/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
plugins {
`java-library`
id("org.jetbrains.kotlin.jvm")
}

group = "me.jangjunha.ftgo"
version = "unspecified"

java {
registerFeature("provider") {
usingSourceSet(sourceSets["main"])
}
}

repositories {
mavenCentral()
}

dependencies {
"providerApi"("au.com.dius.pact:provider:4.6.2")
}

tasks.test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package me.jangjunha.ftgo.pact.provider.junitsupport.filter

import au.com.dius.pact.core.model.Interaction
import au.com.dius.pact.core.model.SynchronousRequestResponse
import au.com.dius.pact.core.model.V4Interaction
import au.com.dius.pact.core.model.messaging.Message
import au.com.dius.pact.provider.junitsupport.filter.InteractionFilter
import java.util.function.Predicate

class ByInteractionType<I : Interaction> : InteractionFilter<I> {
override fun buildPredicate(values: Array<String>): Predicate<I> {
return Predicate { interaction: I ->
values.any { value ->
when (value) {
"Http" -> interaction is SynchronousRequestResponse
"V4Http" -> interaction is V4Interaction.SynchronousHttp
"Message" -> interaction is Message
else -> false
}
}
}
}
}
2 changes: 2 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ include 'ftgo-order-service'
include 'eventuate-tram-producer-kafka'
include 'ftgo-order-history-service'
include 'ftgo-api-gateway'
include 'ftgo-pact'

0 comments on commit 4dc11e5

Please sign in to comment.