From 7d9d95d3696c62f037e25cff1d5cd5263501ace9 Mon Sep 17 00:00:00 2001 From: dgpena Date: Thu, 9 Nov 2017 19:25:48 +0100 Subject: [PATCH] Adds tests for update, delete and list It also moves transaction management out of Departments. --- .../siexample/persistence/Departments.java | 14 +++- .../persistence/DepartmentsTest.java | 82 ++++++++++++++++++- 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/src/main/java/dgpena/siexample/persistence/Departments.java b/src/main/java/dgpena/siexample/persistence/Departments.java index 23b757c..87463e7 100644 --- a/src/main/java/dgpena/siexample/persistence/Departments.java +++ b/src/main/java/dgpena/siexample/persistence/Departments.java @@ -1,5 +1,7 @@ package dgpena.siexample.persistence; +import java.util.List; + import javax.persistence.EntityManager; public class Departments { @@ -11,12 +13,18 @@ public class Departments { } public void addNewDepartment(Department d) { - em.getTransaction().begin(); - em.persist(d); - em.getTransaction().commit(); + em.persist(d); } public Department findById(int id) { return em.find(Department.class, id); } + + public void deleteDepartment(Department d) { + em.remove(d); + } + + public List findAll() { + return em.createQuery("SELECT d FROM Department d").getResultList(); + } } diff --git a/src/test/java/dgpena/siexample/persistence/DepartmentsTest.java b/src/test/java/dgpena/siexample/persistence/DepartmentsTest.java index 9faa3e8..e3a6807 100644 --- a/src/test/java/dgpena/siexample/persistence/DepartmentsTest.java +++ b/src/test/java/dgpena/siexample/persistence/DepartmentsTest.java @@ -1,10 +1,15 @@ package dgpena.siexample.persistence; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.sql.ResultSet; import java.sql.SQLException; 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.EntityManagerFactory; @@ -22,6 +27,7 @@ public class DepartmentsTest extends SQLBasedTest { emf = Persistence.createEntityManagerFactory("si-database"); } + @Test public void testAddNewDepartment() throws Exception { @@ -30,7 +36,9 @@ public class DepartmentsTest extends SQLBasedTest { EntityManager em = emf.createEntityManager(); Departments depts = new Departments(em); - depts.addNewDepartment(d); + em.getTransaction().begin(); + depts.addNewDepartment(d); + em.getTransaction().commit(); // check in the DB using JDBC int deptId = d.getId(); @@ -55,4 +63,76 @@ public class DepartmentsTest extends SQLBasedTest { 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 departments = depts.findAll(); + + assertEquals(2, departments.size()); + + Set namesToTest = new HashSet(Arrays.asList("dept-1", "dept-2")); + for (Department d: departments) { + namesToTest.remove(d.getName()); + } + + assertTrue(namesToTest.isEmpty()); + } + } -- 2.18.1