package integration.services import be.vandewalleh.mainModule import be.vandewalleh.migrations.Migration import be.vandewalleh.services.UserService import kotlinx.coroutines.runBlocking import org.amshove.kluent.* import org.junit.jupiter.api.* import org.kodein.di.Kodein import org.kodein.di.generic.bind import org.kodein.di.generic.instance import org.kodein.di.generic.singleton import utils.KMariadbContainer import utils.testContainerDataSource import javax.sql.DataSource @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation::class) class UserServiceTest { private val mariadb = KMariadbContainer().apply { start() } private val kodein = Kodein { import(mainModule, allowOverride = true) bind(overrides = true) with singleton { testContainerDataSource(mariadb) } } private val migration by kodein.instance() init { migration.migrate() } private val userService by kodein.instance() @Test @Order(1) fun `test create user`() { runBlocking { val username = "hubert" val email = "a@a" val password = "password" userService.createUser(username, email, password) val id = userService.getUserId(email) id `should not be` null userService.getUserInfo(id!!)!!.let { it.username `should be equal to` username it.email `should be equal to` email } } } @Test @Order(2) fun `test create same user`() { runBlocking { userService.createUser(username = "hubert", hashedPassword = "password", email = "a@a") `should be` null } } @Test @Order(3) fun `test delete user`() { runBlocking { val email = "a@a" val id = userService.getUserId(email)!! userService.deleteUser(id) userService.getUserId(email) `should be` null userService.getUserInfo(id) `should be` null } } }