package com.griddynamics.jagger.jaas.config; import org.hibernate.ejb.HibernatePersistence; import org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.Properties; import javax.sql.DataSource; @TestConfiguration @EnableTransactionManagement @ComponentScan(basePackages = {"com.griddynamics.jagger.jaas.storage"}) public class TestPersistenceConfig { public TestPersistenceConfig() { System.setProperty("environments.ttl.minutes", "1"); } public static final String PACKAGES_TO_SCAN = "com.griddynamics.jagger.jaas.storage.model"; @Bean public AnnotationSessionFactoryBean sessionFactory() { AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(PACKAGES_TO_SCAN); sessionFactory.setHibernateProperties(hibernateProperties()); sessionFactory.setNamingStrategy(new SpringNamingStrategy()); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("org.h2.Driver"); ds.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1"); ds.setUsername("sa"); ds.setPassword(""); return ds; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(dataSource()); entityManagerFactoryBean.setPackagesToScan(PACKAGES_TO_SCAN); entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class); entityManagerFactoryBean.setJpaProperties(hibernateProperties()); return entityManagerFactoryBean; } @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject()); return transactionManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { return new PersistenceExceptionTranslationPostProcessor(); } private Properties hibernateProperties() { Properties hibernateProperties = new Properties(); hibernateProperties.put("hibernate.hbm2ddl.auto", "create-drop"); hibernateProperties.put("hibernate.globally_quoted_identifiers", "true"); return hibernateProperties; } }