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/files/usecases/UploadFileUseCaseTest.kt b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt new file mode 100644 index 00000000..42b51167 --- /dev/null +++ b/core/src/test/kotlin/io/timemates/backend/files/usecases/UploadFileUseCaseTest.kt @@ -0,0 +1,81 @@ +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 io.timemates.backend.testing.validation.createOrAssert +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 = FileId.createOrAssert("123") + + 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() } throws exception + + // WHEN + val result = testAuthContext { useCase.execute(fileType, inputStream) } + + // THEN + assertEquals( + expected = UploadFileUseCase.Result.Failure, + 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