From a06b39d29ebc2a4c3eaf28ae13e5824ce7a41cf0 Mon Sep 17 00:00:00 2001 From: Andrea Brighi Date: Wed, 17 May 2023 16:34:52 +0200 Subject: [PATCH] test(access): updated test for new repository interface --- .../AccessDomainRepositoryInstrumentedTest.kt | 67 ++++++++----------- .../accessdomain/UseCaseTest.kt | 18 ++--- 2 files changed, 35 insertions(+), 50 deletions(-) diff --git a/accessData/src/androidTest/kotlin/com/intelligentbackpack/accessdata/AccessDomainRepositoryInstrumentedTest.kt b/accessData/src/androidTest/kotlin/com/intelligentbackpack/accessdata/AccessDomainRepositoryInstrumentedTest.kt index e191a74c..497c9ac3 100644 --- a/accessData/src/androidTest/kotlin/com/intelligentbackpack/accessdata/AccessDomainRepositoryInstrumentedTest.kt +++ b/accessData/src/androidTest/kotlin/com/intelligentbackpack/accessdata/AccessDomainRepositoryInstrumentedTest.kt @@ -11,6 +11,7 @@ import com.intelligentbackpack.accessdomain.entities.User import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse +import org.junit.Assert.assertThrows import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith @@ -36,10 +37,9 @@ class AccessDomainRepositoryInstrumentedTest { @Test fun loginWithData() = runBlocking { - val appContext = - InstrumentationRegistry - .getInstrumentation() - .targetContext + val appContext = InstrumentationRegistry + .getInstrumentation() + .targetContext val accessRemoteDataSource = mock(AccessRemoteDataSource::class.java) `when`( accessRemoteDataSource.accessWithData( @@ -50,50 +50,42 @@ class AccessDomainRepositoryInstrumentedTest { val localAccessDataSource = AccessLocalDataSourceImpl(UserStorageImpl(appContext)) val accessDomainRepository = AccessDomainRepositoryImpl(localAccessDataSource, accessRemoteDataSource) assertFalse(localAccessDataSource.isUserSaved()) - accessDomainRepository.loginWithData("test@gmail.com", "Test#1234", { user -> - verify(accessRemoteDataSource).accessWithData("test@gmail.com", "Test#1234") - assertEquals(expectedUser, user) - assertEquals(expectedUser, localAccessDataSource.getUser()) - assertTrue(localAccessDataSource.isUserSaved()) - }, { - assert(false) - }) + val user = accessDomainRepository.loginWithData("test@gmail.com", "Test#1234") + verify(accessRemoteDataSource).accessWithData("test@gmail.com", "Test#1234") + assertEquals(expectedUser, user) + assertEquals(expectedUser, localAccessDataSource.getUser()) + assertTrue(localAccessDataSource.isUserSaved()) } @Test - fun automaticLoginWithUserSaved() = runBlocking { - val appContext = - InstrumentationRegistry - .getInstrumentation() - .targetContext + fun automaticLoginWithUserSaved(): Unit = runBlocking { + val appContext = InstrumentationRegistry + .getInstrumentation() + .targetContext val accessRemoteDataSource = mock(AccessRemoteDataSource::class.java) val accessLocalDataSource = AccessLocalDataSourceImpl(UserStorageImpl(appContext)) accessLocalDataSource.saveUser(expectedUser) val accessDomainRepository = AccessDomainRepositoryImpl(accessLocalDataSource, accessRemoteDataSource) assertTrue(accessLocalDataSource.isUserSaved()) - accessDomainRepository.automaticLogin({ user -> - verify(accessRemoteDataSource, never()).accessWithData("test@gmail.com", "Test#1234") - assertEquals(expectedUser, user) - }, { - assert(false) - }) + val user = accessDomainRepository.automaticLogin() + verify(accessRemoteDataSource, never()).accessWithData("test@gmail.com", "Test#1234") + assertEquals(expectedUser, user) } @Test - fun automaticLoginWithoutUserSavedCreateException() = runBlocking { - val appContext = - InstrumentationRegistry - .getInstrumentation() - .targetContext + fun automaticLoginWithoutUserSavedCreateException(): Unit = runBlocking { + val appContext = InstrumentationRegistry + .getInstrumentation() + .targetContext val accessRemoteDataSource = mock(AccessRemoteDataSource::class.java) val accessLocalDataStorage = AccessLocalDataSourceImpl(UserStorageImpl(appContext)) val accessDomainRepository = AccessDomainRepositoryImpl(accessLocalDataStorage, accessRemoteDataSource) assertFalse(accessLocalDataStorage.isUserSaved()) - accessDomainRepository.automaticLogin({ - assert(false) - }, { - assertTrue(it is MissingUserException) - }) + assertThrows(MissingUserException::class.java) { + runBlocking { + accessDomainRepository.automaticLogin() + } + } } @Test @@ -106,11 +98,8 @@ class AccessDomainRepositoryInstrumentedTest { val accessLocalDataSource = AccessLocalDataSourceImpl(UserStorageImpl(appContext)) accessLocalDataSource.saveUser(expectedUser) val accessDomainRepository = AccessDomainRepositoryImpl(accessLocalDataSource, accessRemoteDataSource) - accessDomainRepository.logoutUser({ user -> - assertEquals(expectedUser, user) - assertFalse(accessLocalDataSource.isUserSaved()) - }, { - assert(false) - }) + val user = accessDomainRepository.logoutUser() + assertEquals(expectedUser, user) + assertFalse(accessLocalDataSource.isUserSaved()) } } diff --git a/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt b/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt index 9596f637..9eb2d248 100644 --- a/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt +++ b/accessDomain/src/test/kotlin/com/intelligentbackpack/accessdomain/UseCaseTest.kt @@ -29,10 +29,10 @@ class UseCaseTest : StringSpec({ "Create a user" { val useCase = AccessUseCase(repository) - val captor = slot() + val userCapture = slot() useCase.createUser(user = user, success = {}, error = {}) - coVerify { repository.createUser(capture(captor), any(), any()) } - captor.captured shouldBe user + coVerify { repository.createUser(capture(userCapture)) } + userCapture.captured shouldBe user } "Login a user with email and password" { @@ -40,22 +40,18 @@ class UseCaseTest : StringSpec({ val emailCaptor = slot() val passwordCaptor = slot() useCase.loginWithData(user.email, user.password, success = {}, error = {}) - coVerify { repository.loginWithData(capture(emailCaptor), capture(passwordCaptor), any(), any()) } + coVerify { repository.loginWithData(capture(emailCaptor), capture(passwordCaptor)) } 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 = any()) - } answers { - thirdArg<(User) -> Unit>().invoke(user) - } + repository.loginWithData(any(), any()) + } returns user useCase.loginWithData(user.email, user.password, success = {}, error = {}) - coEvery { repository.automaticLogin(capture(func), any()) } answers { func.captured(user) } + coEvery { repository.automaticLogin() } returns user useCase.automaticLogin(success = { it shouldBe user }, error = { assert(false) })