refactor testApplication
This commit is contained in:
@@ -2,9 +2,22 @@ package eventDemo
|
|||||||
|
|
||||||
import eventDemo.business.entity.Card
|
import eventDemo.business.entity.Card
|
||||||
import eventDemo.business.entity.Deck
|
import eventDemo.business.entity.Deck
|
||||||
|
import eventDemo.configuration.injection.appKoinModule
|
||||||
|
import eventDemo.configuration.ktor.configuration
|
||||||
|
import io.ktor.server.config.ApplicationConfig
|
||||||
|
import org.koin.core.Koin
|
||||||
|
import org.koin.core.module.KoinApplicationDslMarker
|
||||||
|
import org.koin.dsl.koinApplication
|
||||||
|
|
||||||
fun Deck.allCardCount(): Int =
|
fun Deck.allCardCount(): Int =
|
||||||
stack.size + discard.size + playersHands.values.flatten().size
|
stack.size + discard.size + playersHands.values.flatten().size
|
||||||
|
|
||||||
fun Deck.allCards(): Set<Card> =
|
fun Deck.allCards(): Set<Card> =
|
||||||
stack + discard + playersHands.values.flatten()
|
stack + discard + playersHands.values.flatten()
|
||||||
|
|
||||||
|
@KoinApplicationDslMarker
|
||||||
|
suspend fun testApplicationWithConfig(block: suspend Koin.() -> Unit) {
|
||||||
|
koinApplication { modules(appKoinModule(ApplicationConfig("application.conf").configuration())) }.koin.apply {
|
||||||
|
block()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,9 +22,8 @@ import eventDemo.business.notification.PlayerAsPlayACardNotification
|
|||||||
import eventDemo.business.notification.PlayerWasReadyNotification
|
import eventDemo.business.notification.PlayerWasReadyNotification
|
||||||
import eventDemo.business.notification.TheGameWasStartedNotification
|
import eventDemo.business.notification.TheGameWasStartedNotification
|
||||||
import eventDemo.business.notification.WelcomeToTheGameNotification
|
import eventDemo.business.notification.WelcomeToTheGameNotification
|
||||||
import eventDemo.configuration.injection.Configuration
|
|
||||||
import eventDemo.configuration.injection.appKoinModule
|
|
||||||
import eventDemo.libs.event.projection.ProjectionSnapshotRepositoryInMemory
|
import eventDemo.libs.event.projection.ProjectionSnapshotRepositoryInMemory
|
||||||
|
import eventDemo.testApplicationWithConfig
|
||||||
import io.kotest.core.spec.style.FunSpec
|
import io.kotest.core.spec.style.FunSpec
|
||||||
import io.kotest.matchers.collections.shouldHaveSize
|
import io.kotest.matchers.collections.shouldHaveSize
|
||||||
import io.kotest.matchers.equals.shouldBeEqual
|
import io.kotest.matchers.equals.shouldBeEqual
|
||||||
@@ -37,7 +36,6 @@ import kotlinx.coroutines.delay
|
|||||||
import kotlinx.coroutines.joinAll
|
import kotlinx.coroutines.joinAll
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withTimeout
|
import kotlinx.coroutines.withTimeout
|
||||||
import org.koin.dsl.koinApplication
|
|
||||||
import kotlin.test.assertIs
|
import kotlin.test.assertIs
|
||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
@@ -171,7 +169,7 @@ class GameSimulationTest :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val commandHandler by inject<GameCommandHandler>()
|
val commandHandler by inject<GameCommandHandler>()
|
||||||
val eventStore by inject<GameEventStore>()
|
val eventStore by inject<GameEventStore>()
|
||||||
val playerNotificationListener by inject<PlayerNotificationListener>()
|
val playerNotificationListener by inject<PlayerNotificationListener>()
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ import eventDemo.business.event.projection.projectionListener.ReactionListener
|
|||||||
import eventDemo.business.notification.CommandSuccessNotification
|
import eventDemo.business.notification.CommandSuccessNotification
|
||||||
import eventDemo.business.notification.Notification
|
import eventDemo.business.notification.Notification
|
||||||
import eventDemo.business.notification.WelcomeToTheGameNotification
|
import eventDemo.business.notification.WelcomeToTheGameNotification
|
||||||
import eventDemo.configuration.injection.Configuration
|
import eventDemo.testApplicationWithConfig
|
||||||
import eventDemo.configuration.injection.appKoinModule
|
|
||||||
import io.kotest.core.spec.style.FunSpec
|
import io.kotest.core.spec.style.FunSpec
|
||||||
import io.kotest.matchers.collections.shouldContain
|
import io.kotest.matchers.collections.shouldContain
|
||||||
import io.kotest.matchers.equals.shouldBeEqual
|
import io.kotest.matchers.equals.shouldBeEqual
|
||||||
@@ -20,7 +19,6 @@ import kotlinx.coroutines.channels.Channel
|
|||||||
import kotlinx.coroutines.channels.trySendBlocking
|
import kotlinx.coroutines.channels.trySendBlocking
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withTimeout
|
import kotlinx.coroutines.withTimeout
|
||||||
import org.koin.dsl.koinApplication
|
|
||||||
import kotlin.test.assertIs
|
import kotlin.test.assertIs
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
@@ -29,7 +27,7 @@ class GameCommandHandlerTest :
|
|||||||
FunSpec({
|
FunSpec({
|
||||||
test("handle a command should execute the command") {
|
test("handle a command should execute the command") {
|
||||||
withTimeout(1.seconds) {
|
withTimeout(1.seconds) {
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val commandHandler by inject<GameCommandHandler>()
|
val commandHandler by inject<GameCommandHandler>()
|
||||||
val notificationListener by inject<PlayerNotificationListener>()
|
val notificationListener by inject<PlayerNotificationListener>()
|
||||||
val gameId = GameId()
|
val gameId = GameId()
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ import eventDemo.business.event.GameEventHandler
|
|||||||
import eventDemo.business.event.event.NewPlayerEvent
|
import eventDemo.business.event.event.NewPlayerEvent
|
||||||
import eventDemo.business.event.projection.gameState.GameState
|
import eventDemo.business.event.projection.gameState.GameState
|
||||||
import eventDemo.business.event.projection.gameState.GameStateRepository
|
import eventDemo.business.event.projection.gameState.GameStateRepository
|
||||||
import eventDemo.configuration.injection.Configuration
|
import eventDemo.testApplicationWithConfig
|
||||||
import eventDemo.configuration.injection.appKoinModule
|
|
||||||
import io.kotest.assertions.nondeterministic.eventually
|
import io.kotest.assertions.nondeterministic.eventually
|
||||||
import io.kotest.assertions.nondeterministic.eventuallyConfig
|
import io.kotest.assertions.nondeterministic.eventuallyConfig
|
||||||
import io.kotest.core.spec.style.FunSpec
|
import io.kotest.core.spec.style.FunSpec
|
||||||
@@ -20,7 +19,6 @@ import kotlinx.coroutines.GlobalScope
|
|||||||
import kotlinx.coroutines.joinAll
|
import kotlinx.coroutines.joinAll
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.core.context.stopKoin
|
import org.koin.core.context.stopKoin
|
||||||
import org.koin.dsl.koinApplication
|
|
||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
@@ -32,7 +30,7 @@ class GameStateRepositoryTest :
|
|||||||
|
|
||||||
test("GameStateRepository should build the projection when a new event occurs") {
|
test("GameStateRepository should build the projection when a new event occurs") {
|
||||||
val aggregateId = GameId()
|
val aggregateId = GameId()
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val repo = get<GameStateRepository>()
|
val repo = get<GameStateRepository>()
|
||||||
val eventHandler = get<GameEventHandler>()
|
val eventHandler = get<GameEventHandler>()
|
||||||
eventHandler
|
eventHandler
|
||||||
@@ -54,7 +52,7 @@ class GameStateRepositoryTest :
|
|||||||
|
|
||||||
test("get should build the last version of the state") {
|
test("get should build the last version of the state") {
|
||||||
val aggregateId = GameId()
|
val aggregateId = GameId()
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val repo = get<GameStateRepository>()
|
val repo = get<GameStateRepository>()
|
||||||
val eventHandler = get<GameEventHandler>()
|
val eventHandler = get<GameEventHandler>()
|
||||||
val projectionBus = get<GameProjectionBus>()
|
val projectionBus = get<GameProjectionBus>()
|
||||||
@@ -90,7 +88,7 @@ class GameStateRepositoryTest :
|
|||||||
test("getUntil should build the state until the event") {
|
test("getUntil should build the state until the event") {
|
||||||
repeat(10) {
|
repeat(10) {
|
||||||
val aggregateId = GameId()
|
val aggregateId = GameId()
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val repo = get<GameStateRepository>()
|
val repo = get<GameStateRepository>()
|
||||||
val eventHandler = get<GameEventHandler>()
|
val eventHandler = get<GameEventHandler>()
|
||||||
|
|
||||||
@@ -119,7 +117,7 @@ class GameStateRepositoryTest :
|
|||||||
|
|
||||||
test("getUntil should be concurrently secure") {
|
test("getUntil should be concurrently secure") {
|
||||||
val aggregateId = GameId()
|
val aggregateId = GameId()
|
||||||
koinApplication { modules(appKoinModule(Configuration("redis://localhost:6379"))) }.koin.apply {
|
testApplicationWithConfig {
|
||||||
val repo = get<GameStateRepository>()
|
val repo = get<GameStateRepository>()
|
||||||
val eventHandler = get<GameEventHandler>()
|
val eventHandler = get<GameEventHandler>()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user