(no commit message)
[utils] / test / enterprise / src / test / java / org / wamblee / support / persistence / MyEntityExampleTestBase.java
diff --git a/test/enterprise/src/test/java/org/wamblee/support/persistence/MyEntityExampleTestBase.java b/test/enterprise/src/test/java/org/wamblee/support/persistence/MyEntityExampleTestBase.java
new file mode 100644 (file)
index 0000000..77f6114
--- /dev/null
@@ -0,0 +1,87 @@
+package org.wamblee.support.persistence;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Persistence;
+import javax.sql.DataSource;
+
+import org.dbunit.DataSourceDatabaseTester;
+import org.dbunit.DatabaseTestCase;
+import org.dbunit.IDatabaseTester;
+import org.dbunit.dataset.ITable;
+import org.dbunit.dataset.filter.ITableFilterSimple;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.wamblee.support.persistence.DatabaseUtils;
+import org.wamblee.support.persistence.JpaBuilder;
+import org.wamblee.support.persistence.JpaTester;
+import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork;
+
+import static junit.framework.Assert.*;
+
+
+/**
+ * This class shows an example of how to test an entity  using jpa. 
+ */
+public class MyEntityExampleTestBase {
+
+       // This is the magical object that does all the test setup. 
+    private JpaTester jpaTester; 
+    
+    // The jpa tester initializes a lot for us....
+    
+    // A JPA builder that provides a transaction scoped entity manager for us. 
+    private JpaBuilder builder; 
+    
+    // The database tester for dbunit which is appropriately configured for our persistence unit. 
+    private IDatabaseTester dbtester; 
+    
+    // Database utilities with some additional functionality for working with the databse
+    // such as dropping tables, cleaning tables, etc. 
+    private DatabaseUtils dbutils; 
+       
+       @Before
+       public void setUp() throws Exception {
+
+               // First we create the JpaTester by telling us which persistence unit we are going to test
+               jpaTester = new JpaTester(new MyPersistenceUnit());
+           jpaTester.start();
+           
+           // Retrieve some useful objects fromt he jpa tester. It also provides direct access to the datasource
+           // but we don't need it. We can use datbase utils if we want to execute straight JDBC calls. 
+           builder = jpaTester.getJpaBuilder();
+           dbtester = jpaTester.getDbTester();
+           dbutils = jpaTester.getDbUtils(); 
+       }
+       
+       @After
+       public void tearDown() { 
+               jpaTester.stop();
+       }
+       
+       @Test
+       public void testEntityPersistence() throws Exception { 
+               
+               // Use the JPA builder to create a transaction scoped entity manager for as and execute the 
+               // unit of work. 
+               builder.execute(new JpaUnitOfWork<Void>() {
+                       public Void execute(EntityManager em) {
+                               MyEntity entity = new MyEntity("a", "b"); 
+                               em.persist(entity);
+                               return null; 
+                       }
+               }); 
+               
+               // Verify one row is written (using Db unit)
+               ITable table = dbtester.getDataSet().getTable("XYZ_MYENTITY");
+               assertEquals(1, table.getRowCount());
+               
+           assertEquals("a", table.getValue(0, "SLEUTELTJE")); 
+           assertEquals("b", table.getValue(0, "VALUE"));
+               
+               // For this simple test, it can also be done through DatabaseUtils
+               assertEquals(1, dbutils.getTableSize("XYZ_MYENTITY"));
+       
+       }
+
+}