Alberto Adami
11/12/2024, 11:26 AMpackage it.adami.services.blog.repository
import io.kotest.core.spec.style.AnnotationSpec
import io.kotest.matchers.shouldBe
import it.adami.services.blog.model.User
import it.adami.services.blog.model.UserStatus
import it.adami.services.blog.repository.ExposedUserRepository
import it.adami.services.blog.repository.TestDatabase
import it.adami.services.blog.repository.UserRepository
import kotlinx.coroutines.runBlocking
import java.time.Instant
import javax.sql.DataSource
import kotlin.test.BeforeTest
import org.jetbrains.exposed.sql.Database
class ExposedUserRepositoryTest : AnnotationSpec() {
private lateinit var dataSource: DataSource
private lateinit var repository: UserRepository
@BeforeTest
fun setUp() {
println("here") // Ensure setUp() is being executed
// Initialize the database connection via TestDatabase
dataSource = TestDatabase.setup() // Ensure this is called first
// Make sure the database connection is active
Database.connect(dataSource)
// Initialize the repository
repository = ExposedUserRepository()
}
@Test
fun `create user successfully`() = runBlocking {
val user = User(
id = -1,
name = "test",
surname = "test",
email = "<mailto:test@test.it|test@test.it>",
password = "test",
status = UserStatus.PENDING,
createdAt = Instant.now(),
updatedAt = Instant.now()
)
val result = repository.create(user)
result shouldBe null // Kotest matcher to verify the result
}
}
It seems that setUp() is not called, Am i missing someghing?Rob Elliot
11/12/2024, 11:44 AM@BeforeEach
or @BeforeAll
not @BeforeTest
Rob Elliot
11/12/2024, 11:45 AMkotlin.test.BeforeTest
is not intended to work with io.kotest.core.spec.style.AnnotationSpec
, they are different libraries. See https://kotest.io/docs/framework/testing-styles.html#annotation-specAlberto Adami
11/12/2024, 11:46 AMpackage it.adami.services.blog.repository
import io.kotest.core.spec.style.WordSpec
import io.kotest.matchers.shouldNotBe
import it.adami.services.blog.model.User
import it.adami.services.blog.model.UserStatus
import org.jetbrains.exposed.sql.transactions.transaction
import java.time.Instant
class ExposedUserRepositoryTest : WordSpec({
lateinit var repository: UserRepository
beforeTest {
TestDatabase.setup()
repository = ExposedUserRepository()
}
afterTest {
transaction {
exec("TRUNCATE TABLE users;")
}
}
"ExposedUserRepository" should {
"create successfully a user and return a new id" {
val user = User(
id = -1,
name = "test",
surname = "test",
email = "<mailto:test@test.it|test@test.it>",
password = "test",
status = UserStatus.PENDING,
createdAt = Instant.now(),
updatedAt = Instant.now()
)
val result = repository.create(user)
result shouldNotBe null
}
}
})
thanks for the help!Rob Elliot
11/12/2024, 1:42 PMAlberto Adami
11/12/2024, 1:49 PM