+package org.wamblee.support.persistence;
+
+import static junit.framework.Assert.assertEquals;
+
+import javax.persistence.EntityManager;
+import javax.sql.DataSource;
+
+import org.dbunit.IDatabaseTester;
+import org.dbunit.dataset.ITable;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.wamblee.support.persistence.Database;
+import org.wamblee.support.persistence.DatabaseBuilder;
+import org.wamblee.support.persistence.DatabaseUtils;
+import org.wamblee.support.persistence.JpaBuilder;
+import org.wamblee.support.persistence.PersistenceUnitDescription;
+import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork;
+
+public class DatabaseUtilsTestBase {
+ private Database db;
+ private DataSource dataSource;
+ private PersistenceUnitDescription persistenceUnit;
+ private JpaBuilder builder;
+ private DatabaseUtils dbutils;
+ private IDatabaseTester dbtester;
+
+ @Before
+ public void setUp() throws Exception {
+ db = DatabaseBuilder.getDatabase();
+ dataSource = db.start();
+
+ persistenceUnit = new MyPersistenceUnit();
+
+ dbutils = new DatabaseUtils(dataSource, persistenceUnit.getTables());
+ dbutils.dropTables();
+ dbutils.dropTables(JpaCustomizerBuilder.getCustomizer().getJpaTables());
+
+ builder = new JpaBuilder(dataSource, persistenceUnit);
+ builder.start();
+
+ dbtester = dbutils.createDbTester();
+ }
+
+ @After
+ public void tearDown() {
+ builder.stop();
+ db.stop();
+ }
+
+ @Test
+ public void testTablesCorrect() throws Exception {
+ String[] tables = dbutils.getTableNames();
+ assertEquals(1, tables.length);
+ assertEquals("XYZ_MYENTITY", tables[0]);
+ }
+
+ @Test
+ public void testDeleteTables() throws Exception {
+ String[] tables = dbutils.getTableNames();
+ assertEquals(1, tables.length);
+ assertEquals("XYZ_MYENTITY", tables[0]);
+
+ // Put some data in the database.
+ 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());
+
+ // Clean the database
+ dbutils.cleanDatabase();
+ table = dbtester.getDataSet().getTable("XYZ_MYENTITY");
+ assertEquals(0, table.getRowCount());
+
+ // Now drop the database
+ dbutils.dropTables();
+ dbutils.dropTables(JpaCustomizerBuilder.getCustomizer().getJpaTables());
+ tables = dbutils.getTableNames();
+ assertEquals(0, tables.length);
+ }
+
+}