package br.com.caelum.calopsita.persistence.dao;
import static br.com.caelum.calopsita.CustomMatchers.hasSameId;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.calopsita.model.Project;
import br.com.caelum.calopsita.model.User;
import br.com.caelum.calopsita.plugins.PluginResultTransformer;
import br.com.caelum.calopsita.plugins.Transformer;
public class UserDaoTest extends AbstractDaoTest {
private UserDao dao;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
dao = new UserDao(session);
}
@Test
public void listProjectIfUserIsTheOwner() throws Exception {
User user = givenAUser();
Project project = givenAProjectOwnedBy(user);
List<Project> list = dao.listAllFrom(user);
assertThat(list, hasItem(hasSameId(project)));
}
@Test
public void listProjectIfUserIsAColaborator() throws Exception {
User user = givenAUser();
Project project = givenAProjectWithColaborator(user);
List<Project> list = dao.listAllFrom(user);
assertThat(list, hasItem(hasSameId(project)));
}
@Test
public void dontListProjectIfUserIsUnrelated() throws Exception {
User user = givenAUser();
Project project = givenAProject();
List<Project> list = dao.listAllFrom(user);
assertThat(list, not(hasItem(hasSameId(project))));
}
private Project givenAProjectWithColaborator(User user) {
Project project = givenAProject();
project.getColaborators().add(user);
session.update(project);
session.flush();
return project;
}
private User givenAUser() {
User user = new User(dao);
user.setLogin("test");
user.setPassword("test");
user.setName("User test");
user.setEmail("test@caelum.com.br");
session.save(user);
session.flush();
return user;
}
private Project givenAProjectOwnedBy(User user) {
Project project = givenAProject();
project.setOwner(user);
session.update(project);
session.flush();
return project;
}
private Project givenAProject() {
Project project = new Project(new ProjectDao(session, new PluginResultTransformer(session, new ArrayList<Transformer>())));
project.setName("Tuba");
session.save(project);
session.flush();
return project;
}
}