11package org .dfbf .soundlink .domain .user ;
22
3+ import org .dfbf .soundlink .domain .emotionRecord .entity .SpotifyMusic ;
34import org .dfbf .soundlink .domain .emotionRecord .repository .EmotionRecordRepository ;
45import org .dfbf .soundlink .domain .emotionRecord .repository .SpotifyMusicRepository ;
56import org .dfbf .soundlink .domain .user .dto .request .UserSignUpDto ;
7+ import org .dfbf .soundlink .domain .user .dto .request .UserUpdateDto ;
68import org .dfbf .soundlink .domain .user .entity .User ;
9+ import org .dfbf .soundlink .domain .user .repository .ProfileMusicRepository ;
710import org .dfbf .soundlink .domain .user .repository .UserRepository ;
811import org .dfbf .soundlink .domain .user .service .UserService ;
12+ import org .dfbf .soundlink .global .comm .enums .SocialType ;
913import org .dfbf .soundlink .global .exception .ErrorCode ;
1014import org .dfbf .soundlink .global .exception .ResponseResult ;
1115import org .junit .jupiter .api .DisplayName ;
@@ -28,44 +32,56 @@ public class UserServiceTest {
2832 @ InjectMocks
2933 private UserService userService ;
3034
31- @ Mock
35+ @ Mock ( lenient = true )
3236 private UserRepository userRepository ;
3337
3438 @ Mock
3539 private SpotifyMusicRepository spotifyMusicRepository ;
3640
37- @ Mock
41+ @ Mock ( lenient = true )
3842 private BCryptPasswordEncoder passwordEncoder ;
3943
4044 @ Mock
4145 private EmotionRecordRepository emotionRecordRepository ;
4246
47+ @ Mock
48+ private ProfileMusicRepository profileMusicRepository ;
49+
4350 // 회원 정보 수정
44- // @Test
45- // public void testUpdateUser() {
46- // // Given
47- // Long userId = 1L;
48- // UserUpdateDto userUpdateDto = mock(UserUpdateDto.class);
49- // User existingUser = mock(User.class);
50- // SpotifyMusic spotifyMusic = mock(SpotifyMusic.class);
51- //
52- //
53- // // When
54- // when(userRepository.findById(userId)).thenReturn(Optional.of(existingUser));
55- // when(userUpdateDto.spotifyId()).thenReturn(123L);
56- // when(spotifyMusicRepository.findById(123L)).thenReturn(Optional.of(spotifyMusic));
57- //
58- // ResponseResult result = userService.updateUser(userId, userUpdateDto);
59- //
60- //
61- // // Then
62- // assertEquals(200, result.getCode());
63- // assertEquals("성공", result.getMessage());
64- //
65- // verify(spotifyMusicRepository).save(any(SpotifyMusic.class));
66- //
67- // verify(existingUser).update(eq(userUpdateDto), any(BCryptPasswordEncoder.class), eq(spotifyMusic));
68- // }
51+ @ Test
52+ void updateUser_Success () {
53+ // Given
54+ Long userId = 1L ;
55+ User user = mock (User .class );
56+
57+ UserUpdateDto updateDto = new UserUpdateDto ( //dto는 mock객체로 사용하지 않음.
58+ 59+ Optional .of ("newLoginId" ),
60+ Optional .of ("newNickName" ),
61+ Optional .of ("newPassword" ),
62+ Optional .of ("spotify123" ), // Spotify ID 존재
63+ Optional .of ("New Title" ),
64+ Optional .of ("New Artist" ),
65+ Optional .of ("New Album Image" )
66+ );
67+
68+ SpotifyMusic spotifyMusic = new SpotifyMusic (updateDto );
69+
70+ // Mocking
71+ when (userRepository .findByUserIdWithCache (userId )).thenReturn (Optional .of (user ));
72+ when (spotifyMusicRepository .findBySpotifyId ("spotify123" )).thenReturn (Optional .of (spotifyMusic ));
73+ when (passwordEncoder .encode (anyString ())).thenReturn ("encodedPassword" );
74+
75+ // When
76+ ResponseResult result = userService .updateUser (userId , updateDto );
77+
78+ // Then
79+ assertEquals (200 , result .getCode ());
80+ verify (userRepository ).saveWithCache (any (User .class )); //수정 저장 확인(유저,캐시)
81+ verify (profileMusicRepository ).save (any ()); //스포티파이 저장 확인
82+ }
83+
84+
6985
7086 @ Test
7187 @ DisplayName ("회원가입 테스트 성공 - 비밀번호 암호화 및 저장" )
0 commit comments