diff --git a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java index 71436ff87..0ab6aa0d2 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/SiteUserService.java @@ -88,7 +88,10 @@ public ProfileImageUpdateResponse updateProfileImage(String email, MultipartFile SiteUser siteUser = siteUserRepository.getByEmail(email); validateProfileImage(imageFile); - s3Service.deleteExProfile(email); + // 프로필 이미지를 처음 수정하는 경우에는 deleteExProfile 수행하지 않음 + if(!isDefaultProfileImage(siteUser.getProfileImageUrl())){ + s3Service.deleteExProfile(email); + } UploadedFileUrlResponse uploadedFileUrlResponse = s3Service.uploadFile(imageFile, ImgType.PROFILE); siteUser.setProfileImageUrl(uploadedFileUrlResponse.fileUrl()); siteUserRepository.save(siteUser); @@ -102,6 +105,11 @@ private void validateProfileImage(MultipartFile imageFile) { } } + private boolean isDefaultProfileImage(String profileImageUrl) { + String prefix = "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/"; + return profileImageUrl == null || !profileImageUrl.startsWith(prefix); + } + /* * 닉네임을 수정한다. * */ diff --git a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java index f6a330348..7cfeb94c6 100644 --- a/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java +++ b/src/test/java/com/example/solidconnection/unit/service/SiteUserServiceTest.java @@ -49,6 +49,7 @@ public class SiteUserServiceTest { private SiteUser siteUser; private MultipartFile imageFile; private UploadedFileUrlResponse uploadedFileUrlResponse; + private final String defaultProfileImageUrl = "http://k.kakaocdn.net/dn/o2c5A/btsASaNh2Lr/Xum5kRyuErD8LIuLQEWfC0/img_640x640.jpg"; @BeforeEach void setUp() { @@ -62,7 +63,7 @@ private SiteUser createSiteUser() { return new SiteUser( "test@example.com", "nickname", - "http://example.com/profile.jpg", + "https://solid-connection-uploaded.s3.ap-northeast-2.amazonaws.com/profile/abcd", "1999-01-01", PreparationStatus.CONSIDERING, Role.MENTEE, @@ -80,6 +81,40 @@ private UploadedFileUrlResponse createUploadedFileUrlResponse() { return new UploadedFileUrlResponse("https://s3.example.com/test1.png"); } + @Test + void 초기_프로필_이미지를_수정한다_kakao() { + siteUser.setProfileImageUrl(defaultProfileImageUrl); + when(siteUserRepository.getByEmail(siteUser.getEmail())).thenReturn(siteUser); + when(s3Service.uploadFile(imageFile, ImgType.PROFILE)).thenReturn(uploadedFileUrlResponse); + + // When + ProfileImageUpdateResponse profileImageUpdateResponse = + siteUserService.updateProfileImage(siteUser.getEmail(), imageFile); + // Then + assertEquals(profileImageUpdateResponse, ProfileImageUpdateResponse.from(siteUser)); + verify(siteUserRepository, times(1)).getByEmail(siteUser.getEmail()); + verify(s3Service, times(0)).deleteExProfile(siteUser.getEmail()); + verify(s3Service, times(1)).uploadFile(imageFile, ImgType.PROFILE); + verify(siteUserRepository, times(1)).save(any(SiteUser.class)); + } + + @Test + void 초기_프로필_이미지를_수정한다_null() { + siteUser.setProfileImageUrl(null); + when(siteUserRepository.getByEmail(siteUser.getEmail())).thenReturn(siteUser); + when(s3Service.uploadFile(imageFile, ImgType.PROFILE)).thenReturn(uploadedFileUrlResponse); + + // When + ProfileImageUpdateResponse profileImageUpdateResponse = + siteUserService.updateProfileImage(siteUser.getEmail(), imageFile); + // Then + assertEquals(profileImageUpdateResponse, ProfileImageUpdateResponse.from(siteUser)); + verify(siteUserRepository, times(1)).getByEmail(siteUser.getEmail()); + verify(s3Service, times(0)).deleteExProfile(siteUser.getEmail()); + verify(s3Service, times(1)).uploadFile(imageFile, ImgType.PROFILE); + verify(siteUserRepository, times(1)).save(any(SiteUser.class)); + } + @Test void 프로필_이미지를_수정한다() { // Given