package org.jooby.internal.hbm; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.Properties; import javax.persistence.SharedCacheMode; import javax.persistence.ValidationMode; import javax.persistence.spi.PersistenceUnitTransactionType; import javax.sql.DataSource; import org.jooby.test.MockUnit; import org.junit.Test; import com.google.common.collect.Sets; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigValueFactory; public class HbmUnitDescriptorTest { @Test public void failPackageScanning() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { ClassLoader loader = unit.get(ClassLoader.class); expect(loader.getResources("x/y/z")).andThrow(new IOException("Missing x.y.z")); }) .run(unit -> { new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Sets.newHashSet("x.y.z")); }); } @Test(expected = UnsupportedOperationException.class) public void pushClassTransformer() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .run(unit -> { new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .pushClassTransformer(null); }); } @Test public void useQuotedIdentifiers() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.hasPath("hibernate.useQuotedIdentifiers")).andReturn(true); expect(config.getAnyRef("hibernate.useQuotedIdentifiers")).andReturn(true); }) .run(unit -> { assertEquals(true, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .isUseQuotedIdentifiers()); }); } @Test public void dontUseQuotedIdentifiers() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.hasPath("hibernate.useQuotedIdentifiers")).andReturn(true); expect(config.getAnyRef("hibernate.useQuotedIdentifiers")).andReturn(false); }) .run(unit -> { assertEquals(false, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .isUseQuotedIdentifiers()); }); } @Test public void excludeUnlistedClasses() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.hasPath("hibernate.excludeUnlistedClasses")).andReturn(true); expect(config.getAnyRef("hibernate.excludeUnlistedClasses")).andReturn(false); }) .run(unit -> { assertEquals(false, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .isExcludeUnlistedClasses()); }); } @Test public void validationMode() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.hasPath("javax.persistence.validation.mode")).andReturn(true); expect(config.getAnyRef("javax.persistence.validation.mode")).andReturn("AUTO"); }) .run(unit -> { assertEquals(ValidationMode.AUTO, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .getValidationMode()); }); } @Test public void transactionType() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .run(unit -> { assertEquals(PersistenceUnitTransactionType.RESOURCE_LOCAL, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .getTransactionType()); }); } @Test public void sharedCacheMode() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.hasPath("javax.persistence.sharedCache.mode")).andReturn(true); expect(config.getAnyRef("javax.persistence.sharedCache.mode")).andReturn("ALL"); }) .run(unit -> { assertEquals(SharedCacheMode.ALL, new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .getSharedCacheMode()); }); } @Test public void providerClassName() throws Exception { new MockUnit(ClassLoader.class, DataSource.class, Config.class) .run(unit -> { assertEquals("org.hibernate.jpa.HibernatePersistenceProvider", new HbmUnitDescriptor(unit.get(ClassLoader.class), unit.get(DataSource.class), unit .get(Config.class), Collections.emptySet()) .getProviderClassName()); }); } @Test public void properties() throws Exception { Properties expected = new Properties(); expected.setProperty("javax.persistence.sharedCache.mode", "ALL"); expected.setProperty("javax.persistence.validation.mode", "AUTO"); Config config = ConfigFactory.empty() .withValue("javax.persistence.sharedCache.mode", ConfigValueFactory.fromAnyRef("ALL")) .withValue("javax.persistence.validation.mode", ConfigValueFactory.fromAnyRef("AUTO")) .withValue("hibernate.excludeUnlistedClasses", ConfigValueFactory.fromAnyRef("false")); new MockUnit(ClassLoader.class, DataSource.class) .run(unit -> { assertEquals(expected, new HbmUnitDescriptor( unit.get(ClassLoader.class), unit.get(DataSource.class), config, Collections.emptySet()) .getProperties()); }); } @Test public void persistenceUnitRootUrl() throws Exception { new MockUnit(Config.class, DataSource.class) .run(unit -> { assertNull(new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getPersistenceUnitRootUrl()); }); } @Test public void persistenceUnitRootUrlNoScan() throws Exception { new MockUnit(Config.class, DataSource.class) .run(unit -> { assertNull(new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getPersistenceUnitRootUrl()); }); } @Test public void nonJtaDataSource() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(unit.get(DataSource.class), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getNonJtaDataSource()); }); } @Test public void dsname() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(unit.get(DataSource.class).toString(), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getName()); }); } @Test public void mappingFileNames() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(Collections.emptyList(), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getMappingFileNames()); }); } @Test public void managedClassNames() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(Collections.emptyList(), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getManagedClassNames()); }); } @Test public void jtaDataSource() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(null, new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getJtaDataSource()); }); } @Test public void noJarFileUrls() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(Collections.emptyList(), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getJarFileUrls()); }); } @Test public void jarFileUrls() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { HbmUnitDescriptor desc = new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Sets.newLinkedHashSet(Arrays.asList("x.y", "x.y.z"))); assertEquals(getClass().getResource("/x/y"), desc.getPersistenceUnitRootUrl()); assertEquals(Arrays.asList(getClass().getResource("/x/y/z")), desc.getJarFileUrls()); }); } @Test public void getClassLoader() throws Exception { new MockUnit(Config.class, DataSource.class, DataSource.class) .run(unit -> { assertEquals(getClass().getClassLoader(), new HbmUnitDescriptor( getClass().getClassLoader(), unit.get(DataSource.class), unit.get(Config.class), Collections.emptySet()).getClassLoader()); }); } }