package eu.dnetlib.enabling.database.objects;

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnit44Runner;
import org.springframework.orm.hibernate3.HibernateTemplate;

import eu.dnetlib.enabling.database.rmi.DatabaseException;

@RunWith(MockitoJUnit44Runner.class)
public class DnetDatabaseDAOTest {

	private static final String DB_ID = "id123";

	// Class Under Test
	private DnetDatabaseDAO dao;
	
	@Mock
	private HibernateTemplate mockHibernateTemplate;
	
	@Mock
	private DnetDatabase mockDB;
	
	
	@Before
	public void setUp() throws Exception {
		dao = new DnetDatabaseDAO();
		dao.setHibernateTemplate(mockHibernateTemplate);
		when(mockDB.getResourceId()).thenReturn(DB_ID);
	}

	@Test
	public void testDeleteDnetDatabase() throws DatabaseException {
		dao.delete(mockDB);
		verify(mockHibernateTemplate).delete(mockDB);
	}

	@Test
	public void testInsertDnetDatabase() throws Exception {
		dao.insert(mockDB);
		verify(mockDB).setResourceId(DB_ID);
		verify(mockHibernateTemplate).saveOrUpdate(mockDB);
	}

	@Test
	public void testUpdate() throws DatabaseException {
		dao.update(mockDB);
		verify(mockHibernateTemplate).saveOrUpdate(mockDB);	
	}

}
