From d1fb87556e4792b9f742b6d30900fa8ce7893797 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 19 Jun 2026 16:32:16 +0900 Subject: [PATCH] =?UTF-8?q?refactor(cdn):=20CDN=20URL=20=EB=B3=80=ED=99=98?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=EB=A5=BC=20=EA=B3=B5=ED=86=B5=ED=99=94?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/common/domain/CdnUrlExtensions.kt | 7 ++++ .../v2/common/domain/CdnUrlExtensionsTest.kt | 39 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensions.kt create mode 100644 src/test/kotlin/kr/co/vividnext/sodalive/v2/common/domain/CdnUrlExtensionsTest.kt 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) + ) + } +}