-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[YS-70] feat: JWT 토큰에 사용자 권한(RoleType) 정보 포함 #18
Changes from all commits
e33a3ee
c780b29
b55af23
c5b5501
94b24fa
03d097e
aa11204
28b7bc7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
package com.dobby.backend.domain.gateway | ||
|
||
import com.dobby.backend.domain.model.Member | ||
|
||
interface TokenGateway { | ||
fun generateAccessToken(memberId: Long): String | ||
fun generateRefreshToken(memberId: Long): String | ||
fun generateAccessToken(member: Member): String | ||
fun generateRefreshToken(member: Member): String | ||
fun extractMemberIdFromRefreshToken(token: String): String | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,8 @@ | ||
package com.dobby.backend.infrastructure.database.entity.enum | ||
|
||
enum class RoleType { | ||
RESEARCHER, PARTICIPANT | ||
enum class RoleType( | ||
val roleName: String | ||
) { | ||
RESEARCHER("RESEARCHER"), | ||
PARTICIPANT("PARTICIPANT") | ||
} |
This file was deleted.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 네이밍 관련해서 |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package com.dobby.backend.application.usecase | ||
|
||
import com.dobby.backend.domain.gateway.MemberGateway | ||
import io.kotest.core.spec.style.BehaviorSpec | ||
import com.dobby.backend.domain.gateway.TokenGateway | ||
import com.dobby.backend.domain.model.Member | ||
import com.dobby.backend.infrastructure.database.entity.enum.MemberStatus | ||
import com.dobby.backend.infrastructure.database.entity.enum.ProviderType | ||
import com.dobby.backend.infrastructure.database.entity.enum.RoleType | ||
import io.kotest.matchers.shouldBe | ||
import io.mockk.every | ||
import io.mockk.mockk | ||
import java.time.LocalDate | ||
|
||
class GenerateTestTokenTest: BehaviorSpec({ | ||
val tokenGateway = mockk<TokenGateway>() | ||
val memberGateway = mockk<MemberGateway>() | ||
val generateTestToken = GenerateTestToken(tokenGateway, memberGateway) | ||
|
||
given("memberId가 주어졌을 때") { | ||
val member = Member(memberId = 1, oauthEmail = "[email protected]", contactEmail = "[email protected]", | ||
provider = ProviderType.NAVER, role = RoleType.PARTICIPANT, name = "dobby", | ||
birthDate = LocalDate.of(2000, 7, 8), status = MemberStatus.ACTIVE) | ||
val accessToken = "testAccessToken" | ||
val refreshToken = "testRefreshToken" | ||
|
||
every { tokenGateway.generateAccessToken(member) } returns accessToken | ||
every { tokenGateway.generateRefreshToken(member) } returns refreshToken | ||
every { memberGateway.getById(1) } returns member | ||
|
||
`when`("execute가 호출되면") { | ||
val input = GenerateTestToken.Input(member.memberId) | ||
val result = generateTestToken.execute(input) | ||
|
||
then("생성된 accessToken과 refreshToken이 반환되어야 한다") { | ||
result.accessToken shouldBe accessToken | ||
result.refreshToken shouldBe refreshToken | ||
} | ||
} | ||
} | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,34 @@ | ||
package com.dobby.backend.domain.usecase | ||
package com.dobby.backend.application.usecase | ||
|
||
import com.dobby.backend.application.usecase.GenerateTokenWithRefreshToken | ||
import com.dobby.backend.domain.gateway.MemberGateway | ||
import com.dobby.backend.domain.gateway.TokenGateway | ||
import com.dobby.backend.domain.model.Member | ||
import com.dobby.backend.infrastructure.database.entity.enum.MemberStatus | ||
import com.dobby.backend.infrastructure.database.entity.enum.ProviderType | ||
import com.dobby.backend.infrastructure.database.entity.enum.RoleType | ||
import io.kotest.core.spec.style.BehaviorSpec | ||
import io.kotest.matchers.shouldBe | ||
import io.mockk.every | ||
import io.mockk.mockk | ||
import java.time.LocalDate | ||
|
||
class GenerateTokenWithRefreshTokenTest : BehaviorSpec({ | ||
val tokenGateway = mockk<TokenGateway>() | ||
val generateTokenWithRefreshToken = GenerateTokenWithRefreshToken(tokenGateway) | ||
val memberGateway = mockk<MemberGateway>() | ||
val generateTokenWithRefreshToken = GenerateTokenWithRefreshToken(tokenGateway, memberGateway) | ||
|
||
given("유효한 리프레시 토큰이 주어졌을 때") { | ||
val validRefreshToken = "validRefreshToken" | ||
val memberId = 123L | ||
val member = Member(memberId = 1, oauthEmail = "[email protected]", contactEmail = "[email protected]", | ||
provider = ProviderType.NAVER, role = RoleType.PARTICIPANT, name = "dobby", | ||
birthDate = LocalDate.of(2000, 7, 8), status = MemberStatus.ACTIVE) | ||
val accessToken = "newAccessToken" | ||
val newRefreshToken = "newRefreshToken" | ||
|
||
every { tokenGateway.extractMemberIdFromRefreshToken(validRefreshToken) } returns memberId.toString() | ||
every { tokenGateway.generateAccessToken(memberId) } returns accessToken | ||
every { tokenGateway.generateRefreshToken(memberId) } returns newRefreshToken | ||
every { tokenGateway.extractMemberIdFromRefreshToken(validRefreshToken) } returns member.memberId.toString() | ||
every { tokenGateway.generateAccessToken(member) } returns accessToken | ||
every { tokenGateway.generateRefreshToken(member) } returns newRefreshToken | ||
every { memberGateway.getById(1) } returns member | ||
|
||
`when`("execute가 호출되면") { | ||
val input = GenerateTokenWithRefreshToken.Input(refreshToken = validRefreshToken) | ||
|
@@ -28,7 +37,7 @@ class GenerateTokenWithRefreshTokenTest : BehaviorSpec({ | |
then("accessToken과 refreshToken이 생성되고, memberId가 포함된다") { | ||
result.accessToken shouldBe accessToken | ||
result.refreshToken shouldBe newRefreshToken | ||
result.memberId shouldBe memberId | ||
result.memberId shouldBe member.memberId | ||
} | ||
} | ||
} | ||
|
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
memberId가 아닌 member 파라미터 값을 조정하신 점이 좋았습니다 !