package com.dalab.discovery.sd.config; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Provides the EntityManagerFactory and TransactionManager for tests, * relying on application-test.yml for DataSource and most JPA properties. */ @TestConfiguration @EnableJpaRepositories( basePackages = {"com.dalab.discovery.common.model.repository", "com.dalab.discovery.sd.domain.repository", "com.dalab.discovery.catalog.repository", "com.dalab.discovery.config.repository", "com.dalab.discovery.config.model"}, entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager" ) @EnableTransactionManagement public class TestDatabaseConfiguration { @SuppressWarnings("rawtypes") @Bean(name = "entityManagerFactory") @Primary public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource) { Map jpaProperties = new HashMap<>(); // Explicitly set H2 dialect for this EntityManagerFactory jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); // ddl-auto should be picked from application-test.yml (create-drop) // Other properties like show-sql, format_sql also from application-test.yml return builder .dataSource(dataSource) .packages( "com.dalab.discovery.common.model.entity", "com.dalab.discovery.common.model", "com.dalab.discovery.catalog.model", "com.dalab.discovery.config.model", "com.dalab.discovery.sd.model", "com.dalab.discovery.sd.repository", "com.dalab.discovery.crawler.model", "com.dalab.discovery.domain.model", "com.dalab.discovery.log.service.gcp.persistence.entity" ) .persistenceUnit("testPU") .properties(jpaProperties) // Set explicit properties .build(); } @Bean(name = "transactionManager") @Primary public PlatformTransactionManager transactionManager( @Qualifier("entityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory.getObject()); } }