generated from pricelees/issue-pr-template
77 lines
2.4 KiB
Kotlin
77 lines
2.4 KiB
Kotlin
package roomescape.theme.implement
|
|
|
|
import io.kotest.assertions.throwables.shouldThrow
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.collections.shouldHaveSize
|
|
import io.kotest.matchers.shouldBe
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
import io.mockk.verify
|
|
import org.springframework.data.repository.findByIdOrNull
|
|
import roomescape.theme.exception.ThemeErrorCode
|
|
import roomescape.theme.exception.ThemeException
|
|
import roomescape.theme.infrastructure.persistence.ThemeRepository
|
|
import roomescape.util.ThemeFixture
|
|
import java.time.LocalDate
|
|
|
|
class ThemeFinderTest : FunSpec({
|
|
val themeRepository: ThemeRepository = mockk()
|
|
|
|
val themeFinder = ThemeFinder(themeRepository)
|
|
|
|
context("findAll") {
|
|
test("모든 테마를 조회한다.") {
|
|
every {
|
|
themeRepository.findAll()
|
|
} returns listOf(mockk(), mockk(), mockk())
|
|
|
|
themeRepository.findAll() shouldHaveSize 3
|
|
}
|
|
}
|
|
|
|
context("findById") {
|
|
val timeId = 1L
|
|
test("동일한 ID인 테마를 찾아 응답한다.") {
|
|
every {
|
|
themeRepository.findByIdOrNull(timeId)
|
|
} returns mockk()
|
|
|
|
themeFinder.findById(timeId)
|
|
|
|
verify(exactly = 1) {
|
|
themeRepository.findByIdOrNull(timeId)
|
|
}
|
|
}
|
|
|
|
test("동일한 ID인 테마가 없으면 실패한다.") {
|
|
every {
|
|
themeRepository.findByIdOrNull(timeId)
|
|
} returns null
|
|
|
|
shouldThrow<ThemeException> {
|
|
themeFinder.findById(timeId)
|
|
}.also {
|
|
it.errorCode shouldBe ThemeErrorCode.THEME_NOT_FOUND
|
|
}
|
|
}
|
|
}
|
|
|
|
context("findMostReservedThemes") {
|
|
test("입력된 개수보다 조회된 개수가 작으면 조회된 개수만큼 반환한다.") {
|
|
val count = 10
|
|
val startFrom = LocalDate.now().minusDays(7)
|
|
val endAt = LocalDate.now().minusDays(1)
|
|
|
|
every {
|
|
themeRepository.findPopularThemes(startFrom, endAt, count)
|
|
} returns listOf(
|
|
ThemeFixture.create(id = 1, name = "name1"),
|
|
ThemeFixture.create(id = 2, name = "name2"),
|
|
ThemeFixture.create(id = 3, name = "name3"),
|
|
)
|
|
|
|
themeFinder.findMostReservedThemes(count, startFrom, endAt) shouldHaveSize 3
|
|
}
|
|
}
|
|
})
|