From e1c3943b85aa522e57618b0627599eff23d93880 Mon Sep 17 00:00:00 2001 From: pricelees Date: Mon, 4 Aug 2025 20:26:53 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20MemberServiceTest=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20TimeServiceTest=20=EC=9D=BC=EB=B6=80=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/business/MemberServiceTest.kt | 101 ++++++++++++++++++ .../time/business/TimeServiceTest.kt | 12 ++- 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/test/kotlin/roomescape/member/business/MemberServiceTest.kt diff --git a/src/test/kotlin/roomescape/member/business/MemberServiceTest.kt b/src/test/kotlin/roomescape/member/business/MemberServiceTest.kt new file mode 100644 index 00000000..7ee9bb2a --- /dev/null +++ b/src/test/kotlin/roomescape/member/business/MemberServiceTest.kt @@ -0,0 +1,101 @@ +package roomescape.member.business + +import io.kotest.assertions.assertSoftly +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import io.mockk.every +import io.mockk.mockk +import roomescape.member.exception.MemberErrorCode +import roomescape.member.exception.MemberException +import roomescape.member.implement.MemberFinder +import roomescape.member.implement.MemberWriter +import roomescape.member.infrastructure.persistence.MemberEntity +import roomescape.member.infrastructure.persistence.Role +import roomescape.member.web.SignupRequest +import roomescape.util.MemberFixture + +class MemberServiceTest : FunSpec({ + val memberWriter: MemberWriter = mockk() + val memberFinder: MemberFinder = mockk() + + val memberService = MemberService(memberWriter, memberFinder) + + context("findMembers") { + test("정상 응답") { + val members: List = listOf( + MemberFixture.create(name = "user1"), + MemberFixture.create(name = "user2"), + ) + + every { memberFinder.findAll() } returns members + + val response = memberService.findMembers() + + // then + assertSoftly(response.members) { + it shouldHaveSize 2 + it.map { member -> member.name } shouldContainExactly listOf("user1", "user2") + } + } + } + + context("findById") { + val id = 1L + + test("정상 응답") { + every { + memberFinder.findById(id) + } returns MemberFixture.create(id = id) + + memberService.findById(id).id shouldBe id + } + + test("회원을 찾을 수 없으면 예외 응답") { + every { + memberFinder.findById(id) + } throws MemberException(MemberErrorCode.MEMBER_NOT_FOUND) + + shouldThrow { + memberService.findById(id) + }.also { + it.errorCode shouldBe MemberErrorCode.MEMBER_NOT_FOUND + } + } + } + + context("createMember") { + val request = SignupRequest(name = "new-user", email = "new@test.com", password = "password") + + test("정상 저장") { + val member = MemberFixture.create( + name = request.name, + account = request.email, + password = request.password + ) + + every { + memberWriter.create(request.name, request.email, request.password, Role.MEMBER) + } returns member + + val response = memberService.createMember(request) + + response.id shouldBe member.id + } + + test("중복된 이메일이 있으면 예외 응답") { + every { + memberWriter.create(request.name, request.email, request.password, Role.MEMBER) + } throws MemberException(MemberErrorCode.DUPLICATE_EMAIL) + + // when & then + shouldThrow { + memberService.createMember(request) + }.also { + it.errorCode shouldBe MemberErrorCode.DUPLICATE_EMAIL + } + } + } +}) diff --git a/src/test/kotlin/roomescape/time/business/TimeServiceTest.kt b/src/test/kotlin/roomescape/time/business/TimeServiceTest.kt index 6a6893c4..0197e68a 100644 --- a/src/test/kotlin/roomescape/time/business/TimeServiceTest.kt +++ b/src/test/kotlin/roomescape/time/business/TimeServiceTest.kt @@ -31,9 +31,17 @@ class TimeServiceTest : FunSpec({ val timeService = TimeService(timeFinder, timeWriter) context("findById") { - test("시간을 찾을 수 없으면 예외 응답") { - val id = 1L + val id = 1L + test("정상 응답") { + every { + timeFinder.findById(id) + } returns TimeFixture.create(id = id) + + timeService.findById(id).id shouldBe id + } + + test("시간을 찾을 수 없으면 예외 응답") { every { timeFinder.findById(id) } throws TimeException(TimeErrorCode.TIME_NOT_FOUND)