diff --git a/build.gradle.kts b/build.gradle.kts index 623d128..bbf2473 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,6 +38,10 @@ dependencies { // test testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("io.projectreactor:reactor-test") + testImplementation("io.kotest:kotest-runner-junit5:5.4.2") + testImplementation("io.kotest:kotest-assertions-core:5.4.2") + testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.2") + testImplementation("io.mockk:mockk:1.13.8") // security implementation("org.springframework.boot:spring-boot-starter-security") diff --git a/src/test/kotlin/com/trip/safe/user/service/UserServiceTest.kt b/src/test/kotlin/com/trip/safe/user/service/UserServiceTest.kt new file mode 100644 index 0000000..86b89f6 --- /dev/null +++ b/src/test/kotlin/com/trip/safe/user/service/UserServiceTest.kt @@ -0,0 +1,43 @@ +package com.trip.safe.user.service + +import com.trip.safe.common.security.jwt.JwtTokenProvider +import com.trip.safe.user.domain.User +import com.trip.safe.user.domain.UserRepository +import com.trip.safe.user.exception.UserExistException +import com.trip.safe.user.presentation.dto.request.UserSignUpRequest +import io.kotest.core.spec.style.DescribeSpec +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import org.junit.jupiter.api.assertDoesNotThrow +import org.junit.jupiter.api.assertThrows +import org.springframework.security.crypto.password.PasswordEncoder + +class UserServiceTest : DescribeSpec( + { + val userRepository = mockk(relaxed = true) + val jwtTokenProvider = mockk(relaxed = true) + val passwordEncoder = mockk(relaxed = true) + val userService = UserService(userRepository, jwtTokenProvider, passwordEncoder) + val requestStub = UserSignUpRequest("testAccountId", "testPassword", 20) + + describe("유저가 회원가입을 하는 경우") { + context("이미 존재하는 유저이면") { + coEvery { userRepository.existsByAccountId(requestStub.accountId) } returns true + it("UserExistException을 던진다.") { + assertThrows { userService.signUp(requestStub) } + coVerify(exactly = 0) { userRepository.save(any()) } + } + } + + context("존재하지 않는 유저이면") { + coEvery { userRepository.existsByAccountId(requestStub.accountId) } returns false + coEvery { passwordEncoder.encode(requestStub.password) } returns requestStub.password + it("회원가입에 성공한다.") { + assertDoesNotThrow { userService.signUp(requestStub) } + coVerify(exactly = 1) { userRepository.save(any()) } + } + } + } + } +)