From 2391c35a9b24e89a003deca4db6554fd28b7e11a Mon Sep 17 00:00:00 2001 From: y9slavabogu Date: Sat, 15 Jul 2023 22:02:38 +0200 Subject: [PATCH 1/3] #48 Cover files domain with tests --- .../files/usecases/GetImageUseCaseTest.kt | 65 +++++++++++++++++++ .../GetCurrentTimerSessionUseCaseTest.kt | 3 +- 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 core/src/test/kotlin/io/timemates/backend/files/usecases/GetImageUseCaseTest.kt rename core/src/test/kotlin/io/timemates/backend/{auth/usecases => timers/usecases/sessions}/GetCurrentTimerSessionUseCaseTest.kt (95%) diff --git a/core/src/test/kotlin/io/timemates/backend/files/usecases/GetImageUseCaseTest.kt b/core/src/test/kotlin/io/timemates/backend/files/usecases/GetImageUseCaseTest.kt new file mode 100644 index 00000000..c780a3e9 --- /dev/null +++ b/core/src/test/kotlin/io/timemates/backend/files/usecases/GetImageUseCaseTest.kt @@ -0,0 +1,65 @@ +package io.timemates.backend.files.usecases + +import io.mockk.coEvery +import io.mockk.impl.annotations.MockK +import io.mockk.junit5.MockKExtension +import io.mockk.mockk +import io.timemates.backend.files.repositories.FilesRepository +import io.timemates.backend.files.types.File +import kotlinx.coroutines.runBlocking +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.extension.ExtendWith +import org.junit.platform.commons.annotation.Testable +import java.io.InputStream +import kotlin.test.Test +import kotlin.test.assertEquals + +@Testable +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@ExtendWith(MockKExtension::class) +class GetImageUseCaseTest { + @MockK + lateinit var filesRepository: FilesRepository + + lateinit var useCase: GetImageUseCase + + private val file = mockk() + + private val inputStream = mockk() + + @BeforeAll + fun before() { + useCase = GetImageUseCase(filesRepository) + } + + @Test + fun `test get image`(): Unit = runBlocking { + // GIVEN + coEvery { filesRepository.retrieve(file) } returns inputStream + + // WHEN + val result = useCase.execute(file) + + // THEN + assertEquals( + expected = GetImageUseCase.Result.Success(inputStream), + actual = result + ) + } + + @Test + fun `test get not found result from get image`(): Unit = runBlocking { + // GIVEN + coEvery { filesRepository.retrieve(file) } returns null + + // WHEN + val result = useCase.execute(file) + + // THEN + assertEquals( + expected = GetImageUseCase.Result.NotFound, + actual = result + ) + } +} \ No newline at end of file diff --git a/core/src/test/kotlin/io/timemates/backend/auth/usecases/GetCurrentTimerSessionUseCaseTest.kt b/core/src/test/kotlin/io/timemates/backend/timers/usecases/sessions/GetCurrentTimerSessionUseCaseTest.kt similarity index 95% rename from core/src/test/kotlin/io/timemates/backend/auth/usecases/GetCurrentTimerSessionUseCaseTest.kt rename to core/src/test/kotlin/io/timemates/backend/timers/usecases/sessions/GetCurrentTimerSessionUseCaseTest.kt index a67b9659..84c07262 100644 --- a/core/src/test/kotlin/io/timemates/backend/auth/usecases/GetCurrentTimerSessionUseCaseTest.kt +++ b/core/src/test/kotlin/io/timemates/backend/timers/usecases/sessions/GetCurrentTimerSessionUseCaseTest.kt @@ -1,4 +1,4 @@ -package io.timemates.backend.auth.usecases +package io.timemates.backend.timers.usecases.sessions import com.timemates.backend.time.SystemTimeProvider import com.timemates.backend.time.UnixTime @@ -14,7 +14,6 @@ import io.timemates.backend.timers.repositories.TimersRepository import io.timemates.backend.timers.types.Timer import io.timemates.backend.timers.types.toTimer import io.timemates.backend.timers.types.value.TimerId -import io.timemates.backend.timers.usecases.sessions.GetCurrentTimerSessionUseCase import io.timemates.backend.users.types.value.UserId import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking From 5c72856adc1df3e9acf7883134d5acb9accebcaa Mon Sep 17 00:00:00 2001 From: y9slavabogu Date: Tue, 18 Jul 2023 23:08:01 +0200 Subject: [PATCH 2/3] #48 Cover files domain with tests --- .../files/usecases/UploadFileUseCaseTest.kt | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt diff --git a/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt new file mode 100644 index 00000000..8b46495a --- /dev/null +++ b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt @@ -0,0 +1,80 @@ +package io.timemates.backend.files.usecases + +import com.timemates.backend.time.SystemTimeProvider +import com.timemates.backend.validation.createOrThrow +import com.timemates.random.SecureRandomProvider +import io.mockk.coEvery +import io.mockk.impl.annotations.MockK +import io.mockk.junit5.MockKExtension +import io.mockk.mockk +import io.timemates.backend.files.repositories.FilesRepository +import io.timemates.backend.files.types.FileType +import io.timemates.backend.files.types.value.FileId +import io.timemates.backend.testing.auth.testAuthContext +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.runBlocking +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.extension.ExtendWith +import org.junit.platform.commons.annotation.Testable +import kotlin.test.Test +import kotlin.test.assertEquals + +@Testable +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@ExtendWith(MockKExtension::class) +class UploadFileUseCaseTest { + @MockK + lateinit var filesRepository: FilesRepository + + lateinit var useCase: UploadFileUseCase + + private val randomProvider = SecureRandomProvider() + + private val timeProvider = SystemTimeProvider() + + private val fileType = mockk() + + private val inputStream = mockk>() + + private val fileId = mockk() + + private val exception = mockk() + + @BeforeAll + fun before() { + useCase = UploadFileUseCase(filesRepository, randomProvider, timeProvider) + } + + @Test + fun `test upload file`(): Unit = runBlocking { + // GIVEN + coEvery { FileId.createOrThrow(randomProvider.randomHash(FileId.SIZE)) } returns fileId + coEvery { filesRepository.save(fileId, fileType, inputStream, timeProvider.provide()) } returns Unit + // WHEN + val result = testAuthContext { useCase.execute(fileType, inputStream) } + + // THEN + assertEquals( + expected = UploadFileUseCase.Result.Success(fileId), + actual = result + ) + } + + @Test + fun `test failure of upload file`(): Unit = runBlocking { + // GIVEN + coEvery { FileId.createOrThrow(randomProvider.randomHash(FileId.SIZE)) } returns fileId + coEvery { filesRepository.remove(fileId) } returns Unit + coEvery { exception.printStackTrace() } + + // WHEN + val result = testAuthContext { useCase.execute(fileType, inputStream) } + + // THEN + assertEquals( + expected = UploadFileUseCase.Result.Failure, + actual = result + ) + } +} \ No newline at end of file From 81386b09905ad4ab01a7a2c6ae3ef1102d8810f6 Mon Sep 17 00:00:00 2001 From: y9slavabogu Date: Sun, 3 Sep 2023 19:42:52 +0200 Subject: [PATCH 3/3] #48 Cover files domain with tests --- .../backend/files/usecases/UploadFileUseCaseTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt index 8b46495a..42b51167 100644 --- a/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt +++ b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt @@ -11,6 +11,7 @@ import io.timemates.backend.files.repositories.FilesRepository import io.timemates.backend.files.types.FileType import io.timemates.backend.files.types.value.FileId import io.timemates.backend.testing.auth.testAuthContext +import io.timemates.backend.testing.validation.createOrAssert import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.BeforeAll @@ -37,7 +38,7 @@ class UploadFileUseCaseTest { private val inputStream = mockk>() - private val fileId = mockk() + private val fileId = FileId.createOrAssert("123") private val exception = mockk() @@ -66,7 +67,7 @@ class UploadFileUseCaseTest { // GIVEN coEvery { FileId.createOrThrow(randomProvider.randomHash(FileId.SIZE)) } returns fileId coEvery { filesRepository.remove(fileId) } returns Unit - coEvery { exception.printStackTrace() } + coEvery { exception.printStackTrace() } throws exception // WHEN val result = testAuthContext { useCase.execute(fileType, inputStream) }