package eu.dnetlib.dummy;

import javax.annotation.Resource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Test for DummyDAO. Please delete content from databases before running this test.
 * 
 * @author lexis
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class DummyDAOTest {
	/** Entity under test. */
	@Resource
	private DummyDAOInterface dummyDAO;
	/**
	 * logger.
	 */
	private static final Log log = LogFactory.getLog(DummyDAOTest.class);

	/**
	 * Clear everything from the datasources used by the DAO before execution of a new test method.
	 */
	@Before
	public void cleanDatabases() {
		this.dummyDAO.deleteAllContents();
	}

	/**
	 * Test method for {@link eu.dnetlib.dummy.DummyDAO#save(eu.dnetlib.dummy.DummyObject, boolean)}.Expect all ok.
	 */
	@Test
	public void testSave() {
		DummyObject obj1 = new DummyObject(1, "ciao1");
		log.debug(this.dummyDAO);
		this.dummyDAO.save(obj1, false);
	}

	/**
	 * Test method for {@link eu.dnetlib.dummy.DummyDAO#save(eu.dnetlib.dummy.DummyObject, boolean)}. Expect rollback.
	 */
	@Test(expected = RuntimeException.class)
	public void testSaveButFail() {
		DummyObject obj1 = new DummyObject(2, "ciao2");
		log.debug(this.dummyDAO);
		this.dummyDAO.save(obj1, true);
	}

	/**
	 * Test method for {@link eu.dnetlib.dummy.DummyDAO#saveUsingConnection(eu.dnetlib.dummy.DummyObject, boolean)}.
	 * Expect all ok.
	 */
	@Test
	public void testSaveUsingConnection() {
		int i = 2 + 1;
		DummyObject obj1 = new DummyObject(i, "ciao3");
		log.debug(this.dummyDAO);
		this.dummyDAO.saveUsingConnection(obj1, false);
	}

	/**
	 * Test method for {@link eu.dnetlib.dummy.DummyDAO#saveUsingConnection(eu.dnetlib.dummy.DummyObject, boolean)}.
	 * Expect rollback
	 */
	@Test(expected = RuntimeException.class)
	public void testSaveusingConnectionButFail() {
		int i = 2 + 2;
		DummyObject obj1 = new DummyObject(i, "ciao4");
		log.debug(this.dummyDAO);
		this.dummyDAO.saveUsingConnection(obj1, true);
	}

}
