Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.cheeeese.album.domain.Album;
import com.cheeeese.album.domain.type.Role;
import com.cheeeese.album.dto.response.AlbumInfoResponse;
import com.cheeeese.photo.domain.Photo;
import com.cheeeese.photo.domain.PhotoStatus;
import com.cheeeese.photo.dto.response.*;
Expand Down
8 changes: 7 additions & 1 deletion src/test/java/com/cheeeese/album/AlbumServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.cheeeese.album;

import com.cheeeese.album.application.AlbumService;
import com.cheeeese.album.application.logger.AlbumLogger;
import com.cheeeese.album.application.support.AlbumReader;
import com.cheeeese.album.application.validator.AlbumValidator;
import com.cheeeese.album.domain.Album;
import com.cheeeese.album.domain.UserAlbum;
Expand Down Expand Up @@ -54,6 +56,8 @@ class AlbumServiceTest {
@Mock private PhotoService photoService;
@Mock private AlbumExpirationRedisRepository albumExpirationRedisRepository;
@Mock private CdnUrlResolver cdnUrlResolver;
@Mock private AlbumReader albumReader;
@Mock private AlbumLogger albumLogger;

@BeforeEach
void setUp() {
Expand All @@ -67,7 +71,9 @@ void setUp() {
photoLikesRepository,
photoService,
albumExpirationRedisRepository,
cdnUrlResolver
cdnUrlResolver,
albumReader,
albumLogger
);
}

Expand Down
40 changes: 40 additions & 0 deletions src/test/java/com/cheeeese/fixture/FixtureFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
import com.cheeeese.album.infrastructure.mapper.UserAlbumMapper;
import com.cheeeese.oauth2.domain.OAuth2UserInfo;
import com.cheeeese.oauth2.infrastructure.userinfo.KakaoUserInfo;
import com.cheeeese.photo.domain.Photo;
import com.cheeeese.photo.domain.PhotoHistory;
import com.cheeeese.photo.domain.PhotoLikes;
import com.cheeeese.photo.domain.PhotoStatus;
import com.cheeeese.photo.infrastructure.mapper.PhotoHistoryMapper;
import com.cheeeese.photo.infrastructure.mapper.PhotoLikesMapper;
import com.cheeeese.photo.infrastructure.mapper.PhotoMapper;
import com.cheeeese.user.domain.User;
import com.cheeeese.user.infrastructure.mapper.UserMapper;
import com.github.f4b6a3.uuid.UuidCreator;
Expand Down Expand Up @@ -86,4 +93,37 @@ public static UserAlbum createHostUserAlbum(User user, Album album) {
Role.MAKER
);
}

public static Photo createPhoto(User user, Album album, LocalDateTime captureTime) {
return PhotoMapper.toEntity(
user,
album,
captureTime
);
}

public static Photo createCompletedPhoto(User user, Album album, LocalDateTime now) {
return Photo.builder()
.user(user)
.album(album)
.imageUrl(null)
.thumbnailUrl(null)
.captureTime(now)
.status(PhotoStatus.COMPLETED)
.build();
}

public static PhotoHistory createPhotoHistory(User user, Photo photo) {
return PhotoHistoryMapper.toEntity(
user,
photo
);
}

public static PhotoLikes createPhotoLikes(User user, Photo photo) {
return PhotoLikesMapper.toEntity(
user,
photo
);
}
}
7 changes: 4 additions & 3 deletions src/test/java/com/cheeeese/photo/PhotoServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;

import java.time.LocalDateTime;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -56,7 +57,7 @@ void createPresignedUrls_Success() {
Album album = Album.builder().makerId(1L).maxPhotoCount(100).build();

PhotoPresignedUrlRequest.FileInfo fileInfo =
new PhotoPresignedUrlRequest.FileInfo("test.jpg", 1000L, "image/jpeg");
new PhotoPresignedUrlRequest.FileInfo("1.jpg", LocalDateTime.now(), 3000000, "image/jpeg");
PhotoPresignedUrlRequest request =
new PhotoPresignedUrlRequest(code, List.of(fileInfo));

Expand Down Expand Up @@ -98,8 +99,8 @@ void createPresignedUrls_Fail_MaxCountExceeded() {
given(photoRepository.countActivePhotosByAlbumId(eq(1L), anyList())).willReturn(99L);

PhotoPresignedUrlRequest request = new PhotoPresignedUrlRequest(code, List.of(
new PhotoPresignedUrlRequest.FileInfo("1.jpg", 100L, "image/jpeg"),
new PhotoPresignedUrlRequest.FileInfo("2.jpg", 100L, "image/jpeg")
new PhotoPresignedUrlRequest.FileInfo("1.jpg", LocalDateTime.now(), 3000000, "image/jpeg"),
new PhotoPresignedUrlRequest.FileInfo("2.jpg", LocalDateTime.now(), 3000000, "image/jpeg")
));

// Validator가 예외를 던지도록 설정 (Spy나 실제 객체 사용 시에는 로직에 따라 발생, 여기선 Mock의 행동 정의)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package com.cheeeese.photo.integration;

import com.cheeeese.album.domain.Album;
import com.cheeeese.album.domain.UserAlbum;
import com.cheeeese.album.domain.type.AlbumSorting;
import com.cheeeese.album.infrastructure.persistence.AlbumRepository;
import com.cheeeese.album.infrastructure.persistence.UserAlbumRepository;
import com.cheeeese.fixture.FixtureFactory;
import com.cheeeese.photo.application.PhotoInfoService;
import com.cheeeese.photo.application.PhotoQueryService;
import com.cheeeese.photo.domain.Photo;
import com.cheeeese.photo.domain.PhotoHistory;
import com.cheeeese.photo.domain.PhotoLikes;
import com.cheeeese.photo.dto.response.*;
import com.cheeeese.photo.infrastructure.persistence.PhotoHistoryRepository;
import com.cheeeese.photo.infrastructure.persistence.PhotoLikesRepository;
import com.cheeeese.photo.infrastructure.persistence.PhotoRepository;
import com.cheeeese.user.domain.User;
import com.cheeeese.user.infrastructure.persistence.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
@Transactional
public class PhotoQueryServiceIntegrationTest {

@Autowired
private UserRepository userRepository;

@Autowired
private AlbumRepository albumRepository;

@Autowired
private UserAlbumRepository userAlbumRepository;

@Autowired
private PhotoRepository photoRepository;

@Autowired
private PhotoHistoryRepository photoHistoryRepository;

@Autowired
private PhotoLikesRepository photoLikesRepository;

@Autowired
private PhotoQueryService photoQueryService;

@Autowired
private PhotoInfoService photoInfoService;

private User testUser;
private Album testAlbum;
private UserAlbum testUserAlbum;
private Photo testPhoto;
private PhotoHistory testPhotoHistory;
private PhotoLikes testPhotoLikes;

@BeforeEach
void setUp() {
testUser = userRepository.save(FixtureFactory.createKakaoUser());
testAlbum = albumRepository.save(FixtureFactory.createAlbum(testUser.getId()));
testUserAlbum = userAlbumRepository.save(FixtureFactory.createHostUserAlbum(testUser, testAlbum));
for (int i = 1; i <= 3; i++) {
testPhoto = FixtureFactory.createCompletedPhoto(testUser, testAlbum, LocalDateTime.now());
testPhoto.updateImageUrl("album/" + testAlbum.getId() + "/original/photo_" + i + ".jpg");
photoRepository.save(testPhoto);
}
photoRepository.flush();
testPhotoHistory = photoHistoryRepository.save(FixtureFactory.createPhotoHistory(testUser, testPhoto));
testPhotoLikes = photoLikesRepository.save(FixtureFactory.createPhotoLikes(testUser, testPhoto));
}

@Test
@DisplayName("사진 목록 조회 - 페이징 및 CDN URL 변환 확인")
void getPhotoList() {
// when
PhotoPageResponse page = photoQueryService.getPhotoPage(
testUser, testAlbum.getCode(), 0, 20, AlbumSorting.CREATED_AT
);

// then
assertThat(page.responses()).hasSize(3);
assertThat(page.responses().getFirst().imageUrl()).contains("say-cheese.edge.naverncp.com");
}

@Test
@DisplayName("사진 상세 조회 테스트 - CDN URL, 최근 다운로드 여부 확인")
void getPhotoDetail() {
// given
testPhoto.updateImageUrl("album/" + testAlbum.getId() + "/original/test.jpg");
photoHistoryRepository.save(testPhotoHistory);

// when
PhotoDetailResponse response = photoQueryService.getPhotoDetail(testUser, testAlbum.getCode(), testPhoto.getId());

// then
assertThat(response.imageUrl()).contains("edge.naverncp.com");
assertThat(response.isRecentlyDownloaded()).isTrue();
}

@Test
@DisplayName("띱한 사용자 목록 조회")
void getLikedUserList() {
// when
PhotoLikedUserResponse likedUsers = photoInfoService.getPhotoLikedUsers(
testUser, testAlbum.getCode(), testPhoto.getId()
);

// then
assertThat(likedUsers.photoLikers()).hasSize(1);
assertThat(likedUsers.photoLikers().getFirst().name()).isNotBlank();
}

@Test
@DisplayName("띱한 사진 목록 조회")
void getUserLikedPhotoList() {
// when
PhotoLikedPageResponse page = photoQueryService.getPhotoLiked(
testUser, testAlbum.getCode(), 0, 10
);

// then
assertThat(page.responses()).hasSize(1);
assertThat(page.responses().getFirst().imageUrl()).contains("say-cheese.edge.naverncp.com");
}
}