From 3f96ee012092a8a403c6b3ed91d8e72fdbcbb977 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Sat, 19 May 2018 14:36:27 +0200
Subject: Add further DBUnit-Tests for employee.add [#25963]

---
 .../dao/EmployeePersistenceTest.java               | 88 ++++++++++++++++------
 1 file changed, 67 insertions(+), 21 deletions(-)

(limited to 'src/test/java/at/ac/tuwien')

diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeePersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeePersistenceTest.java
index 52a87eb..6bfd898 100644
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeePersistenceTest.java
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeePersistenceTest.java
@@ -13,6 +13,7 @@ import org.dbunit.dataset.IDataSet;
 import org.dbunit.dataset.ITable;
 import org.dbunit.dataset.filter.DefaultColumnFilter;
 import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
+import org.dbunit.operation.DatabaseOperation;
 import org.dbunit.util.fileloader.FlatXmlDataFileLoader;
 import org.junit.Assert;
 
@@ -27,10 +28,22 @@ public class EmployeePersistenceTest extends JdbcTestCase {
     @Override
     protected IDataSet getDataSet() throws DataSetException {
         InputStream res =
-                getClass().getClassLoader().getResourceAsStream("employeeServiceTestData.xml");
+                getClass()
+                        .getClassLoader()
+                        .getResourceAsStream("EmployeePersistenceTestBaseData.xml");
         return new FlatXmlDataSetBuilder().build(res);
     }
 
+    protected DatabaseOperation getSetUpOperation() throws Exception {
+        return DatabaseOperation.CLEAN_INSERT;
+    }
+
+    protected DatabaseOperation getTearDownOperation() throws Exception {
+        // needed in order to completely reset DB, including resetting auto_increment sequences
+        jdbcConnectionManager.getConnection().prepareStatement("DROP ALL OBJECTS").execute();
+        return DatabaseOperation.DELETE_ALL;
+    }
+
     public void testListEmployees() throws PersistenceException {
         Set<Employee> employees = employeePersistence.list();
 
@@ -87,30 +100,21 @@ public class EmployeePersistenceTest extends JdbcTestCase {
         Assert.assertFalse(employees.contains(empOne));
     }
 
-    /**
-     * This test checks if rows in both table EmployeeVersion and Employee are created, without
-     * checking the referential integrity constraint.
-     *
-     * @throws Exception
-     */
-    public void testAddValidEmployee() throws Exception {
+    Employee validEmployee =
+            Employee.builder()
+                    .name("Testperson")
+                    .birthday(LocalDate.parse("2010-11-11"))
+                    .educationLevel(EducationLevel.NA)
+                    .isDriver(true)
+                    .isPilot(false)
+                    .build();
 
-        Employee employee =
-                Employee.builder()
-                        .id(4)
-                        .name("Testperson")
-                        .birthday(LocalDate.parse("2010-11-11"))
-                        .educationLevel(EducationLevel.NA)
-                        .isDriver(true)
-                        .isPilot(false)
-                        .build();
+    public void testAddValidEmployee_EmployeeVersion() throws Exception {
 
-        employeePersistence.add(employee);
+        employeePersistence.add(validEmployee);
 
         String[] excludedColumnsEmployeeVersion = new String[] {"ID"};
-        String[] excludedColumnsEmployee = new String[] {"VERSION"};
         String tableEmployeeVersion = "EMPLOYEEVERSION";
-        String tableEmployee = "EMPLOYEE";
 
         // load actual and expected data set
         IDataSet actualDataSet = getConnection().createDataSet();
@@ -129,6 +133,21 @@ public class EmployeePersistenceTest extends JdbcTestCase {
                 DefaultColumnFilter.excludedColumnsTable(
                         expectedEmployeeVersionTable, excludedColumnsEmployeeVersion);
 
+        Assertion.assertEquals(expectedFilteredTable, actualFilteredTable);
+    }
+
+    public void testAddValidEmployee_Employee() throws Exception {
+
+        employeePersistence.add(validEmployee);
+
+        String[] excludedColumnsEmployee = new String[] {"VERSION"};
+        String tableEmployee = "EMPLOYEE";
+
+        // load actual and expected data set
+        IDataSet actualDataSet = getConnection().createDataSet();
+        IDataSet expectedDataSet =
+                new FlatXmlDataFileLoader().load("/testAddValidEmployee_expected.xml");
+
         // extract employee table
         ITable actualEmployeeTable = actualDataSet.getTable(tableEmployee);
         ITable expectedEmployeeTable = expectedDataSet.getTable(tableEmployee);
@@ -141,10 +160,37 @@ public class EmployeePersistenceTest extends JdbcTestCase {
                 DefaultColumnFilter.excludedColumnsTable(
                         expectedEmployeeTable, excludedColumnsEmployee);
 
-        Assertion.assertEquals(expectedFilteredTable, actualFilteredTable);
         Assertion.assertEquals(expectedFilteredEmpTable, actualFilteredEmpTable);
     }
 
+    public void testAddValidEmployee_Join() throws Exception {
+
+        employeePersistence.add(validEmployee);
+
+        String[] excludedColumns = new String[] {"E_VERSION", "V_ID"};
+        String table = "EMP_JOIN";
+
+        String sqlJoinEmployeeVersion =
+                "SELECT e.id AS E_ID, v.name AS V_NAME, v.birthday AS V_BIRTHDAY, "
+                        + "v.educationLevel as V_EDUCATIONLEVEL, "
+                        + "v.isDriver AS V_ISDRIVER, v.isPilot AS V_ISPILOT "
+                        + "FROM Employee e "
+                        + "JOIN EmployeeVersion v ON e.version = v.id";
+
+        ITable actualJoinData = getConnection().createQueryTable(table, sqlJoinEmployeeVersion);
+
+        IDataSet expectedDataSet =
+                new FlatXmlDataFileLoader().load("/testAddValidEmployeeJoin_expected.xml");
+        ITable expectedJoinData = expectedDataSet.getTable(table);
+
+        ITable actualFilteredJoinData =
+                DefaultColumnFilter.excludedColumnsTable(actualJoinData, excludedColumns);
+        ITable expectedFilteredJoinData =
+                DefaultColumnFilter.excludedColumnsTable(expectedJoinData, excludedColumns);
+
+        Assertion.assertEquals(expectedFilteredJoinData, actualFilteredJoinData);
+    }
+
     public void testUpdateValidEmployee() throws PersistenceException {}
 
     public void testUpdateNonExistingEmployee() throws PersistenceException {}
-- 
cgit v1.2.3-70-g09d2