dave08
12/03/2020, 5:07 PMsam
12/03/2020, 8:15 PMthanksforallthefish
12/04/2020, 6:52 AMclass ProjectConfig : AbstractProjectConfig() {
override fun listeners() = listOf(PostgresListener, SpringListener, object : TestListener {
override suspend fun afterTest(testCase: TestCase, result: TestResult) {
clearAllMocks()
}
})
}
object PostgresListener : ProjectListener {
private val withNetworkAliases = PostgreSQLContainerProvider().newInstance("10")
.withNetwork(Network.SHARED)
.withNetworkAliases("db")
override suspend fun beforeProject() {
withNetworkAliases.start()
System.setProperty("spring.datasource.url", "jdbc:postgresql://${withNetworkAliases.connectionString()}")
System.setProperty("spring.datasource.username", withNetworkAliases.getUsername())
System.setProperty("spring.datasource.password", withNetworkAliases.getPassword())
System.setProperty("spring.flyway.schemas", withNetworkAliases.getDatabaseName())
}
override suspend fun afterProject() {
withNetworkAliases.stop() //probably not needed because of ryuk
}
private fun JdbcDatabaseContainer<*>.connectionString() = "${getHost()}:${getFirstMappedPort()}/${getDatabaseName()}"
override val name = "PostgresListener"
}
then db tests can be regular SpringBootTest
(or test slice if only the db is needed) since the configuration properties are set. I don’t know micronaut (it might or might not be explored in the service we need to implement), but something like this might work for you as welldave08
12/04/2020, 8:47 AM