Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -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<File.Image>()

private val inputStream = mockk<InputStream>()

@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
)
}
}
Original file line number Diff line number Diff line change
@@ -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<FileType>()

private val inputStream = mockk<Flow<ByteArray>>()

private val fileId = FileId.createOrAssert("123")

private val exception = mockk<Exception>()

@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
)
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down