Files
dc-project/src/test/kotlin/RunCucumberTest.kt

91 lines
2.5 KiB
Kotlin

import feature.KtorServerContext
import fr.dcproject.config
import fr.dcproject.module
import fr.dcproject.utils.LoggerDelegate
import fr.postgresjson.connexion.Connection
import fr.postgresjson.connexion.Requester
import fr.postgresjson.migration.Migrations
import io.cucumber.core.api.Scenario
import io.cucumber.java8.En
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.server.testing.withTestApplication
import io.ktor.util.KtorExperimentalAPI
import org.junit.runner.RunWith
import org.koin.test.KoinTest
import org.koin.test.get
import org.slf4j.Logger
var unitialized: Boolean = false
@KtorExperimentalAPI
@KtorExperimentalLocationsAPI
@RunWith(Cucumber::class)
@CucumberOptions(plugin = ["pretty"])
class RunCucumberTest: En, KoinTest {
private val logger: Logger? by LoggerDelegate()
val ktorContext = KtorServerContext {
module()
}
init {
Before(-2) { _: Scenario ->
if (!unitialized) {
config.database = "test"
config.username = "test"
config.password = "test"
withTestApplication({ module() }) {
migrations()
fixtures()
}
unitialized = true
}
}
Before(-1) { scenario: Scenario ->
config.database = "test"
config.username = "test"
config.password = "test"
ktorContext.start()
}
After { _: Scenario ->
ktorContext.stop()
}
}
private fun migrations() {
config.database = "test"
config.username = "test"
config.password = "test"
val migrations: Migrations = get()
migrations.forceAllDown()
migrations.run()
}
private fun fixtures() {
logger?.info("Fixtures Begin")
val connection: Connection = get()
//language=PostgreSQL
connection.sendQuery("""truncate table "user" cascade;""")
//language=PostgreSQL
connection.sendQuery("""SET fixture.quantity.multiple = '50';""")
getFixturesRequester()
.getQueries()
.sortedBy { it.name }
.forEach { it.sendQuery() }
logger?.info("Fixtures Done")
}
private fun getFixturesRequester(): Requester {
return Requester.RequesterFactory(
connection = get(),
queriesDirectory = config.sqlFiles.resolve("fixtures")
).createRequester()
}
}