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 feature.Context
|
||||
import fr.dcproject.config
|
||||
import fr.dcproject.module
|
||||
import fr.dcproject.utils.LoggerDelegate
|
||||
import fr.postgresjson.connexion.Connection
|
||||
import fr.postgresjson.connexion.Requester
|
||||
@@ -11,10 +12,11 @@ import fr.postgresjson.migration.Migrations
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
import io.ktor.server.testing.TestApplicationEngine
|
||||
import io.ktor.server.testing.createTestEnvironment
|
||||
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.inject
|
||||
import org.koin.test.get
|
||||
import org.slf4j.Logger
|
||||
import java.util.concurrent.TimeUnit
|
||||
import feature.Context.Companion.current as contextCurrent
|
||||
@@ -26,28 +28,27 @@ var unitialized: Boolean = false
|
||||
@RunWith(Cucumber::class)
|
||||
@CucumberOptions(plugin = ["pretty"])
|
||||
class RunCucumberTest: En, KoinTest {
|
||||
private val migrations: Migrations by inject()
|
||||
private val connection = Connection("test", "test", "test")
|
||||
private val logger: Logger? by LoggerDelegate()
|
||||
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"
|
||||
contextCurrent = Context(TestApplicationEngine(createTestEnvironment()) {}, scenario)
|
||||
|
||||
beforeAll()
|
||||
|
||||
logger?.info("Fixtures Begin")
|
||||
//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")
|
||||
}
|
||||
|
||||
After { _: Scenario ->
|
||||
@@ -55,18 +56,33 @@ class RunCucumberTest: En, KoinTest {
|
||||
}
|
||||
}
|
||||
|
||||
private fun beforeAll()
|
||||
{
|
||||
if (!unitialized) {
|
||||
migrations.forceAllDown()
|
||||
migrations.run()
|
||||
unitialized = true
|
||||
}
|
||||
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 = connection,
|
||||
connection = get(),
|
||||
queriesDirectory = config.sqlFiles.resolve("fixtures")
|
||||
).createRequester()
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.koin.test.KoinTest
|
||||
import org.koin.test.inject
|
||||
import org.opentest4j.AssertionFailedError
|
||||
import java.util.*
|
||||
import kotlin.random.Random
|
||||
import kotlin.test.asserter
|
||||
import feature.Context.Companion.current as currentContext
|
||||
|
||||
@@ -27,27 +28,20 @@ class Request: En, KoinTest {
|
||||
private val migrations: Migrations by inject()
|
||||
private val requester: Requester by inject()
|
||||
init {
|
||||
// Before { scenario: Scenario ->
|
||||
// migrations.run()
|
||||
// }
|
||||
//
|
||||
// After { scenario: Scenario ->
|
||||
// migrations.forceAllDown()
|
||||
// }
|
||||
|
||||
When("I have citizen:") { body: DataTable ->
|
||||
val user = User(username = "jaque", plainPassword = "azerty")
|
||||
val data = body.asMap<String, String>(String::class.java, String::class.java)
|
||||
val citizen = Citizen(
|
||||
id = UUID.fromString(data["id"]),
|
||||
name = Citizen.Name(data["firstName"], data["lastName"]),
|
||||
birthday = DateTime.now(),
|
||||
user = user
|
||||
)
|
||||
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 citizen = Citizen(
|
||||
id = UUID.fromString(data["id"]),
|
||||
name = Citizen.Name(data["firstName"], data["lastName"]),
|
||||
birthday = DateTime.now(),
|
||||
user = user
|
||||
)
|
||||
requester
|
||||
.getFunction("upsert_citizen")
|
||||
.selectOne(citizen)
|
||||
|
||||
Reference in New Issue
Block a user