package eu.dnetlib.r2d2.neo4j;

import javax.annotation.Resource;

import org.apache.log4j.BasicConfigurator;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.neo4j.graphdb.Transaction;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import eu.dnetlib.r2d2.neo4j.dao.GroupDao;
import eu.dnetlib.r2d2.neo4j.dao.ItemDao;
import eu.dnetlib.r2d2.neo4j.dao.Neo4JDao;
import eu.dnetlib.r2d2.neo4j.dao.ProfileDao;
import eu.dnetlib.r2d2.neo4j.dao.RLEntryDao;
import eu.dnetlib.r2d2.neo4j.dao.ReadingListDao;
import eu.dnetlib.r2d2.neo4j.dao.TagDao;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
		"/eu/dnetlib/r2d2/neo4j/applicationContext-neo4j.xml",
		"/eu/dnetlib/r2d2/neo4j/applicationContext-r2d2-neo4j-test.xml" })
public abstract class BaseTestCase extends
		AbstractAnnotationAwareTransactionalTests {

	@Resource protected ReadingListDao rlDao = null;
	@Resource protected ProfileDao profileDao = null;
	@Resource protected RLEntryDao entryDao = null;
	@Resource protected ItemDao itemDao = null;
	@Resource protected GroupDao groupDao = null;
	@Resource protected TagDao tagDao = null;
	@Resource protected EmbeddedGraphDatabase graphdb = null;
	
	protected Transaction tx = null;
	
	@BeforeClass public static void setup() {
		BasicConfigurator.configure();
	}
	
	@Before public void before() {
		tx = graphdb.beginTx();
	}
	
	@After public void after() {
		tx.success();
		tx.finish();
		
		Neo4JDao.createdNodes.remove();
		Neo4JDao.deletedNodes.remove();
		Neo4JDao.deletedRelations.remove();
	}
}
