@@ -5,10 +5,14 @@ import io.kotest.core.spec.style.BehaviorSpec
55import io.kotest.matchers.collections.shouldHaveSize
66import io.kotest.matchers.shouldBe
77import io.mockk.every
8+ import io.mockk.justRun
89import io.mockk.mockk
10+ import io.mockk.verify
911import kotlinx.datetime.LocalDate
1012import kr.io.team.loop.common.domain.MemberId
13+ import kr.io.team.loop.common.domain.exception.AccessDeniedException
1114import kr.io.team.loop.common.domain.exception.DuplicateEntityException
15+ import kr.io.team.loop.common.domain.exception.EntityNotFoundException
1216import kr.io.team.loop.review.domain.model.PeriodKey
1317import kr.io.team.loop.review.domain.model.Review
1418import kr.io.team.loop.review.domain.model.ReviewCommand
@@ -208,4 +212,41 @@ class ReviewServiceTest :
208212 }
209213 }
210214 }
215+
216+ Given (" 회고 삭제 시" ) {
217+ val reviewId = ReviewId (1L )
218+ val command = ReviewCommand .Delete (reviewId = reviewId)
219+
220+ When (" 본인 회고이면" ) {
221+ every { reviewRepository.findById(reviewId) } returns savedReview
222+ justRun { reviewRepository.delete(command) }
223+
224+ reviewService.delete(command, memberId)
225+
226+ Then (" 삭제가 수행된다" ) {
227+ verify { reviewRepository.delete(command) }
228+ }
229+ }
230+
231+ When (" 회고가 존재하지 않으면" ) {
232+ every { reviewRepository.findById(reviewId) } returns null
233+
234+ Then (" EntityNotFoundException이 발생한다" ) {
235+ shouldThrow<EntityNotFoundException > {
236+ reviewService.delete(command, memberId)
237+ }
238+ }
239+ }
240+
241+ When (" 다른 사용자의 회고이면" ) {
242+ val otherMemberId = MemberId (99L )
243+ every { reviewRepository.findById(reviewId) } returns savedReview
244+
245+ Then (" AccessDeniedException이 발생한다" ) {
246+ shouldThrow<AccessDeniedException > {
247+ reviewService.delete(command, otherMemberId)
248+ }
249+ }
250+ }
251+ }
211252 })
0 commit comments