/** * */ package org.minnal.jpa; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import java.util.Arrays; import javax.persistence.EntityManagerFactory; import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceUnitInfo; import org.activejpa.jpa.JPA; import org.minnal.core.Application; import org.minnal.core.MinnalException; import org.minnal.core.config.ApplicationConfiguration; import org.minnal.core.config.DatabaseConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.google.common.collect.Lists; /** * @author ganeshs * */ public class JPAPluginTest { private JPAPlugin plugin; private PersistenceProvider provider; private PersistenceUnitInfo persistenceUnitInfo; private Application<ApplicationConfiguration> application; @BeforeMethod public void setup() { plugin = spy(new JPAPlugin()); provider = mock(PersistenceProvider.class); persistenceUnitInfo = mock(PersistenceUnitInfo.class); application = mock(Application.class); ApplicationConfiguration configuration = mock(ApplicationConfiguration.class); when(configuration.getName()).thenReturn("test"); when(configuration.getDatabaseConfiguration()).thenReturn(mock(DatabaseConfiguration.class)); when(application.getConfiguration()).thenReturn(configuration); doReturn(persistenceUnitInfo).when(plugin).createPersistenceUnitInfo(configuration, provider); doReturn(Arrays.asList(provider)).when(plugin).getProviders(); } @Test public void shouldInitPlugin() { EntityManagerFactory factory = mock(EntityManagerFactory.class); when(provider.createContainerEntityManagerFactory(persistenceUnitInfo, null)).thenReturn(factory); plugin.init(application); assertEquals(JPA.instance.getDefaultConfig().getEntityManagerFactory(), factory); } @Test(expectedExceptions=MinnalException.class, expectedExceptionsMessageRegExp="No JPA persistence provider found") public void shouldFailInitIfNoPersistenceProviderIsFound() { doReturn(Lists.newArrayList()).when(plugin).getProviders(); plugin.init(application); } @Test public void shouldDestroyPlugin() { EntityManagerFactory factory = mock(EntityManagerFactory.class); when(provider.createContainerEntityManagerFactory(persistenceUnitInfo, null)).thenReturn(factory); plugin.init(application); plugin.destroy(); verify(factory).close(); } }