Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/kotlin/domain/usecase/auth/CreateUserUseCase.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.example.domain.usecase.auth

import org.example.data.repository.UsersRepositoryImpl.Companion.encryptPassword
import org.example.domain.AccessDeniedException
import org.example.domain.entity.User
import org.example.domain.entity.User.UserRole
Expand All @@ -15,7 +16,7 @@ class CreateUserUseCase(
operator fun invoke(username: String, password: String, role: UserRole) =
usersRepository.getCurrentUser().let { currentUser ->
if (currentUser.role != UserRole.ADMIN) throw AccessDeniedException("feature")
User(username = username, hashedPassword = password, role = role).let { newUser ->
User(username = username, hashedPassword = encryptPassword(password) , role = role).let { newUser ->
usersRepository.createUser(newUser)
logsRepository.addLog(
CreatedLog(
Expand Down
44 changes: 38 additions & 6 deletions src/test/kotlin/domain/usecase/auth/CreateUserUseCaseTest.kt
Original file line number Diff line number Diff line change
@@ -1,49 +1,81 @@
package domain.usecase.auth

import dummyAdmin
import dummyMate
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.example.domain.AccessDeniedException
import org.example.domain.entity.User
import org.example.domain.entity.User.UserRole
import org.example.domain.repository.LogsRepository
import org.example.domain.repository.UsersRepository
import org.example.domain.usecase.auth.CreateUserUseCase
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.assertThrows
import kotlin.test.Test

class CreateUserUseCaseTest {

private val usersRepository: UsersRepository = mockk(relaxed = true)
private val logsRepository: LogsRepository = mockk(relaxed = true)

val createUserUseCase = CreateUserUseCase(usersRepository, logsRepository)
lateinit var createUserUseCase: CreateUserUseCase

@BeforeEach
fun setUp() {
createUserUseCase = CreateUserUseCase(usersRepository, logsRepository)

}
// red then green

@Test
fun `should create new user when user complete register with valid username and password`() {
fun `should throw AccessDeniedException when user is not admin`() {
// given
val user = User(
username = " Ah med ",
hashedPassword = "123456789",
role = UserRole.MATE
)
every { usersRepository.getCurrentUser() } returns dummyAdmin
every { usersRepository.getCurrentUser() } returns dummyMate
// when & then
createUserUseCase.invoke(user.username, user.hashedPassword, user.role)
assertThrows<AccessDeniedException> {
createUserUseCase.invoke(user.username, user.hashedPassword, user.role)
}
}


@Test
fun `should add log for new user when user complete register with valid username and password`() {
fun `should create new mate when user complete register with valid username and password`() {
// given
val user = User(
username = " Ah med ",
username = "federico valverdie",
hashedPassword = "123456789",
role = UserRole.MATE
)
every { usersRepository.getCurrentUser() } returns dummyAdmin
// when
createUserUseCase.invoke(user.username, user.hashedPassword, user.role)

//then
verify { usersRepository.createUser(any()) }
verify { logsRepository.addLog(any()) }
}

@Test
fun `should create new admin when user complete register with valid username and password`() {
// given
val user = User(
username = "my uncle luka modric",
hashedPassword = "123456789",
role = UserRole.ADMIN
)
every { usersRepository.getCurrentUser() } returns dummyAdmin
// when
createUserUseCase.invoke(user.username, user.hashedPassword, user.role)

//then
verify { usersRepository.createUser(any()) }
verify { logsRepository.addLog(any()) }
}

Expand Down
24 changes: 21 additions & 3 deletions src/test/kotlin/domain/usecase/auth/LoginUseCaseTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ class LoginUseCaseTest {
}


@Test
fun `should throw any Exception when getAllUsers throw exception`() {
// given
every { usersRepository.getAllUsers() } throws Exception()

// when & then
assertThrows<Exception> {
loginUseCase.invoke(username = "Ahmed", password = "12345678")
}
}


@Test
fun `invoke should throw UnauthorizedException when list of users is empty`() {
// given
Expand All @@ -38,8 +50,9 @@ class LoginUseCaseTest {
}



@Test
fun `invoke should throw UnauthorizedException when user not correct`() {
fun `invoke should throw UnauthorizedException when username not correct`() {
// given
every { usersRepository.getAllUsers() } returns listOf(
User(
Expand All @@ -61,7 +74,7 @@ class LoginUseCaseTest {
every { usersRepository.getAllUsers() } returns listOf(
User(
username = "Ahmed",
hashedPassword = "uofah83r",
hashedPassword = encryptPassword("134328"),
role = UserRole.MATE,
)
)
Expand All @@ -72,6 +85,7 @@ class LoginUseCaseTest {
}
}


@Test
fun `invoke should logged in when user found `() {
// given
Expand All @@ -83,8 +97,12 @@ class LoginUseCaseTest {
)
)

// when
loginUseCase.invoke(username = "Ahmed", password = "12345678")

//then
verify { usersRepository.storeUserData(any(), any(), any()) }

}


Expand Down Expand Up @@ -122,6 +140,7 @@ class LoginUseCaseTest {

}


@Test
fun `getCurrentUserIfLoggedIn should return user when user already logged in `() {
// given
Expand All @@ -130,7 +149,6 @@ class LoginUseCaseTest {
hashedPassword = encryptPassword("12345678"),
role = UserRole.ADMIN,
)
every { usersRepository.getAllUsers() } returns listOf(user)
every { usersRepository.getCurrentUser() } returns user

//when
Expand Down
20 changes: 15 additions & 5 deletions src/test/kotlin/domain/usecase/auth/LogoutUseCaseTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package domain.usecase.auth

import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.example.domain.repository.UsersRepository
import org.example.domain.usecase.auth.LogoutUseCase
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows


class LogoutUseCaseTest {
Expand All @@ -16,11 +17,20 @@ class LogoutUseCaseTest {


@Test
fun `should clear user data when user logged out`() {
// given
every { usersRepository.clearUserData()} returns Unit
fun `should throw any exception data when clearUserDate throw any exception`() {
// when
every { usersRepository.clearUserData() } throws Exception()
//then
assertThrows<Exception> {
logoutUseCase.invoke()
}
}

// when&then
@Test
fun `should clear user data when user logged out`() {
// when
logoutUseCase.invoke()
//then
verify { usersRepository.clearUserData() }
}
}
Loading