package kr.debop4j.data.mapping.northwind;
import com.google.common.collect.Iterables;
import kr.debop4j.core.spring.Springs;
import kr.debop4j.data.hibernate.HibernateParameter;
import kr.debop4j.data.hibernate.forTesting.DatabaseTestFixtureBase;
import kr.debop4j.data.hibernate.repository.IHibernateRepository;
import kr.debop4j.data.hibernate.repository.IHibernateRepositoryFactory;
import kr.debop4j.data.hibernate.unitofwork.UnitOfWorks;
import kr.debop4j.data.mapping.northwind.config.PostgreSqlConfig;
import kr.debop4j.data.mapping.northwind.model.Customer;
import kr.debop4j.data.model.IStatefulEntity;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.type.StringType;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Northwind Database 를 사용하는 테스트 코드
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 2. 23.
*/
@Slf4j
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration( classes = { PostgreSqlConfig.class } )
public class NorthwindDbTestFixtureBase extends DatabaseTestFixtureBase {
@Autowired
ApplicationContext applicationContext;
@BeforeClass
public static void beforeClass() {
initHibernateAndSpring(PostgreSqlConfig.class);
if (!UnitOfWorks.isStarted())
UnitOfWorks.start();
}
@AfterClass
public static void afterClass() {
UnitOfWorks.stop();
Springs.reset();
}
public final Customer testCustomer = getCustomer();
private Customer getCustomer() {
Customer customer = new Customer("CACTU");
customer.setCompanyName("Cactus Comidas para llevar");
customer.setContactName("Patricio Simpson");
return customer;
}
public final HibernateParameter CustomerParameter = new HibernateParameter("customerId", "ANATR", StringType.INSTANCE);
public <E extends IStatefulEntity> IHibernateRepository<E> getDao(Class<E> entityCalss) {
return applicationContext.getBean(IHibernateRepositoryFactory.class).getOrCreateHibernateRepository(entityCalss);
// return Springs.getBean(IHibernateRepositoryFactory.class).getOrCreateHibernateRepository(entityCalss);
}
public void print(Iterable<?> collection) {
print(collection, 5);
}
public void print(Iterable<?> collection, Integer maxCount) {
if (log.isDebugEnabled()) {
log.debug("최대 [{}]개만 print 합니다...", maxCount);
log.debug("-----------------------------------");
for (Object x : Iterables.limit(collection, maxCount))
log.debug(x.toString());
log.debug("-----------------------------------");
}
}
}