improve speed of cucumber tests
This commit is contained in:
@@ -4,6 +4,7 @@ import cucumber.api.java8.En
|
|||||||
import cucumber.api.junit.Cucumber
|
import cucumber.api.junit.Cucumber
|
||||||
import feature.Context
|
import feature.Context
|
||||||
import fr.dcproject.config
|
import fr.dcproject.config
|
||||||
|
import fr.dcproject.module
|
||||||
import fr.dcproject.utils.LoggerDelegate
|
import fr.dcproject.utils.LoggerDelegate
|
||||||
import fr.postgresjson.connexion.Connection
|
import fr.postgresjson.connexion.Connection
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
@@ -11,10 +12,11 @@ import fr.postgresjson.migration.Migrations
|
|||||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||||
import io.ktor.server.testing.TestApplicationEngine
|
import io.ktor.server.testing.TestApplicationEngine
|
||||||
import io.ktor.server.testing.createTestEnvironment
|
import io.ktor.server.testing.createTestEnvironment
|
||||||
|
import io.ktor.server.testing.withTestApplication
|
||||||
import io.ktor.util.KtorExperimentalAPI
|
import io.ktor.util.KtorExperimentalAPI
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.koin.test.KoinTest
|
import org.koin.test.KoinTest
|
||||||
import org.koin.test.inject
|
import org.koin.test.get
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import feature.Context.Companion.current as contextCurrent
|
import feature.Context.Companion.current as contextCurrent
|
||||||
@@ -26,19 +28,47 @@ var unitialized: Boolean = false
|
|||||||
@RunWith(Cucumber::class)
|
@RunWith(Cucumber::class)
|
||||||
@CucumberOptions(plugin = ["pretty"])
|
@CucumberOptions(plugin = ["pretty"])
|
||||||
class RunCucumberTest: En, KoinTest {
|
class RunCucumberTest: En, KoinTest {
|
||||||
private val migrations: Migrations by inject()
|
|
||||||
private val connection = Connection("test", "test", "test")
|
|
||||||
private val logger: Logger? by LoggerDelegate()
|
private val logger: Logger? by LoggerDelegate()
|
||||||
init {
|
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 ->
|
Before(-1) { scenario: Scenario ->
|
||||||
config.database = "test"
|
config.database = "test"
|
||||||
config.username = "test"
|
config.username = "test"
|
||||||
config.password = "test"
|
config.password = "test"
|
||||||
contextCurrent = Context(TestApplicationEngine(createTestEnvironment()) {}, scenario)
|
contextCurrent = Context(TestApplicationEngine(createTestEnvironment()) {}, scenario)
|
||||||
|
}
|
||||||
|
|
||||||
beforeAll()
|
After { _: Scenario ->
|
||||||
|
contextCurrent.engine.stop(0L, 0L, TimeUnit.MILLISECONDS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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")
|
logger?.info("Fixtures Begin")
|
||||||
|
|
||||||
|
val connection: Connection = get()
|
||||||
//language=PostgreSQL
|
//language=PostgreSQL
|
||||||
connection.sendQuery("""truncate table "user" cascade;""")
|
connection.sendQuery("""truncate table "user" cascade;""")
|
||||||
//language=PostgreSQL
|
//language=PostgreSQL
|
||||||
@@ -50,23 +80,9 @@ class RunCucumberTest: En, KoinTest {
|
|||||||
logger?.info("Fixtures Done")
|
logger?.info("Fixtures Done")
|
||||||
}
|
}
|
||||||
|
|
||||||
After { _: Scenario ->
|
|
||||||
contextCurrent.engine.stop(0L, 0L, TimeUnit.MILLISECONDS)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun beforeAll()
|
|
||||||
{
|
|
||||||
if (!unitialized) {
|
|
||||||
migrations.forceAllDown()
|
|
||||||
migrations.run()
|
|
||||||
unitialized = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getFixturesRequester(): Requester {
|
private fun getFixturesRequester(): Requester {
|
||||||
return Requester.RequesterFactory(
|
return Requester.RequesterFactory(
|
||||||
connection = connection,
|
connection = get(),
|
||||||
queriesDirectory = config.sqlFiles.resolve("fixtures")
|
queriesDirectory = config.sqlFiles.resolve("fixtures")
|
||||||
).createRequester()
|
).createRequester()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.koin.test.KoinTest
|
|||||||
import org.koin.test.inject
|
import org.koin.test.inject
|
||||||
import org.opentest4j.AssertionFailedError
|
import org.opentest4j.AssertionFailedError
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.random.Random
|
||||||
import kotlin.test.asserter
|
import kotlin.test.asserter
|
||||||
import feature.Context.Companion.current as currentContext
|
import feature.Context.Companion.current as currentContext
|
||||||
|
|
||||||
@@ -27,16 +28,13 @@ class Request: En, KoinTest {
|
|||||||
private val migrations: Migrations by inject()
|
private val migrations: Migrations by inject()
|
||||||
private val requester: Requester by inject()
|
private val requester: Requester by inject()
|
||||||
init {
|
init {
|
||||||
// Before { scenario: Scenario ->
|
|
||||||
// migrations.run()
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// After { scenario: Scenario ->
|
|
||||||
// migrations.forceAllDown()
|
|
||||||
// }
|
|
||||||
|
|
||||||
When("I have citizen:") { body: DataTable ->
|
When("I have citizen:") { body: DataTable ->
|
||||||
val user = User(username = "jaque", plainPassword = "azerty")
|
val user = User(username = "jaque_${Random.nextInt(0, 10000)}", plainPassword = "azerty")
|
||||||
|
val test: TestApplicationEngine.() -> Unit = {
|
||||||
|
requester
|
||||||
|
.getFunction("insert_user")
|
||||||
|
.selectOne(user)
|
||||||
|
|
||||||
val data = body.asMap<String, String>(String::class.java, String::class.java)
|
val data = body.asMap<String, String>(String::class.java, String::class.java)
|
||||||
val citizen = Citizen(
|
val citizen = Citizen(
|
||||||
id = UUID.fromString(data["id"]),
|
id = UUID.fromString(data["id"]),
|
||||||
@@ -44,10 +42,6 @@ class Request: En, KoinTest {
|
|||||||
birthday = DateTime.now(),
|
birthday = DateTime.now(),
|
||||||
user = user
|
user = user
|
||||||
)
|
)
|
||||||
val test: TestApplicationEngine.() -> Unit = {
|
|
||||||
requester
|
|
||||||
.getFunction("insert_user")
|
|
||||||
.selectOne(user)
|
|
||||||
requester
|
requester
|
||||||
.getFunction("upsert_citizen")
|
.getFunction("upsert_citizen")
|
||||||
.selectOne(citizen)
|
.selectOne(citizen)
|
||||||
|
|||||||
Reference in New Issue
Block a user