diff --git a/src/test/java/roomescape/auth/web/support/CookieUtilsTest.kt b/src/test/java/roomescape/auth/web/support/CookieUtilsTest.kt new file mode 100644 index 00000000..11bf1952 --- /dev/null +++ b/src/test/java/roomescape/auth/web/support/CookieUtilsTest.kt @@ -0,0 +1,63 @@ +package roomescape.auth.web.support + +import io.kotest.assertions.assertSoftly +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.collections.shouldContainAll +import io.kotest.matchers.shouldBe +import io.mockk.every +import io.mockk.mockk +import jakarta.servlet.http.Cookie +import jakarta.servlet.http.HttpServletRequest +import roomescape.auth.web.TokenResponse + +class CookieUtilsTest : FunSpec({ + context("HttpServletRequest에서 accessToken 쿠키를 가져온다.") { + val httpServletRequest: HttpServletRequest = mockk() + + test("accessToken이 있으면 해당 쿠키를 반환한다.") { + val token = "test-token" + val cookie = Cookie(ACCESS_TOKEN_COOKIE_NAME, token) + every { httpServletRequest.cookies } returns arrayOf(cookie) + + assertSoftly(httpServletRequest.accessTokenCookie()) { + this.name shouldBe ACCESS_TOKEN_COOKIE_NAME + this.value shouldBe token + } + } + + test("accessToken이 없으면 accessToken에 빈 값을 담은 쿠키를 반환한다.") { + every { httpServletRequest.cookies } returns arrayOf() + + assertSoftly(httpServletRequest.accessTokenCookie()) { + this.name shouldBe ACCESS_TOKEN_COOKIE_NAME + this.value shouldBe "" + } + } + } + + context("TokenResponse를 쿠키로 반환한다.") { + val tokenResponse = TokenResponse("test-token") + + val result: String = tokenResponse.toResponseCookie() + + result.split("; ") shouldContainAll listOf( + "accessToken=test-token", + "HttpOnly", + "Secure", + "Path=/", + "Max-Age=1800" + ) + } + + context("만료된 accessToken 쿠키를 반환한다.") { + val result: String = expiredAccessTokenCookie() + + result.split("; ") shouldContainAll listOf( + "accessToken=", + "HttpOnly", + "Secure", + "Path=/", + "Max-Age=0" + ) + } +})