diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoTest.java new file mode 100644 index 0000000..a184077 --- /dev/null +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoTest.java @@ -0,0 +1,56 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; + +import static org.junit.Assert.assertEquals; + +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.List; + +import org.hibernate.query.Query; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.test.context.junit4.SpringRunner; + +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder; + +@RunWith(SpringRunner.class) +@DataJpaTest +@EnableAutoConfiguration +@Ignore +public class ClubEventDaoTest extends AbstractDatabaseTest { + + @Autowired + private ClubEventDao dao; + + @Autowired + private TestEntityManager entityManager; + + @Test + public void storeEvent() { + dao.save(creteEvent()); + + Query query = session.createNamedQuery("ClubEvent.findAll", + ClubEvent.class); + List result = query.list(); + assertEquals(1, result.size()); + } + + private ClubEvent creteEvent() { + ClubEvent ev = ClubEventBuilder.builder().withId("id").withAllDay(true) + .withCaption("caption").withDescription("description") + .withStart(ZonedDateTime.of(2018, 8, 13, 0, 0, 0, 0, + ZoneId.systemDefault())) + .withEnd(ZonedDateTime.of(2018, 8, 13, 0, 0, 0, 0, + ZoneId.systemDefault())) + .withiCalUID("iCalUID") + .withOrganizerDisplayName("organizerDisplayName").build(); + return ev; + } + +} diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDataTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDataTest.java index d702a61..4547449 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDataTest.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDataTest.java @@ -1,24 +1,37 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; +import org.hibernate.IdentifierLoadAccess; import org.hibernate.Transaction; +import org.hibernate.jdbc.Work; import org.hibernate.query.Query; import org.junit.Test; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEventBuilder; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubeventHasPerson; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; -public class ClubEventDaoImplTest extends AbstractDatabaseTest { +public class ClubEventDataTest extends AbstractDatabaseTest { - @Test - public void testInsertPerson() { + public Person testInsertPerson() { Person p = new Person(); p.setPrename("prename"); p.setSurname("surname"); @@ -26,6 +39,7 @@ public class ClubEventDaoImplTest extends AbstractDatabaseTest { Transaction tx = session.beginTransaction(); session.save(p); tx.commit(); + return p; } @Test @@ -51,6 +65,96 @@ public class ClubEventDaoImplTest extends AbstractDatabaseTest { assertEquals(1, result.size()); } + @Test + public void testEventWithPerson() { + + ClubEvent ev = creteEvent(); + + Person person = testInsertPerson(); + Set persons = ev.getPersons(); + if (persons == null) { + persons = new HashSet<>(); + ev.setPersons(persons); + } + persons.add(person); + + Transaction tx = session.beginTransaction(); + session.save(ev); + tx.commit(); + + List loadEventPersons = loadEventPersons(); + assertFalse(loadEventPersons.isEmpty()); + ClubeventHasPerson link = loadEventPersons.get(0); + assertEquals(person.getId(), link.getPersonId()); + assertEquals(ev.getId(), link.getClubEventId()); + + } + + private List loadEventPersons() { + final AtomicBoolean finishedWork = new AtomicBoolean(false); + List link = new ArrayList<>(); + + session.doWork(new Work() { + + @Override + public void execute(Connection connection) throws SQLException { + Statement stm = connection.createStatement(); + ResultSet rs = stm.executeQuery("select * from clubevent_has_person"); + while (rs.next()) { + ClubeventHasPerson ep = new ClubeventHasPerson(); + + ep.setClubEventId(rs.getString("clubevent_id")); + ep.setPersonId(rs.getInt("person_id")); + link.add(ep); + } + + finishedWork.set(true); + } + }); + assertTrue(finishedWork.get()); + return link; + } + + @Test + public void changeEventsPersons() { + ClubEvent ev = creteEvent(); + + Transaction tx = session.beginTransaction(); + session.save(ev); + tx.commit(); + + Person person = testInsertPerson(); + + Person person2 = new Person(); + person2.setId(person.getId() + 1); + person2.setPrename(person.getPrename() + "_2"); + person2.setSurname(person.getSurname() + "_2"); + person2.setBirth(new Date()); + + tx = session.beginTransaction(); + session.save(person2); + tx.commit(); + + IdentifierLoadAccess idLoadAccess = session.byId(ClubEvent.class); + ClubEvent loaded = idLoadAccess.load(ev.getId()); + assertNotNull(loaded); + if (loaded.getPersons() == null) { + loaded.setPersons(new HashSet<>()); + } + + loaded.getPersons().add(person); + tx = session.beginTransaction(); + session.update(ev); + tx.commit(); + + loaded.getPersons().add(person2); + tx = session.beginTransaction(); + session.update(ev); + tx.commit(); + List entries = loadEventPersons(); + assertEquals(2, entries.size()); + } + private ClubEvent creteEvent() { ClubEvent ev = ClubEventBuilder.builder().withId("id").withAllDay(true) .withCaption("caption").withDescription("description") diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/DatabaseTestBean.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/DatabaseTestBean.java new file mode 100644 index 0000000..b1fc5cf --- /dev/null +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/DatabaseTestBean.java @@ -0,0 +1,60 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; + +import java.io.IOException; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.support.ResourcePatternUtils; +import org.springframework.orm.hibernate5.LocalSessionFactoryBean; + +@SpringBootConfiguration +@EnableAutoConfiguration +public class DatabaseTestBean { + + @Autowired + private ResourceLoader rl; + + @Bean + public LocalSessionFactoryBean sessionFactory() throws Exception { + MyTestDatabase tdb = new MyTestDatabase(); + Configuration config = tdb.createConfig(); + + LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); + sessionFactoryBean.setHibernateProperties(config.getProperties()); +// Class[] dataClasses = {Adress.class, Attendance.class, Contact.class, DeletedEntry.class, GroupDef.class, Person.class, Persongroup.class, Relative.class, Startpaesse.class, StartpassStartrechte.class, Version.class}; +// sessionFactoryBean.setMappingLocations(loadResources()); +// sessionFactoryBean.setAnnotatedClasses(dataClasses); + + return sessionFactoryBean; + } + + public Resource[] loadResources() { + Resource[] resources = null; + try { + resources = ResourcePatternUtils.getResourcePatternResolver(rl) + .getResources("classpath:/schema/*.hbm.xml"); + } catch (IOException e) { + throw new RuntimeException(e); + } + return resources; + } + + class MyTestDatabase extends AbstractDatabaseTest { + + public SessionFactory getSessionFactory() { + return sessionFactory; + } + + public Session getSession() { + return session; + } + } +}