package services import be.vandewalleh.migrations.Migration import be.vandewalleh.services.NotesService import be.vandewalleh.services.UserService import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource import me.liuwj.ktorm.database.* 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 org.testcontainers.containers.MariaDBContainer import javax.sql.DataSource @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation::class) class UserServiceTest { class KMariadbContainer : MariaDBContainer() private val mariadb = KMariadbContainer().apply { this.start() } private val hikariConfig = HikariConfig().apply { jdbcUrl = mariadb.jdbcUrl username = mariadb.username password = mariadb.password } private val dataSource = HikariDataSource(hikariConfig) private val db = Database.Companion.connect(dataSource) private val kodein = Kodein { bind() with singleton { dataSource } bind() with singleton { db } bind() with singleton { Migration(this.kodein) } bind() with singleton { UserService(this.kodein) } bind() with singleton { NotesService(this.kodein) } } private val migration by kodein.instance() init { migration.migrate() } private val userService by kodein.instance() @Test @Order(1) fun `test create user`() { val username = "hubert" val email = "a@a" val password = "password" println(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`() { userService.createUser(username = "hubert", hashedPassword = "password", email = "a@a") `should be` null } @Test @Order(3) fun `test delete user`() { val email = "a@a" val id = userService.getUserId(email)!! userService.deleteUser(id) userService.getUserId(email) `should be` null userService.getUserInfo(id) `should be` null } }