package de.codecentric.moviedatabase.shop.controller;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.math.BigDecimal;
import java.util.UUID;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.codecentric.moviedatabase.shop.domain.Movie;
import de.codecentric.moviedatabase.shop.repositories.MovieRepository;
import org.junit.Before;
import org.junit.Test;
public class ShopRestControllerTest {
private static final UUID TEST_UUID = UUID.randomUUID();
private ShopRestController controller;
private MovieRepository movieRepository;
private ObjectMapper objectMapper;
@Before
public void setUp() throws Exception {
movieRepository = mock(MovieRepository.class);
objectMapper = mock(ObjectMapper.class);
controller = new ShopRestController(movieRepository, "test-base-url", objectMapper);
}
@Test
public void shouldSetUrlsOnMovies() throws Exception {
when(movieRepository.findOne(TEST_UUID)).thenReturn(new Movie());
Movie movie = controller.getMovie(TEST_UUID);
assertThat(movie.getMovieUrl(), equalTo("test-base-url/movies/" + TEST_UUID));
}
@Test
public void shouldUpdateMovies() throws Exception {
String movieString = "Some content";
when(objectMapper.readValue(movieString, Movie.class)).thenReturn(newMovie(20, 12.99));
Movie movieFromRepository = newMovie(5, 9.99);
when(movieRepository.findOne(TEST_UUID)).thenReturn(movieFromRepository);
controller.updateMovie(TEST_UUID, movieString);
assertThat(movieFromRepository.getQuantity(), equalTo(20));
assertThat(movieFromRepository.getPrice(), equalTo(BigDecimal.valueOf(12.99)));
}
private static Movie newMovie(int quantity, double price) {
Movie movie = new Movie();
movie.setQuantity(quantity);
movie.setPrice(BigDecimal.valueOf(price));
return movie;
}
}