From 32c6f58b16dba217eae193a10612702c5f2ed0ad Mon Sep 17 00:00:00 2001 From: Jochen Schalanda Date: Sat, 10 Mar 2018 13:07:11 +0100 Subject: [PATCH] Allow customizing Hibernate Configuration in DAOTest Closes #2053 --- .../java/io/dropwizard/testing/common/DAOTest.java | 10 ++++++++++ .../testing/junit/DAOTestRuleConfigTest.java | 13 ++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java b/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java index c45aa63df78..ebbe326d758 100644 --- a/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java +++ b/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java @@ -16,6 +16,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; +import java.util.function.Consumer; public class DAOTest { static { @@ -33,6 +34,8 @@ public static abstract class Builder> { private boolean useSqlComments = false; private Set> entityClasses = new LinkedHashSet<>(); private Map properties = new HashMap<>(); + private Consumer configurationCustomizer = c -> { + }; public B setUrl(String url) { this.url = url; @@ -74,6 +77,11 @@ public B setProperty(String key, String value) { return (B) this; } + public B customizeConfiguration(Consumer configurationCustomizer) { + this.configurationCustomizer = configurationCustomizer; + return (B) this; + } + protected DAOTest buildDAOTest() { final Configuration config = new Configuration(); config.setProperty(AvailableSettings.URL, url); @@ -97,6 +105,8 @@ protected DAOTest buildDAOTest() { entityClasses.forEach(config::addAnnotatedClass); properties.forEach(config::setProperty); + configurationCustomizer.accept(config); + return new DAOTest(config.buildSessionFactory()); } } diff --git a/dropwizard-testing/src/test/java/io/dropwizard/testing/junit/DAOTestRuleConfigTest.java b/dropwizard-testing/src/test/java/io/dropwizard/testing/junit/DAOTestRuleConfigTest.java index bb8493e6cee..1fb9f5c9dfa 100644 --- a/dropwizard-testing/src/test/java/io/dropwizard/testing/junit/DAOTestRuleConfigTest.java +++ b/dropwizard-testing/src/test/java/io/dropwizard/testing/junit/DAOTestRuleConfigTest.java @@ -2,6 +2,8 @@ import io.dropwizard.testing.app.TestEntity; import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.AvailableSettings; import org.junit.Rule; import org.junit.Test; @@ -18,15 +20,20 @@ public class DAOTestRuleConfigTest { .setHbm2DdlAuto("create") .setShowSql(true) .addEntityClass(TestEntity.class) - .setProperty("hibernate.format_sql", "true") + .setProperty(AvailableSettings.FORMAT_SQL, "true") + .customizeConfiguration(c -> c.setProperty("foobar", "baz")) .build(); @Test public void explicitConfigCreatesSessionFactory() { // it yields a valid SessionFactory instance - assertThat(database.getSessionFactory()).isNotNull(); + final SessionFactory sessionFactory = database.getSessionFactory(); + assertThat(sessionFactory).isNotNull(); + assertThat(sessionFactory.getProperties()) + .containsEntry(AvailableSettings.FORMAT_SQL, "true") + .containsEntry("foobar", "baz"); - final Session currentSession = database.getSessionFactory().getCurrentSession(); + final Session currentSession = sessionFactory.getCurrentSession(); // an instance of an entity contained in the package can be saved currentSession.saveOrUpdate(new TestEntity("foo"));