Compare commits

...

5 Commits

6 changed files with 75 additions and 16 deletions

View File

@@ -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

View File

@@ -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<MovieTime, Long> {
@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<MovieTime> 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<MovieTime> findValidMovieTimes(Movie movie, LocalDateTime startOfDay, LocalDateTime endOfDay);
}

View File

@@ -34,7 +34,7 @@ public class MovieTimeServiceImpl implements MovieTimeService {
LocalDateTime startOfDay = runningDate.atStartOfDay().plusHours(6);
LocalDateTime endOfDay = startOfDay.plusDays(1);
List<MovieTime> movieTimes = movieTimeRepository.findValidMovieTimes(movie.getId(), startOfDay, endOfDay);
List<MovieTime> movieTimes = movieTimeRepository.findValidMovieTimes(movie, startOfDay, endOfDay);
return movieTimes.stream()
.map(MovieTimeDto::from)

View File

@@ -10,7 +10,7 @@ import lombok.Getter;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MovieTimeDto {
private long movieTimeId;
private Long movieTimeId;
private Integer theaterNumber;

View File

@@ -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<MovieDto> 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<MovieDto> movieDtoList = movieService.getMovies();

View File

@@ -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<MovieTime> 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<MovieTimeDto> 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<MovieTimeDto> movieTimeDtoList = movieTimeService.getMovieTimes(title, LocalDate.of(2022, 07, 01));
// then
assertTrue(!movieTimeDtoList.isEmpty());
}
}