package br.com.caelum.vraptor.musicjungle.controller; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; 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.interceptor.UserInfo; import br.com.caelum.vraptor.musicjungle.model.User; import br.com.caelum.vraptor.musicjungle.util.model.UserBuilder; import br.com.caelum.vraptor.util.test.MockResult; import br.com.caelum.vraptor.util.test.MockValidator; public class UsersControllerTest { private MockResult result; private MockValidator validator; private UsersController controller; private User user; private User anotherUser; @Mock private UserDao userDao; @Mock private UserInfo info; @Mock private MusicDao musics; @Before public void setUp() { MockitoAnnotations.initMocks(this); result = new MockResult(); validator = new MockValidator(); controller = new UsersController(userDao, result, validator, info, musics); user = new UserBuilder().withName("Renan").withLogin("renanigt").withPassword("1234").build(); anotherUser = new UserBuilder().withName("Fulano").withLogin("fulano").withPassword("3456").build(); } @Test public void shouldOpenHomeWithMusicTypes() { controller.home(); MusicType[] musicsType = (MusicType[]) result.included().get("musicTypes"); assertThat(Arrays.asList(musicsType), hasSize(MusicType.values().length)); } @SuppressWarnings("unchecked") @Test public void shouldListAllUsers() { when(userDao.listAll()).thenReturn(Arrays.asList(user, anotherUser)); controller.list(); assertThat((List<User>)result.included().get("users"), contains(user, anotherUser)); } @Test public void shouldAddUser() { controller.add(user); verify(userDao).add(user); assertThat(result.included().get("notice").toString(), is("User " + user.getName() + " successfully added")); } @Test public void shouldShowUser() { when(userDao.find(user.getLogin())).thenReturn(user); controller.show(user); assertThat((User) result.included().get("user"), is(user)); } }