Compare commits
2
Commits
9bffcd3267
...
6b7102104a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b7102104a
|
||
|
|
b2b8fcf92f
|
@@ -106,10 +106,10 @@ jobs:
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Start CI Docker Compose services
|
||||
run: ./gradlew composeUp -Pci
|
||||
run: ./gradlew ciComposeUp -Pci
|
||||
|
||||
- name: Run tests
|
||||
run: ./gradlew test -x composeUp --no-daemon
|
||||
run: ./gradlew test -x ciComposeUp -Pci --no-daemon
|
||||
|
||||
- name: Upload test reports
|
||||
if: always()
|
||||
|
||||
+34
-25
@@ -1,3 +1,4 @@
|
||||
import com.avast.gradle.dockercompose.ComposeExtension
|
||||
import org.jlleitschuh.gradle.ktlint.KtlintExtension
|
||||
|
||||
val ktorVersion: Provider<String> = providers.gradleProperty("ktor_version")
|
||||
@@ -49,29 +50,38 @@ tasks.withType<Test>().configureEach {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
dockerCompose {
|
||||
val composeFile =
|
||||
if (project.hasProperty("ci")) {
|
||||
// Use docker-compose-ci.yaml for the CI
|
||||
"docker/docker-compose-ci.yaml"
|
||||
} else {
|
||||
// Use docker-compose-test.yaml for local tests
|
||||
"docker/docker-compose-test.yaml"
|
||||
}
|
||||
useComposeFiles.set(listOf(composeFile))
|
||||
setProjectName("event-demo-test")
|
||||
configure<ComposeExtension> {
|
||||
createNested("test").apply {
|
||||
useComposeFiles.set(listOf("docker/docker-compose-test.yaml"))
|
||||
setProjectName("event-demo-test")
|
||||
}
|
||||
createNested("dev").apply {
|
||||
useComposeFiles.set(listOf("docker/docker-compose-dev.yaml"))
|
||||
setProjectName("event-demo-dev")
|
||||
}
|
||||
createNested("ci").apply {
|
||||
useComposeFiles.set(listOf("docker/docker-compose-ci.yaml"))
|
||||
setProjectName("event-demo-ci")
|
||||
}
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
dependsOn("composeUp")
|
||||
dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml"))
|
||||
dockerCompose.setProjectName("event-demo-test")
|
||||
dependsOn("testComposeUp")
|
||||
}
|
||||
|
||||
tasks.named("run") {
|
||||
dependsOn("composeUp")
|
||||
dockerCompose.useComposeFiles.set(listOf("docker/docker-compose-test.yaml"))
|
||||
dockerCompose.setProjectName("event-demo-dev")
|
||||
dependsOn("devComposeUp")
|
||||
}
|
||||
tasks.composeUp {
|
||||
dependsOn("copyEnv")
|
||||
}
|
||||
tasks.named("devComposeUp") {
|
||||
dependsOn("copyEnv")
|
||||
}
|
||||
tasks.named("testComposeUp") {
|
||||
dependsOn("copyEnv")
|
||||
}
|
||||
tasks.named("ciComposeUp") {
|
||||
dependsOn("copyEnv")
|
||||
}
|
||||
|
||||
tasks.register<Copy>("copyEnv") {
|
||||
@@ -89,10 +99,12 @@ tasks.register<Copy>("copyEnv") {
|
||||
}
|
||||
}
|
||||
val files =
|
||||
listOf(
|
||||
File("docker/pgadmin.secret"),
|
||||
File("docker/postgresql.secret"),
|
||||
)
|
||||
buildList {
|
||||
add(File("docker/postgresql.secret"))
|
||||
if (!project.hasProperty("ci")) {
|
||||
add(File("docker/pgadmin.secret"))
|
||||
}
|
||||
}
|
||||
outputs.files(*files.toTypedArray())
|
||||
doLast {
|
||||
files.forEach {
|
||||
@@ -102,9 +114,6 @@ tasks.register<Copy>("copyEnv") {
|
||||
}
|
||||
}
|
||||
}
|
||||
tasks.composeUp {
|
||||
dependsOn("copyEnv")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("io.ktor:ktor-server-core-jvm")
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
name: event-demo-test
|
||||
name: event-demo-ci
|
||||
include:
|
||||
- path:
|
||||
- parts/docker-compose-databases.yaml
|
||||
- parts/docker-compose-databases-expose.yaml
|
||||
- parts/docker-compose-traefik.yaml
|
||||
@@ -0,0 +1,4 @@
|
||||
name: event-demo-test
|
||||
include:
|
||||
- path:
|
||||
- docker-compose-test.yaml
|
||||
@@ -24,8 +24,6 @@ services:
|
||||
environment:
|
||||
POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password
|
||||
POSTGRES_USER: event-demo
|
||||
secrets:
|
||||
- postgresql_password
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"]
|
||||
interval: 1s
|
||||
@@ -33,6 +31,7 @@ services:
|
||||
retries: 10
|
||||
volumes:
|
||||
- postgresql_data:/var/lib/postgresql
|
||||
- ../postgresql.secret:/run/secrets/postgresql_password:ro
|
||||
|
||||
rabbitmq:
|
||||
image: rabbitmq:4-management-alpine
|
||||
@@ -47,10 +46,6 @@ services:
|
||||
volumes:
|
||||
- rabbitmq_data:/var/lib/rabbitmq/
|
||||
|
||||
secrets:
|
||||
postgresql_password:
|
||||
file: ../postgresql.secret
|
||||
|
||||
volumes:
|
||||
redis_data:
|
||||
redisinsight_data:
|
||||
|
||||
+2
-10
@@ -37,16 +37,8 @@ abstract class GameEventManager(
|
||||
return this
|
||||
}
|
||||
|
||||
protected fun <G : Game> Game.isStatusOrFail(
|
||||
kClass: KClass<G>,
|
||||
message: String,
|
||||
): G {
|
||||
if (kClass.isInstance(this)) {
|
||||
return this as G
|
||||
} else {
|
||||
throw CommandException(message)
|
||||
}
|
||||
}
|
||||
protected inline fun <reified G : Game> Game.isStatusOrFail(message: String): G =
|
||||
this as? G ?: throw CommandException(message)
|
||||
|
||||
protected fun <T> retry(
|
||||
mapAttempts: Int = 5,
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ class JoinTheGameHandler(
|
||||
retry {
|
||||
command
|
||||
.getGame()
|
||||
.isStatusOrFail(GameCreated::class, "The game is started")
|
||||
.isStatusOrFail<GameCreated>("The game is started")
|
||||
.userJoinTheGame(
|
||||
userId = command.userId,
|
||||
name = user.username,
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ class PlayCardHandler(
|
||||
override fun handle(command: PlayCardCommand) {
|
||||
command
|
||||
.getGame()
|
||||
.isStatusOrFail(GameStarted::class, "The game is not started")
|
||||
.isStatusOrFail<GameStarted>("The game is not started")
|
||||
.playTheCard(
|
||||
card = command.payload.card,
|
||||
playerId = command.payload.playerId,
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ class ReadyToPlayHandler(
|
||||
override fun handle(command: ReadyToPlayCommand) {
|
||||
command
|
||||
.getGame()
|
||||
.isStatusOrFail(GameCreated::class, "The game is started")
|
||||
.isStatusOrFail<GameCreated>("The game is started")
|
||||
.setReadyPlayer(command.payload.playerId)
|
||||
.saveEvents()
|
||||
.publishEvents()
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ class TakeCartFromDrawPileHandler(
|
||||
override fun handle(command: TakeCartFromDrawPileCommand) {
|
||||
command
|
||||
.getGame()
|
||||
.isStatusOrFail(GameStarted::class, "The game is not started")
|
||||
.isStatusOrFail<GameStarted>("The game is not started")
|
||||
.playerTakeCartFromDrawPile(command.payload.playerId, 1)
|
||||
.saveEvents()
|
||||
.publishEvents()
|
||||
|
||||
Reference in New Issue
Block a user