Skip to content

Commit 9a0eb24

Browse files
sgo722claude
andcommitted
[test] CodeTimeService 단위 테스트 추가
- 추천 세션 일관성 검증 (시그널 제외 로직) - 차단 관계 즉시 제외 검증 - 추천 순서 유지 검증 - WITHDRAWN 회원 자동 필터링 검증 - mockito-kotlin 의존성 추가 - PreVerificationStrategyTest asyncNotificationService 파라미터 추가 Resolves #386 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent bbd9841 commit 9a0eb24

3 files changed

Lines changed: 371 additions & 9 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dependencies {
3535
testImplementation("io.rest-assured:rest-assured:5.3.1")
3636
testImplementation("org.springframework.boot:spring-boot-starter-test")
3737
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
38+
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
3839
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
3940

4041
// jwt

src/test/kotlin/codel/member/business/signup/PreVerificationStrategyTest.kt

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import codel.member.business.SignupService
44
import codel.member.domain.Member
55
import codel.member.domain.MemberStatus
66
import codel.member.domain.OauthType
7+
import codel.member.domain.Profile
78
import codel.member.infrastructure.MemberJpaRepository
9+
import codel.notification.business.IAsyncNotificationService
810
import org.junit.jupiter.api.Assertions.assertEquals
911
import org.junit.jupiter.api.BeforeEach
1012
import org.junit.jupiter.api.DisplayName
@@ -13,49 +15,63 @@ import org.mockito.ArgumentCaptor
1315
import org.mockito.Mockito.*
1416
import org.springframework.http.HttpStatus
1517
import org.springframework.mock.web.MockMultipartFile
18+
import java.time.LocalDate
1619

1720
class PreVerificationStrategyTest {
1821

1922
private lateinit var signupService: SignupService
2023
private lateinit var memberJpaRepository: MemberJpaRepository
24+
private lateinit var asyncNotificationService: IAsyncNotificationService
2125
private lateinit var strategy: PreVerificationStrategy
2226

2327
@BeforeEach
2428
fun setUp() {
2529
signupService = mock(SignupService::class.java)
2630
memberJpaRepository = mock(MemberJpaRepository::class.java)
27-
strategy = PreVerificationStrategy(signupService, memberJpaRepository)
31+
asyncNotificationService = mock(IAsyncNotificationService::class.java)
32+
strategy = PreVerificationStrategy(signupService, memberJpaRepository, asyncNotificationService)
2833
}
2934

30-
@DisplayName("PERSONALITY_COMPLETED 상태에서는 히든 이미지 등록 후 HIDDEN_COMPLETED 상태로 변경한다")
35+
@DisplayName("PERSONALITY_COMPLETED 상태에서는 히든 이미지 등록 후 PENDING 상태로 변경한다")
3136
@Test
32-
fun handleHiddenImages_personalityCompleted_changeToHiddenCompleted() {
37+
fun handleHiddenImages_personalityCompleted_changeToPending() {
3338
// given
39+
val profile = Profile(
40+
id = 1L,
41+
codeName = "테스트유저",
42+
bigCity = "서울",
43+
smallCity = "강남구",
44+
birthDate = LocalDate.of(1990, 1, 1)
45+
)
46+
3447
val member = Member(
3548
id = 1L,
3649
oauthId = "test-oauth-id",
3750
oauthType = OauthType.KAKAO,
3851
memberStatus = MemberStatus.PERSONALITY_COMPLETED,
39-
email = "test@test.com"
52+
email = "test@test.com",
53+
profile = profile
4054
)
4155

56+
profile.member = member
57+
4258
val images = listOf(
4359
MockMultipartFile("image1", "test1.jpg", "image/jpeg", "test1".toByteArray()),
4460
MockMultipartFile("image2", "test2.jpg", "image/jpeg", "test2".toByteArray()),
4561
MockMultipartFile("image3", "test3.jpg", "image/jpeg", "test3".toByteArray())
4662
)
4763

64+
// memberJpaRepository.findByMemberId가 member를 반환하도록 mock 설정
65+
`when`(memberJpaRepository.findByMemberId(1L)).thenReturn(member)
66+
4867
// when
4968
val response = strategy.handleHiddenImages(member, images)
5069

5170
// then
5271
verify(signupService, times(1)).registerHiddenImages(member, images)
72+
verify(memberJpaRepository, times(1)).findByMemberId(1L)
5373

54-
val memberCaptor = ArgumentCaptor.forClass(Member::class.java)
55-
verify(memberJpaRepository, times(1)).save(memberCaptor.capture())
56-
57-
val savedMember = memberCaptor.value
58-
assertEquals(MemberStatus.HIDDEN_COMPLETED, savedMember.memberStatus)
74+
assertEquals(MemberStatus.PENDING, member.memberStatus)
5975
assertEquals(HttpStatus.OK, response.statusCode)
6076
}
6177
}

0 commit comments

Comments
 (0)