Skip to content

Commit

Permalink
test: add missing kitchen command pacts on order services
Browse files Browse the repository at this point in the history
  • Loading branch information
jangjunha committed Sep 15, 2023
1 parent 42bd744 commit 2135451
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,11 @@ class SagaMessagingTestHelper(
private val idGenerator: IdGenerator,
) {

fun <C : Command, R : Any> sendAndReceiveCommand(
fun <C : Command> sendCommand(
commandEndpoint: CommandEndpoint<C>,
command: C,
replyClass: Class<R>,
sagaType: String
): R {
) {
val sagaId = idGenerator.genId().asString()

val replyTo = "$sagaType-reply"
Expand All @@ -37,7 +36,17 @@ class SagaMessagingTestHelper(
),
replyTo
)
}

fun <C : Command, R : Any> sendAndReceiveCommand(
commandEndpoint: CommandEndpoint<C>,
command: C,
replyClass: Class<R>,
sagaType: String
): R {
sendCommand(commandEndpoint, command, sagaType)

val replyTo = "$sagaType-reply"
val response = messageReceiver.receive(replyTo)
return JSonMapper.fromJson(response.payload, replyClass)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import me.jangjunha.ftgo.eventuate.tram.testutil.MessageReceiver
import me.jangjunha.ftgo.eventuate.tram.testutil.SagaMessagingTestHelper
import me.jangjunha.ftgo.kitchen_service.api.CreateTicketReply
import me.jangjunha.ftgo.kitchen_service.api.TicketDetails
import me.jangjunha.ftgo.kitchen_service.api.commands.CancelCreateTicket
import me.jangjunha.ftgo.kitchen_service.api.commands.ConfirmCreateTicket
import me.jangjunha.ftgo.kitchen_service.api.commands.CreateTicket
import me.jangjunha.ftgo.order_service.sagas.createorder.CreateOrderSaga
import org.junit.jupiter.api.Test
Expand Down Expand Up @@ -126,6 +128,90 @@ class KitchenServiceProxyPactTest {
assert(reply == expectedReply)
}

@Pact(consumer = "ftgo-order-service")
fun confirmCreateTicketCommand(builder: SynchronousMessagePactBuilder): V4Pact = builder
.given("the ticket")
.expectsToReceive("confirmed reply")
.withRequest { request ->
request
.withMetadata { metadata ->
metadata
.add("command_type", "me.jangjunha.ftgo.kitchen_service.api.commands.ConfirmCreateTicket")
.add("command_saga_type", "me.jangjunha.ftgo.order_service.sagas.createorder.CreateOrderSaga")
.add("command_saga_id", Matchers.uuid())
.add(
"command_reply_to",
"me.jangjunha.ftgo.order_service.sagas.createorder.CreateOrderSaga-Reply"
)
.add("ID", "")
}
.withContent(PactDslJsonBody().uuid("ticketId", "6f2d06a3-5dd2-4096-8644-6084d64eae35"))
}
.withResponse { response ->
response
.withMetadata { metadata ->
metadata
.add("reply_outcome-type", "SUCCESS")
}
}
.toPact()

@Test
@PactTestFor(pactMethod = "confirmCreateTicketCommand")
fun testConfirmCreateTicketCommand(message: V4Interaction.SynchronousMessages) {
val command = ConfirmCreateTicket(UUID.fromString("6f2d06a3-5dd2-4096-8644-6084d64eae35"))
val sagaType = CreateOrderSaga::class.java.name
every { messageReceiver.receive(eq("$sagaType-reply")) }.returns(buildMessage(message.response[0]))

sagaMessagingTestHelper.sendCommand(
KitchenServiceProxy.confirm,
command,
sagaType
)
}

@Pact(consumer = "ftgo-order-service")
fun cancelCreateTicketCommand(builder: SynchronousMessagePactBuilder): V4Pact = builder
.given("the ticket")
.expectsToReceive("cancelled reply")
.withRequest { request ->
request
.withMetadata { metadata ->
metadata
.add("command_type", "me.jangjunha.ftgo.kitchen_service.api.commands.CancelCreateTicket")
.add("command_saga_type", "me.jangjunha.ftgo.order_service.sagas.createorder.CreateOrderSaga")
.add("command_saga_id", Matchers.uuid())
.add(
"command_reply_to",
"me.jangjunha.ftgo.order_service.sagas.createorder.CreateOrderSaga-Reply"
)
.add("ID", "")
}
.withContent(PactDslJsonBody().uuid("ticketId", "6f2d06a3-5dd2-4096-8644-6084d64eae35"))
}
.withResponse { response ->
response
.withMetadata { metadata ->
metadata
.add("reply_outcome-type", "SUCCESS")
}
}
.toPact()

@Test
@PactTestFor(pactMethod = "cancelCreateTicketCommand")
fun testCancelCreateTicketCommand(message: V4Interaction.SynchronousMessages) {
val command = CancelCreateTicket(UUID.fromString("6f2d06a3-5dd2-4096-8644-6084d64eae35"))
val sagaType = CreateOrderSaga::class.java.name
every { messageReceiver.receive(eq("$sagaType-reply")) }.returns(buildMessage(message.response[0]))

sagaMessagingTestHelper.sendCommand(
KitchenServiceProxy.cancel,
command,
sagaType
)
}

private fun buildMessage(contents: MessageContents): Message = MessageImpl(
contents.contents.valueAsString(),
contents.metadata.mapValues { it.value.toString() },
Expand Down

0 comments on commit 2135451

Please sign in to comment.