refactor(i18n): 공급자 전환과 캐시 선택을 공통 처리로 연결한다
This commit is contained in:
+18
-10
@@ -1,5 +1,8 @@
|
||||
package kr.co.vividnext.sodalive.content
|
||||
|
||||
import kr.co.vividnext.sodalive.i18n.translation.DetectedLanguage
|
||||
import kr.co.vividnext.sodalive.i18n.translation.LanguageDetectionProvider
|
||||
import kr.co.vividnext.sodalive.i18n.translation.LanguageProviderProperties
|
||||
import kr.co.vividnext.sodalive.i18n.translation.SourceTextNormalizer
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
@@ -10,7 +13,8 @@ class LanguageDetectionCacheServiceTest {
|
||||
@Test
|
||||
fun shouldReuseCachedLanguageDetectionForSameNormalizedText() {
|
||||
val repository = Mockito.mock(LanguageDetectionResultRepository::class.java)
|
||||
val service = LanguageDetectionCacheService(repository)
|
||||
var providerCalls = 0
|
||||
val service = service(repository) { providerCalls++; "ko" }
|
||||
val sourceHash = SourceTextNormalizer.hash("Hello world")
|
||||
|
||||
Mockito.`when`(
|
||||
@@ -30,13 +34,9 @@ class LanguageDetectionCacheServiceTest {
|
||||
)
|
||||
)
|
||||
|
||||
var providerCalls = 0
|
||||
val detected = service.detectWithCache("Hello world") {
|
||||
providerCalls++
|
||||
"ko"
|
||||
}
|
||||
val detected = service.detectWithCache("Hello world")
|
||||
|
||||
assertEquals("en", detected)
|
||||
assertEquals(DetectedLanguage("en", "papago"), detected)
|
||||
assertEquals(0, providerCalls)
|
||||
Mockito.verify(repository).findBySourceHashAndProviderAndNormalizationVersion(
|
||||
sourceHash = sourceHash,
|
||||
@@ -50,7 +50,7 @@ class LanguageDetectionCacheServiceTest {
|
||||
@DisplayName("최초 캐시 저장 경합에서는 저장된 승자의 감지 언어를 반환한다")
|
||||
fun shouldReturnStoredWinnerAfterInitialCacheInsert() {
|
||||
val repository = Mockito.mock(LanguageDetectionResultRepository::class.java)
|
||||
val service = LanguageDetectionCacheService(repository)
|
||||
val service = service(repository) { "en" }
|
||||
val sourceHash = SourceTextNormalizer.hash("Hello world")
|
||||
|
||||
Mockito.`when`(
|
||||
@@ -78,9 +78,9 @@ class LanguageDetectionCacheServiceTest {
|
||||
)
|
||||
).thenReturn("ko")
|
||||
|
||||
val detected = service.detectWithCache("Hello world") { "en" }
|
||||
val detected = service.detectWithCache("Hello world")
|
||||
|
||||
assertEquals("ko", detected)
|
||||
assertEquals(DetectedLanguage("ko", "papago"), detected)
|
||||
Mockito.verify(repository).findBySourceHashAndProviderAndNormalizationVersion(
|
||||
sourceHash = sourceHash,
|
||||
provider = "papago",
|
||||
@@ -101,4 +101,12 @@ class LanguageDetectionCacheServiceTest {
|
||||
)
|
||||
Mockito.verifyNoMoreInteractions(repository)
|
||||
}
|
||||
|
||||
private fun service(repository: LanguageDetectionResultRepository, detect: () -> String?): LanguageDetectionCacheService {
|
||||
val provider = object : LanguageDetectionProvider {
|
||||
override val providerName = "papago"
|
||||
override fun detect(query: String) = detect()
|
||||
}
|
||||
return LanguageDetectionCacheService(repository, listOf(provider), LanguageProviderProperties())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user