package annotatedspring.episodes; import annotatedspring.Application; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import java.util.ArrayList; import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {Application.class}) @WebAppConfiguration public class EpisodesServiceTest { @InjectMocks private EpisodesService episodeService; @Mock private EpisodesRepository episodesRepository; private List<Episode> persistedEpisodes; private Episode persistedEpisode; @Before public void setup() { MockitoAnnotations.initMocks(this); persistedEpisodes = new ArrayList<>(); persistedEpisode = mock(Episode.class); } @Test public void all_returnsAllEpisodes() throws Exception { when(episodesRepository.findAll()).thenReturn(persistedEpisodes); Iterable<Episode> episodes = episodeService.all(); verify(episodesRepository, times(1)).findAll(); assertThat(episodes, is(equalTo(persistedEpisodes))); } @Test public void create_addsAnEpisode() throws Exception { Episode episode = new Episode(); episodeService.create(episode); verify(episodesRepository, times(1)).save(episode); } @Test public void find_getsAnEpisode() throws Exception { when(episodesRepository.findOne(1)).thenReturn(persistedEpisode); episodeService.find(1); verify(episodesRepository, times(1)).findOne(1); } @Test public void update_updatesAnEpisode() throws Exception { Episode episode = new Episode(); when(episodesRepository.save(episode)).thenReturn(episode); episodeService.update(episode); verify(episodesRepository, times(1)).save(episode); } @Test public void published_returnsPublishedEpisodesByIdDesc() throws Exception { when(episodesRepository.findByPublishedOrderByIdDesc(true)).thenReturn(persistedEpisodes); Iterable<Episode> episodes = episodeService.published(); verify(episodesRepository, times(1)).findByPublishedOrderByIdDesc(true); assertThat(episodes, is(equalTo(persistedEpisodes))); } }