/* * Copyright 2005-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.test.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.test.persistence.Database; import org.wamblee.test.persistence.DatabaseBuilder; import org.wamblee.test.persistence.DatabaseUtils; import org.wamblee.test.persistence.JpaBuilder; import org.wamblee.test.persistence.JpaCustomizerBuilder; import org.wamblee.test.persistence.PersistenceUnitDescription; import org.wamblee.test.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); dbutils.dropTables(new MyTables()); dbutils.dropTables(JpaCustomizerBuilder.getCustomizer().getJpaTables()); builder = new JpaBuilder(db.getJdbcUrl(), db.getUsername(), db.getPassword(), persistenceUnit); builder.start(); assertEquals(0, db.getActiveConnections()); dbtester = dbutils.createDbTester(new MyTables()); } @After public void tearDown() throws Exception { dbtester.getConnection().close(); builder.stop(); dbutils.stop(); assertEquals(0, db.getActiveConnections()); db.stop(); } @Test public void testTablesCorrect() throws Exception { String[] tables = dbutils.getTableNames(new MyTables()); assertEquals(1, tables.length); assertEquals("XYZ_MYENTITY", tables[0]); } @Test public void testDeleteTables() throws Exception { String[] tables = dbutils.getTableNames(new MyTables()); assertEquals(1, tables.length); assertEquals("XYZ_MYENTITY", tables[0]); // Put some data in the database. builder.execute(new JpaUnitOfWork() { public Void execute(EntityManager aEm) { MyEntity entity = new MyEntity("a", "b"); aEm.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(new MyTables()); table = dbtester.getDataSet().getTable("XYZ_MYENTITY"); assertEquals(0, table.getRowCount()); // Now drop the database dbutils.dropTables(new MyTables()); dbutils.dropTables(JpaCustomizerBuilder.getCustomizer().getJpaTables()); tables = dbutils.getTableNames(new MyTables()); assertEquals(0, tables.length); } }