55 lines
2.1 KiB
Kotlin
55 lines
2.1 KiB
Kotlin
package be.simplenotes.domain.usecases.users.register
|
|
|
|
import be.simplenotes.domain.security.BcryptPasswordHash
|
|
import be.simplenotes.domain.testutils.isLeftOfType
|
|
import be.simplenotes.domain.testutils.isRight
|
|
import be.simplenotes.persistence.repositories.UserRepository
|
|
import be.simplenotes.persistence.transactions.TransactionService
|
|
import be.simplenotes.types.PersistedUser
|
|
import com.natpryce.hamkrest.assertion.assertThat
|
|
import com.natpryce.hamkrest.equalTo
|
|
import io.mockk.*
|
|
import org.junit.jupiter.api.BeforeEach
|
|
import org.junit.jupiter.api.Test
|
|
|
|
internal class RegisterUseCaseImplTest {
|
|
|
|
// region setup
|
|
private val mockUserRepository = mockk<UserRepository>()
|
|
private val passwordHash = BcryptPasswordHash(test = true)
|
|
private val noopTransactionService = object : TransactionService {
|
|
override fun <T> use(block: () -> T) = block()
|
|
}
|
|
private val registerUseCase = RegisterUseCaseImpl(mockUserRepository, passwordHash, noopTransactionService)
|
|
|
|
@BeforeEach
|
|
fun resetMocks() {
|
|
clearMocks(mockUserRepository)
|
|
}
|
|
// endregion
|
|
|
|
@Test
|
|
fun `register should fail with invalid form`() {
|
|
val form = RegisterForm("", "a".repeat(10))
|
|
assertThat(registerUseCase.register(form), isLeftOfType<InvalidRegisterForm>())
|
|
verify { mockUserRepository wasNot called }
|
|
}
|
|
|
|
@Test
|
|
fun `Register should fail with existing username`() {
|
|
val form = RegisterForm("someuser", "somepassword")
|
|
every { mockUserRepository.exists(form.username!!) } returns true
|
|
assertThat(registerUseCase.register(form), isLeftOfType<UserExists>())
|
|
}
|
|
|
|
@Test
|
|
fun `Register should succeed with new user`() {
|
|
val form = RegisterForm("someuser", "somepassword")
|
|
every { mockUserRepository.exists(form.username!!) } returns false
|
|
every { mockUserRepository.create(any()) } returns PersistedUser(form.username!!, form.password!!, 1)
|
|
val res = registerUseCase.register(form)
|
|
assertThat(res, isRight())
|
|
res.map { assertThat(it.username, equalTo(form.username)) }
|
|
}
|
|
}
|