package ee.devclub.model;
import org.hibernate.dialect.H2Dialect;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import javax.sql.DataSource;
import java.util.List;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public class HibernatePhotoSpotRepositoryIntegrationTest {
DataSource dataSource;
HibernatePhotoSpotRepository repo = new HibernatePhotoSpotRepository();
@Before
public void setUp() throws Exception {
dataSource = new DriverManagerDataSource("jdbc:h2:mem:hibernate;DB_CLOSE_DELAY=-1", "sa", "sa");
System.setProperty("hibernate.dialect", H2Dialect.class.getName());
System.setProperty("hibernate.hbm2ddl.auto", "create-drop");
AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setAnnotatedClasses(new Class[] {PhotoSpot.class});
sessionFactory.afterPropertiesSet();
repo.hibernate = new HibernateTemplate(sessionFactory.getObject());
}
@Test
public void loading() throws Exception {
dataSource.getConnection().createStatement()
.execute("insert into PhotoSpot (id, name, description, latitude, longitude) values (1, 'Kohtuotsa', 'Mega place!', 59.437755, 24.74209)");
List<PhotoSpot> spots = repo.getAllSpots();
assertThat(spots.size(), is(1));
PhotoSpot spot = spots.get(0);
assertThat(spot.name, is("Kohtuotsa"));
assertThat(spot.description, is("Mega place!"));
assertThat(spot.location, is(new Location(59.437755f, 24.74209f)));
}
@Test
public void fullCycle() throws Exception {
PhotoSpot spot = new PhotoSpot("Teletorn", "Tallinn TV Tower", new Location(59.47111f, 24.8875f));
repo.persist(spot);
repo.hibernate.clear();
PhotoSpot spot2 = repo.getAllSpots().get(0);
assertThat(spot2, not(sameInstance(spot)));
assertThat(spot2, equalTo(spot));
}
}