package edu.chl.jadetalk.db;
import edu.chl.jadetalk.core.User;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Daniel
*/
public class UserFacadeTest {
private UserFacade userFacade;
private EntityManager em;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
em = Persistence.createEntityManagerFactory("jadetalk_test_pu").createEntityManager();
userFacade = new UserFacade();
userFacade.setEm(em);
}
@After
public void tearDown() {
em.close();
}
@Test
public void testCreate() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
beginTr();
userFacade.create(user1);
userFacade.create(user2);
commitTr();
User user1db = em.find(User.class, user1.getId());
User user2db = em.find(User.class, user2.getId());
assertEquals(user1, user1db);
assertEquals(user2, user2db);
assertEquals(user1.getUsername(), "user1");
assertEquals(user2.getUsername(), "user2");
beginTr();
em.remove(user1);
em.remove(user2);
commitTr();
}
@Test
public void testEdit() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
beginTr();
em.persist(user1);
em.persist(user2);
commitTr();
user1.setUsername("otheruser1");
user2.setUsername("otheruser2");
beginTr();
userFacade.edit(user1);
userFacade.edit(user2);
commitTr();
assertEquals(user1.getUsername(), em.find(User.class, user1.getId()).getUsername());
assertEquals(user2.getUsername(), em.find(User.class, user2.getId()).getUsername());
beginTr();
em.remove(user1);
em.remove(user2);
commitTr();
}
@Test
public void testRemove() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
beginTr();
em.persist(user1);
em.persist(user2);
commitTr();
beginTr();
userFacade.remove(user1);
userFacade.remove(user2);
commitTr();
assertFalse(em.contains(user1));
assertFalse(em.contains(user2));
}
@Test
public void testFind() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
beginTr();
em.persist(user1);
commitTr();
User user1db = userFacade.find(user1.getId());
assertEquals(user1, user1db);
beginTr();
em.remove(user1);
commitTr();
}
@Test
public void testFindAll() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
beginTr();
em.persist(user1);
em.persist(user2);
commitTr();
List<User> usersDb = userFacade.findAll();
assertEquals(usersDb.size(), 2);
assertTrue(usersDb.contains(user1));
assertTrue(usersDb.contains(user2));
beginTr();
em.remove(user1);
em.remove(user2);
commitTr();
}
@Test
public void testFindByNamePattern() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
User user3 = new User();
user3.setUsername("user3");
user3.setPassword("pass3");
user3.setEmail("email3");
beginTr();
em.persist(user3);
em.persist(user2);
em.persist(user1);
commitTr();
List<User> matchedUsers = userFacade.findByNamePattern("user1");
assertNotNull(matchedUsers);
assertTrue(matchedUsers.contains(user1));
assertFalse(matchedUsers.contains(user2));
assertFalse(matchedUsers.contains(user3));
beginTr();
em.remove(user1);
em.remove(user2);
em.remove(user3);
commitTr();
}
@Test
public void testCount() {
User user1 = new User();
user1.setUsername("user1");
user1.setPassword("pass1");
user1.setEmail("email1");
User user2 = new User();
user2.setUsername("user2");
user2.setPassword("pass2");
user2.setEmail("email2");
User user3 = new User();
user3.setUsername("user3");
user3.setPassword("pass3");
user3.setEmail("email3");
beginTr();
em.persist(user3);
em.persist(user2);
em.persist(user1);
commitTr();
int count = userFacade.count();
assertEquals(count, 3);
beginTr();
em.remove(user1);
em.remove(user2);
em.remove(user3);
commitTr();
}
private void beginTr() {
em.getTransaction().begin();
}
private void commitTr() {
em.getTransaction().commit();
}
}