refactor(i18n): 공급자 전환과 캐시 선택을 공통 처리로 연결한다

This commit is contained in:
2026-11-09 15:41:13 +09:00
parent 320adb037c
commit f7fadf7ac7
16 changed files with 545 additions and 221 deletions
@@ -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())
}
}