Adds tests for update, delete and list

It also moves transaction management out of Departments.
parent 6cbef2d5
package dgpena.siexample.persistence; package dgpena.siexample.persistence;
import java.util.List;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
public class Departments { public class Departments {
...@@ -11,12 +13,18 @@ public class Departments { ...@@ -11,12 +13,18 @@ public class Departments {
} }
public void addNewDepartment(Department d) { public void addNewDepartment(Department d) {
em.getTransaction().begin(); em.persist(d);
em.persist(d);
em.getTransaction().commit();
} }
public Department findById(int id) { public Department findById(int id) {
return em.find(Department.class, id); return em.find(Department.class, id);
} }
public void deleteDepartment(Department d) {
em.remove(d);
}
public List<Department> findAll() {
return em.createQuery("SELECT d FROM Department d").getResultList();
}
} }
package dgpena.siexample.persistence; package dgpena.siexample.persistence;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
...@@ -22,6 +27,7 @@ public class DepartmentsTest extends SQLBasedTest { ...@@ -22,6 +27,7 @@ public class DepartmentsTest extends SQLBasedTest {
emf = Persistence.createEntityManagerFactory("si-database"); emf = Persistence.createEntityManagerFactory("si-database");
} }
@Test @Test
public void testAddNewDepartment() throws Exception { public void testAddNewDepartment() throws Exception {
...@@ -30,7 +36,9 @@ public class DepartmentsTest extends SQLBasedTest { ...@@ -30,7 +36,9 @@ public class DepartmentsTest extends SQLBasedTest {
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
Departments depts = new Departments(em); Departments depts = new Departments(em);
depts.addNewDepartment(d); em.getTransaction().begin();
depts.addNewDepartment(d);
em.getTransaction().commit();
// check in the DB using JDBC // check in the DB using JDBC
int deptId = d.getId(); int deptId = d.getId();
...@@ -55,4 +63,76 @@ public class DepartmentsTest extends SQLBasedTest { ...@@ -55,4 +63,76 @@ public class DepartmentsTest extends SQLBasedTest {
assertEquals("finanzas", d.getName()); assertEquals("finanzas", d.getName());
} }
@Test
public void testUpdateDepartment() throws SQLException {
// insert a department previously with JDBC
Statement statement = jdbcConnection.createStatement();
statement.executeUpdate("INSERT INTO Department(name) values('finanzas')", Statement.RETURN_GENERATED_KEYS);
int deptId = getLastInsertedId(statement);
EntityManager em = emf.createEntityManager();
Departments depts = new Departments(em);
Department d = depts.findById(deptId);
em.getTransaction().begin();
d.setName("contabilidad");
em.getTransaction().commit();
// check in the DB using JDBC
statement = jdbcConnection.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM Department d where d.id = "+deptId);
rs.next();
assertEquals("contabilidad", rs.getString("name"));
}
@Test
public void testDeleteDepartment() throws SQLException {
// insert a department previously with JDBC
Statement statement = jdbcConnection.createStatement();
statement.executeUpdate("INSERT INTO Department(name) values('finanzas')", Statement.RETURN_GENERATED_KEYS);
int deptId = getLastInsertedId(statement);
EntityManager em = emf.createEntityManager();
Departments depts = new Departments(em);
Department d = depts.findById(deptId);
em.getTransaction().begin();
depts.deleteDepartment(d);
em.getTransaction().commit();
// check in the DB using JDBC
statement = jdbcConnection.createStatement();
ResultSet rs = statement.executeQuery("SELECT COUNT(*) as total FROM Department d where d.id = "+deptId);
rs.next();
assertEquals(0, rs.getInt("total"));
}
@Test
public void testFindAllDepartments() throws SQLException {
// insert a department previously with JDBC
Statement statement = jdbcConnection.createStatement();
statement.executeUpdate("DELETE FROM Department", Statement.RETURN_GENERATED_KEYS);
statement = jdbcConnection.createStatement();
statement.executeUpdate("INSERT INTO Department(name) values('dept-1')", Statement.RETURN_GENERATED_KEYS);
statement = jdbcConnection.createStatement();
statement.executeUpdate("INSERT INTO Department(name) values('dept-2')", Statement.RETURN_GENERATED_KEYS);
EntityManager em = emf.createEntityManager();
Departments depts = new Departments(em);
List<Department> departments = depts.findAll();
assertEquals(2, departments.size());
Set<String> namesToTest = new HashSet(Arrays.asList("dept-1", "dept-2"));
for (Department d: departments) {
namesToTest.remove(d.getName());
}
assertTrue(namesToTest.isEmpty());
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment