package kr.co.vividnext.sodalive.extensions import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.fail import org.junit.jupiter.api.Test import java.time.LocalDateTime import java.time.ZoneId class LocalDateTimeExtensionsTest { @Test fun shouldConvertToUtcUsingKstByDefault() { val localDateTime = LocalDateTime.of(2026, 4, 9, 10, 0) val utcDateTime = invokeConvertToUtc(localDateTime) assertEquals(LocalDateTime.of(2026, 4, 9, 1, 0), utcDateTime) } @Test fun shouldConvertToUtcUsingProvidedTimezone() { val localDateTime = LocalDateTime.of(2026, 4, 9, 10, 0) val utcDateTime = invokeConvertToUtc(localDateTime, ZoneId.of("Asia/Bangkok")) assertEquals(LocalDateTime.of(2026, 4, 9, 3, 0), utcDateTime) } private fun invokeConvertToUtc(localDateTime: LocalDateTime, timeZone: ZoneId = ZoneId.of("Asia/Seoul")): LocalDateTime { return try { val method = Class.forName("kr.co.vividnext.sodalive.extensions.LocalDateTimeExtensionsKt") .getMethod("convertToUtc", LocalDateTime::class.java, ZoneId::class.java) method.invoke(null, localDateTime, timeZone) as LocalDateTime } catch (e: ReflectiveOperationException) { fail("LocalDateTime.convertToUtc 확장함수를 찾을 수 없습니다.") } } }