diff --git a/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java b/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java index feb93a8..55ee161 100644 --- a/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java +++ b/server/src/main/java/com/ticketing/server/movie/domain/MovieTime.java @@ -7,10 +7,14 @@ import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; @Entity @Getter +@NoArgsConstructor +@AllArgsConstructor public class MovieTime extends AbstractEntity { @NotNull diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java index 8f65553..d7d668b 100644 --- a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimeRepository.java @@ -1,5 +1,6 @@ package com.ticketing.server.movie.domain.repository; +import com.ticketing.server.movie.domain.Movie; import com.ticketing.server.movie.domain.MovieTime; import java.time.LocalDateTime; import java.util.List; @@ -10,12 +11,11 @@ import org.springframework.stereotype.Repository; @Repository public interface MovieTimeRepository extends JpaRepository { - @Query(value = "SELECT * " - + "FROM movie_time " - + "WHERE movie_id = :movieId " - + "AND start_at " - + "BETWEEN date_format(start_at, :startOfDay) " - + "AND date_format(start_at, :endOfDay)", nativeQuery = true) - List findValidMovieTimes(long movieId, LocalDateTime startOfDay, LocalDateTime endOfDay); + @Query(value = "SELECT mt " + + "FROM MovieTime mt " + + "JOIN FETCH mt.movie " + + "WHERE mt.movie = :movie " + + "AND mt.startAt BETWEEN :startOfDay AND :endOfDay ") + List findValidMovieTimes(Movie movie, LocalDateTime startOfDay, LocalDateTime endOfDay); } diff --git a/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java index ef5767c..18631c0 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/movie/service/MovieTimeServiceImpl.java @@ -34,7 +34,7 @@ public class MovieTimeServiceImpl implements MovieTimeService { LocalDateTime startOfDay = runningDate.atStartOfDay().plusHours(6); LocalDateTime endOfDay = startOfDay.plusDays(1); - List movieTimes = movieTimeRepository.findValidMovieTimes(movie.getId(), startOfDay, endOfDay); + List movieTimes = movieTimeRepository.findValidMovieTimes(movie, startOfDay, endOfDay); return movieTimes.stream() .map(MovieTimeDto::from) diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDto.java b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDto.java index a0543cb..e8832c4 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDto.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/MovieTimeDto.java @@ -10,7 +10,7 @@ import lombok.Getter; @AllArgsConstructor(access = AccessLevel.PRIVATE) public class MovieTimeDto { - private long movieTimeId; + private Long movieTimeId; private Integer theaterNumber; diff --git a/server/src/test/java/com/ticketing/server/movie/service/MovieServiceImplTest.java b/server/src/test/java/com/ticketing/server/movie/service/MovieServiceImplTest.java index 1c98e32..4f500f6 100644 --- a/server/src/test/java/com/ticketing/server/movie/service/MovieServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/movie/service/MovieServiceImplTest.java @@ -35,7 +35,8 @@ public class MovieServiceImplTest { @DisplayName("Movie Service Test - get movies when there is no movie") void shouldGetEmptyList() { // given - when(movieRepository.findValidMovies()).thenReturn(Collections.emptyList()); + when(movieRepository.findValidMovies()) + .thenReturn(Collections.emptyList()); // when List movieDtoList = movieService.getMovies(); @@ -49,11 +50,12 @@ public class MovieServiceImplTest { void shouldAbleToGetMovies() { // given movie = new Movie("범죄도시2", 106); - movieDto = movie.toDto(); + movieDto = movieDto.from(movie); movies.add(movie); movieDtos.add(movieDto); - when(movieRepository.findValidMovies()).thenReturn(movies); + when(movieRepository.findValidMovies()) + .thenReturn(movies); // when List movieDtoList = movieService.getMovies(); diff --git a/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java b/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java index b2dd6cc..b5ee570 100644 --- a/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/movie/service/MovieTimeServiceImplTest.java @@ -1,21 +1,36 @@ package com.ticketing.server.movie.service; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.any; + +import com.ticketing.server.movie.domain.Movie; +import com.ticketing.server.movie.domain.MovieTime; +import com.ticketing.server.movie.domain.Theater; +import com.ticketing.server.movie.domain.repository.MovieRepository; import com.ticketing.server.movie.domain.repository.MovieTimeRepository; +import com.ticketing.server.movie.service.dto.MovieTimeDto; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.annotation.Rollback; @ExtendWith(MockitoExtension.class) public class MovieTimeServiceImplTest { - LocalDateTime startOfDay = LocalDate.now().atStartOfDay().plusHours(6); - LocalDateTime endOfDay = startOfDay.plusDays(1); + String title = "범죄도시2"; + List movieTimes = new ArrayList<>(); + + @Mock + MovieRepository movieRepository; @Mock MovieTimeRepository movieTimeRepository; @@ -24,10 +39,48 @@ public class MovieTimeServiceImplTest { MovieTimeServiceImpl movieTimeService; @Test - @Rollback @DisplayName("MovieTime Service Test - get empty list when there is no valid movie times") void shouldGetEmptyList() { + // given + Movie movie = new Movie(title, 106); + when(movieRepository.findByTitle(title)) + .thenReturn(Optional.of(movie)); + + when(movieTimeRepository.findValidMovieTimes(any(), any(), any())) + .thenReturn(Collections.emptyList()); + + // when + List movieTimeDtoList = movieTimeService.getMovieTimes(title, LocalDate.now()); + + // then + assertTrue(movieTimeDtoList.isEmpty()); + } + + @Test + @DisplayName("MovieTime Service Test - get list when there is valid movie times") + void shouldGetMovieTimeList() { + // given + Movie movie = new Movie(title, 106); + Theater theater = new Theater(1, 100); + MovieTime movieTime = new MovieTime(movie, theater, 1, + LocalDateTime.of(2022, 7, 1, 17, 0, 0), + LocalDateTime.of(2022, 7, 1, 18, 56, 0) + ); + + movieTimes.add(movieTime); + + when(movieRepository.findByTitle(title)) + .thenReturn(Optional.of(movie)); + + when(movieTimeRepository.findValidMovieTimes(any(), any(), any())) + .thenReturn(movieTimes); + + // when + List movieTimeDtoList = movieTimeService.getMovieTimes(title, LocalDate.of(2022, 07, 01)); + + // then + assertTrue(!movieTimeDtoList.isEmpty()); } }