From 053cf408bfd22ca6d9b8c87cc2b5298373eed253 Mon Sep 17 00:00:00 2001 From: Andrea Brighi Date: Sat, 13 May 2023 11:54:25 +0200 Subject: [PATCH] test(access): add use case test --- .../accessdomain/UseCaseTest.kt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt diff --git a/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt b/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt new file mode 100644 index 00000000..f6af3669 --- /dev/null +++ b/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt @@ -0,0 +1,63 @@ +package com.intelligentbackpack.accessdomain + +import com.intelligentbackpack.accessdomain.entities.Role +import com.intelligentbackpack.accessdomain.entities.User +import com.intelligentbackpack.accessdomain.repository.AccessDomainRepository +import com.intelligentbackpack.accessdomain.usecase.AccessUseCase +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import io.mockk.slot + +class UseCaseTest : StringSpec({ + + val email = "test@mail.com" + val name = "Test" + val surname = "Test" + val password = "Test#1234" + val role = Role.STUDENT + val user = User.build { + this.email = email + this.name = name + this.surname = surname + this.password = password + this.role = role + } + val repository = mockk(relaxed = true) + + "Create a user" { + val useCase = AccessUseCase(repository) + val captor = slot() + useCase.createUser(user = user, success = {}, error = {}) + coVerify { repository.createUser(capture(captor), any(), any()) } + captor.captured shouldBe user + } + + "Login a user with email and password" { + val useCase = AccessUseCase(repository) + val emailCaptor = slot() + val passwordCaptor = slot() + useCase.loginWithData(user.email, user.password, success = {}, error = {}) + coVerify { repository.loginWithData(capture(emailCaptor), capture(passwordCaptor), any(), any()) } + emailCaptor.captured shouldBe user.email + passwordCaptor.captured shouldBe user.password + } + + "Login automatically a user" { + val useCase = AccessUseCase(repository) + val func = slot<(User) -> Unit>() + val login = slot<(User) -> Unit>() + coEvery { + repository.loginWithData(any(), any(), success = capture(login), error = {}) + } answers { + thirdArg<(User) -> Unit>().invoke(user) + } + useCase.loginWithData(user.email, user.password, success = {}, error = {}) + coEvery { repository.automaticLogin(capture(func), any()) } answers { func.captured(user) } + useCase.automaticLogin(success = { + it shouldBe user + }, error = {}) + } +})