11package org .dfbf .soundlink .domain .user ;
22
3+ import org .dfbf .soundlink .domain .emotionRecord .repository .EmotionRecordRepository ;
34import org .dfbf .soundlink .domain .emotionRecord .repository .SpotifyMusicRepository ;
5+ import org .dfbf .soundlink .domain .user .dto .request .UserSignUpDto ;
6+ import org .dfbf .soundlink .domain .user .entity .User ;
47import org .dfbf .soundlink .domain .user .repository .UserRepository ;
58import org .dfbf .soundlink .domain .user .service .UserService ;
9+ import org .dfbf .soundlink .global .exception .ErrorCode ;
10+ import org .dfbf .soundlink .global .exception .ResponseResult ;
11+ import org .junit .jupiter .api .DisplayName ;
12+ import org .junit .jupiter .api .Test ;
613import org .junit .jupiter .api .extension .ExtendWith ;
714import org .mockito .InjectMocks ;
815import org .mockito .Mock ;
916import org .mockito .junit .jupiter .MockitoExtension ;
1017import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
1118
19+ import java .util .Optional ;
20+
21+ import static org .dfbf .soundlink .global .comm .enums .SocialType .KAKAO ;
22+ import static org .mockito .Mockito .*;
23+ import static org .mockito .ArgumentMatchers .any ;
24+ import static org .junit .jupiter .api .Assertions .assertEquals ;
25+
1226@ ExtendWith (MockitoExtension .class )
1327public class UserServiceTest {
1428 @ InjectMocks
@@ -23,6 +37,9 @@ public class UserServiceTest {
2337 @ Mock
2438 private BCryptPasswordEncoder passwordEncoder ;
2539
40+ @ Mock
41+ private EmotionRecordRepository emotionRecordRepository ;
42+
2643 // 회원 정보 수정
2744// @Test
2845// public void testUpdateUser() {
@@ -50,4 +67,46 @@ public class UserServiceTest {
5067// verify(existingUser).update(eq(userUpdateDto), any(BCryptPasswordEncoder.class), eq(spotifyMusic));
5168// }
5269
70+ @ Test
71+ @ DisplayName ("회원가입 테스트 성공 - 비밀번호 암호화 및 저장" )
72+ void signUp_Success (){
73+ //given
74+ UserSignUpDto userSignUpDto = new UserSignUpDto (
75+ "testNickname" ,
12345L ,
KAKAO ,
"testLoginId" ,
"password123" ,
"[email protected] " 76+ );
77+ //when
78+ //save 메소드 호출 시 모킹 처리
79+ when (passwordEncoder .encode (userSignUpDto .password ())).thenReturn ("encodedPassword" );
80+
81+ ResponseResult result = userService .signUp (userSignUpDto );
82+ //then
83+ assertEquals (200 , result .getCode ());
84+
85+ verify (userRepository , times (1 )).save (any (User .class ));
86+
87+ verify (passwordEncoder , times (1 )).encode (userSignUpDto .password ());
88+ }
89+
90+ @ Test
91+ @ DisplayName ("회원삭제 성공" )
92+ void deleteUser_Success (){
93+ //given
94+ Long userId = 1L ;
95+ User user = mock (User .class );
96+
97+ // 유저를 찾기
98+ when (userRepository .findByUserIdWithCache (userId )).thenReturn (Optional .of (user ));
99+ // 감정 기록 삭제, doNotion()-> 단지 메소드가 호출되었는지만 확인
100+ doNothing ().when (emotionRecordRepository ).deleteByUser (user );
101+ // 유저 삭제
102+ doNothing ().when (userRepository ).deleteById (userId );
103+
104+ //when
105+ ResponseResult result = userService .deleteUser (userId );
106+
107+ //then
108+ assertEquals (200 , result .getCode ());
109+ verify (emotionRecordRepository , times (1 )).deleteByUser (user ); //(1): 1번 호출되었는지 확인 = 감정기록이 삭제 됨.
110+ // verify(userRepository, times(0)).deleteById(userId);//(0):호출되지 않았는지 확인 = 사용자가 삭제 되지 않음.(1):성공적으로 삭제됨.
111+ }
53112}
0 commit comments