X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsupport%2Fpersistence%2FJpaTester.java;fp=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsupport%2Fpersistence%2FJpaTester.java;h=a6a512f125a5313b7c4da4793d97091cc98c77f1;hb=2207a1e695ce23e79678c232cff2ceb84ebaa801;hp=0000000000000000000000000000000000000000;hpb=4985b85f86028eb896ac853134cb66a1299815a5;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/support/persistence/JpaTester.java b/test/enterprise/src/main/java/org/wamblee/support/persistence/JpaTester.java new file mode 100644 index 00000000..a6a512f1 --- /dev/null +++ b/test/enterprise/src/main/java/org/wamblee/support/persistence/JpaTester.java @@ -0,0 +1,113 @@ +package org.wamblee.support.persistence; + +import javax.sql.DataSource; + +import org.dbunit.IDatabaseTester; + +/** + * This class is the entry point for JPA tests. Test code should construct a JpaTester in the + * @Before method and call {@link #start()} on it in that method. Also, test code should + * call {@link #stop()} on it in the @After method. + * + * This class is constructed with a description of the persistence unit to be tested. The principle is that + * an existing persistence.xml can be tested without change in unit test code. + * + * It then takes care of the following: + * + * + * The main entry point for all this functionality is the {@link PersistenceUnitDescription} which describes the + * persistence unit and must be provided at construction of the JpaTester + * + * NOTE: Persistence XML files should be explicitly configured with the classes that are part of the persistence unit + * since scanning of classes does not work correctly in a unit test environment. This is currently the only limitation. + */ +public class JpaTester { + + private PersistenceUnitDescription persistenceUnit; + private Database db; + private DataSource dataSource; + private DatabaseUtils dbUtils; + private JpaBuilder jpaBuilder; + private IDatabaseTester dbTester; + + /** + * Constructs the tester. + * @param aPersistenceUnit Persistence unit under test. + */ + public JpaTester(PersistenceUnitDescription aPersistenceUnit) { + persistenceUnit = aPersistenceUnit; + } + + /** + * Starts the tester. This must be called prior to running the test. + * @throws Exception + */ + public void start() throws Exception { + db = DatabaseBuilder.getDatabase(); + dataSource = db.start(); + + dbUtils = new DatabaseUtils(dataSource, persistenceUnit.getTables()); + dbUtils.dropTables(); + dbUtils.dropTables(JpaCustomizerBuilder.getCustomizer().getJpaTables()); + + jpaBuilder = new JpaBuilder(dataSource, persistenceUnit); + jpaBuilder.start(); + + // db tester should be created after Jpa builder because jpa builder + // creates the + // tables that the tester looks at when it is initialized. + dbTester = dbUtils.createDbTester(); + } + + /** + * Stops the tester. This must be called after the test. + */ + public void stop() { + if (jpaBuilder != null) { + jpaBuilder.stop(); + } + if (db != null) { + db.stop(); + } + } + + public Database getDb() { + return db; + } + + public DataSource getDataSource() { + return dataSource; + } + + public IDatabaseTester getDbTester() { + return dbTester; + } + + public DatabaseUtils getDbUtils() { + return dbUtils; + } + + public JpaBuilder getJpaBuilder() { + return jpaBuilder; + } + + public PersistenceUnitDescription getPersistenceUnit() { + return persistenceUnit; + } + +}