diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensions.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensions.kt new file mode 100644 index 00000000..f2ffe04c --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensions.kt @@ -0,0 +1,7 @@ +package kr.co.vividnext.sodalive.v2.common.domain + +fun String?.toCdnUrl(cloudFrontHost: String): String? { + if (isNullOrBlank()) return null + if (startsWith("https://") || startsWith("http://")) return this + return "$cloudFrontHost/$this" +} diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensionsTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensionsTest.kt new file mode 100644 index 00000000..fccd7e08 --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensionsTest.kt @@ -0,0 +1,39 @@ +package kr.co.vividnext.sodalive.v2.common.domain + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +class CdnUrlExtensionsTest { + private val cloudFrontHost = "https://cdn.test" + + @Test + @DisplayName("CDN URL 변환은 null과 blank를 null로 반환한다") + fun shouldReturnNullForNullOrBlankPath() { + assertEquals(null, null.toCdnUrl(cloudFrontHost)) + assertEquals(null, "".toCdnUrl(cloudFrontHost)) + assertEquals(null, " ".toCdnUrl(cloudFrontHost)) + } + + @Test + @DisplayName("CDN URL 변환은 절대 URL을 그대로 반환한다") + fun shouldKeepAbsoluteUrl() { + assertEquals( + "https://image.test/profile.png", + "https://image.test/profile.png".toCdnUrl(cloudFrontHost) + ) + assertEquals( + "http://image.test/profile.png", + "http://image.test/profile.png".toCdnUrl(cloudFrontHost) + ) + } + + @Test + @DisplayName("CDN URL 변환은 상대 path 앞에 CloudFront host를 붙인다") + fun shouldPrependCloudFrontHostToRelativePath() { + assertEquals( + "https://cdn.test/profile/default-profile.png", + "profile/default-profile.png".toCdnUrl(cloudFrontHost) + ) + } +}