Package br.com.caelum.vraptor.musicjungle.controller

Source Code of br.com.caelum.vraptor.musicjungle.controller.MusicControllerTest

package br.com.caelum.vraptor.musicjungle.controller;

import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import br.com.caelum.vraptor.musicjungle.dao.MusicDao;
import br.com.caelum.vraptor.musicjungle.dao.UserDao;
import br.com.caelum.vraptor.musicjungle.enums.MusicType;
import br.com.caelum.vraptor.musicjungle.files.Musics;
import br.com.caelum.vraptor.musicjungle.interceptor.UserInfo;
import br.com.caelum.vraptor.musicjungle.model.Music;
import br.com.caelum.vraptor.musicjungle.model.User;
import br.com.caelum.vraptor.musicjungle.util.model.MusicBuilder;
import br.com.caelum.vraptor.musicjungle.util.model.UserBuilder;
import br.com.caelum.vraptor.observer.upload.UploadedFile;
import br.com.caelum.vraptor.util.test.MockHttpResult;
import br.com.caelum.vraptor.util.test.MockSerializationResult;
import br.com.caelum.vraptor.util.test.MockValidator;

public class MusicControllerTest {

  private MockSerializationResult result;
  private MockValidator validator;
  private MusicController controller;
  private Music music;
  private User user;
 
  @Mock private UserInfo userInfo;
  @Mock private MusicDao dao;
  @Mock private Musics musics;
  @Mock private UploadedFile uploadFile;
  @Mock private UserDao userDao;
 
  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);

    result = new MockSerializationResult();
    validator = new MockValidator();
    controller = new MusicController(dao, userInfo, result, validator, musics, userDao);
   
    music = new MusicBuilder().withId(1L).withType(MusicType.ROCK).withTitle("Some Music").withDescription("Some description").build();
    user = new UserBuilder().withName("Renan").withLogin("renanigt").withPassword("1234").build();
  }
 
  @Test
  public void shouldAddMusic() {
    when(userInfo.getUser()).thenReturn(user);

    controller.add(music, uploadFile);
   
    verify(dao).add(music);
    verify(musics).save(uploadFile, music);

    assertThat(result.included().get("notice").toString(), is(music.getTitle() + " music added"));
  }

  @Test
  public void shouldShowMusicWhenExists() {
    when(dao.load(music)).thenReturn(music);
   
    controller.show(music);
   
    assertNotNull(result.included().get("music"));
    assertThat((Music) result.included().get("music"), is(music));
  }
 
  @Test
  public void shouldNotShowMusicWhenDoesNotExists() {
    when(dao.load(music)).thenReturn(null);
   
    controller.show(music);
   
    assertNull(result.included().get("music"));
  }
 
  @SuppressWarnings("unchecked")
  @Test
  public void shouldReturnMusicList() {
    when(dao.searchSimilarTitle(music.getTitle())).thenReturn(Arrays.asList(music));
    controller.search(music);
    assertThat((List<Music>) result.included().get("musics"), contains(music));
  }
 
  @SuppressWarnings("unchecked")
  @Test
  public void shouldReturnEmptyList() {
    when(dao.searchSimilarTitle(music.getTitle())).thenReturn(new ArrayList<Music>());
    controller.search(music);
    List<Music> musics = (List<Music>) result.included().get("musics");
    assertThat(musics, empty());
  }
 
  @Test
  public void shouldNotDownloadMusicWhenDoesNotExist() {
    when(dao.load(music)).thenReturn(music);
    when(musics.getFile(music)).thenReturn(new File("/tmp/uploads/Music_" + music.getId() + ".mp3"));
    try {
      controller.download(music);
      fail("Should throw an exception.");
    } catch (FileNotFoundException e) {
      verify(musics).getFile(music);
    }
  }
 
  @Test
  public void shouldShowAllMusicsAsJSON() throws Exception {
    when(dao.listAll()).thenReturn(Arrays.asList(music));
    controller.showAllMusicsAsJSON();
    assertThat(result.serializedResult(), is("{\"list\":[{\"id\":1,\"title\":\"Some Music\"," +
        "\"description\":\"Some description\",\"type\":\"ROCK\"}]}"));
  }
 
  @Test
  public void shouldShowAllMusicsAsXML() throws Exception {
    when(dao.listAll()).thenReturn(Arrays.asList(music));
    controller.showAllMusicsAsXML();
    assertThat(result.serializedResult(),
        is("<list><music><id>1</id><title>Some Music</title><description>Some description</description><type>ROCK</type></music></list>"));
  }
 
  @Test
  public void shouldShowAllMusicsAsHTTP() {
    MockHttpResult mockHttpResult = new MockHttpResult();
    controller = new MusicController(dao, userInfo, mockHttpResult, validator, musics, userDao);
    when(dao.listAll()).thenReturn(Arrays.asList(music));
    controller.showAllMusicsAsHTTP();
    assertThat(mockHttpResult.getBody(), is("<p class=\"content\">"+ Arrays.asList(music).toString()+"</p>"));
  }
 
  @Test
  public void shouldListAs() throws Exception {
    when(dao.listAll()).thenReturn(Arrays.asList(music));
    controller.listAs();
    assertThat(result.serializedResult(),
        is("<list><music><id>1</id><title>Some Music</title><description>Some description</description><type>ROCK</type></music></list>"));
  }
 
}
TOP

Related Classes of br.com.caelum.vraptor.musicjungle.controller.MusicControllerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.