generated from pricelees/issue-pr-template
84 lines
3.0 KiB
Kotlin
84 lines
3.0 KiB
Kotlin
package roomescape.auth.business
|
|
|
|
import io.kotest.assertions.assertSoftly
|
|
import io.kotest.assertions.throwables.shouldThrow
|
|
import io.kotest.core.spec.style.BehaviorSpec
|
|
import io.kotest.matchers.shouldBe
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
import org.springframework.data.repository.findByIdOrNull
|
|
import roomescape.auth.infrastructure.jwt.JwtHandler
|
|
import roomescape.auth.service.AuthService
|
|
import roomescape.common.exception.ErrorType
|
|
import roomescape.common.exception.RoomescapeException
|
|
import roomescape.member.business.MemberService
|
|
import roomescape.member.infrastructure.persistence.MemberEntity
|
|
import roomescape.member.infrastructure.persistence.MemberRepository
|
|
import roomescape.util.JwtFixture
|
|
import roomescape.util.MemberFixture
|
|
|
|
|
|
class AuthServiceTest : BehaviorSpec({
|
|
val memberRepository: MemberRepository = mockk()
|
|
val memberService: MemberService = MemberService(memberRepository)
|
|
val jwtHandler: JwtHandler = JwtFixture.create()
|
|
|
|
val authService = AuthService(memberService, jwtHandler)
|
|
val user: MemberEntity = MemberFixture.user()
|
|
|
|
Given("로그인 요청을 받으면") {
|
|
When("이메일과 비밀번호로 회원을 찾고") {
|
|
val request = MemberFixture.userLoginRequest()
|
|
|
|
Then("회원이 있다면 JWT 토큰을 생성한 뒤 반환한다.") {
|
|
every {
|
|
memberRepository.findByEmailAndPassword(request.email, request.password)
|
|
} returns user
|
|
|
|
val accessToken: String = authService.login(request).accessToken
|
|
|
|
accessToken.isNotBlank() shouldBe true
|
|
jwtHandler.getMemberIdFromToken(accessToken) shouldBe user.id
|
|
}
|
|
|
|
Then("회원이 없다면 예외를 던진다.") {
|
|
every {
|
|
memberRepository.findByEmailAndPassword(request.email, request.password)
|
|
} returns null
|
|
|
|
val exception = shouldThrow<RoomescapeException> {
|
|
authService.login(request)
|
|
}
|
|
|
|
exception.errorType shouldBe ErrorType.MEMBER_NOT_FOUND
|
|
}
|
|
}
|
|
}
|
|
|
|
Given("로그인 확인 요청을 받으면") {
|
|
When("회원 ID로 회원을 찾고") {
|
|
val userId: Long = user.id!!
|
|
|
|
Then("회원이 있다면 회원의 이름을 반환한다.") {
|
|
every { memberRepository.findByIdOrNull(userId) } returns user
|
|
|
|
val response = authService.checkLogin(userId)
|
|
|
|
assertSoftly(response) {
|
|
this.name shouldBe user.name
|
|
}
|
|
}
|
|
|
|
Then("회원이 없다면 예외를 던진다.") {
|
|
every { memberRepository.findByIdOrNull(userId) } returns null
|
|
|
|
val exception = shouldThrow<RoomescapeException> {
|
|
authService.checkLogin(userId)
|
|
}
|
|
|
|
exception.errorType shouldBe ErrorType.MEMBER_NOT_FOUND
|
|
}
|
|
}
|
|
}
|
|
})
|