diff --git a/.classpath b/.classpath index 1cbc804..3c31b96 100644 --- a/.classpath +++ b/.classpath @@ -32,7 +32,6 @@ - diff --git a/pom.xml b/pom.xml index 6164711..af1487e 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,7 @@ - + 4.0.0 de.kreth.vaadin.clubhelper @@ -263,6 +265,13 @@ pom import + + org.junit + junit-bom + 5.5.0-M1 + pom + import + @@ -359,5 +368,5 @@ https://github.com/markuskreth/vaadin-clubhelper.git scm:git:git@github.com:markuskreth/vaadin-clubhelper.git scm:git:git@github.com:markuskreth/vaadin-clubhelper.git - + diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java index 0fb4a22..2b210c2 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java @@ -20,7 +20,8 @@ public abstract class AbstractDaoImpl implements IDao< protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired - protected EntityManager entityManager; + protected transient EntityManager entityManager; + private final Class entityClass; public AbstractDaoImpl(Class entityClass) { @@ -35,7 +36,8 @@ public abstract class AbstractDaoImpl implements IDao< obj.setChanged(now); if (entityManager.contains(obj) || obj.hasValidId()) { entityManager.merge(obj); - } else { + } + else { obj.setCreated(now); entityManager.persist(obj); } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessSpringTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessSpringTest.java index d024cea..7c219c3 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessSpringTest.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusinessSpringTest.java @@ -1,5 +1,6 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.business; +import static de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper.afterCommit; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -11,15 +12,13 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.transaction.annotation.Transactional; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ClubhelperException; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper; @@ -48,77 +47,85 @@ class EventBusinessSpringTest { private TypedQuery all; - @BeforeEach void setUp() throws Exception { - testDatabaseHelper.cleanDatabase(); insertTestData(); eventBusiness.setSelected(event); all = entityManager.createQuery("from ClubeventHasPerson", ClubeventHasPerson.class); } - @AfterEach - void shutdown() { - entityManager.clear(); - testDatabaseHelper.cleanDatabase(); - } - private void insertTestData() { persons = new ArrayList<>(); - testDatabaseHelper.transactional(() -> { - for (int i = 0; i < 3; i++) { - - Person p = new Person(); - p.setPrename("prename_" + i); - p.setSurname("surname_" + i); - p.setBirth(LocalDate.now()); - entityManager.persist(p); - persons.add(p); - } - event = testDatabaseHelper.creteEvent(); - assertNull(event.getPersons()); - entityManager.persist(event); - }); + for (int i = 0; i < 3; i++) { + + Person p = new Person(); + p.setPrename("prename_" + i); + p.setSurname("surname_" + i); + p.setBirth(LocalDate.now()); + entityManager.persist(p); + persons.add(p); + } + event = testDatabaseHelper.creteEvent(); + assertNull(event.getPersons()); + entityManager.persist(event); } @Test - void testDataCorrectlyCreated() { + @Transactional + void testDataCorrectlyCreated() throws Exception { + + setUp(); - assertEquals(0, all.getResultList().size()); + afterCommit(() -> { - List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); - assertEquals(3, stored.size()); + assertEquals(0, all.getResultList().size()); - List events = eventBusiness.loadEvents(); - assertEquals(1, events.size()); + List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); + assertEquals(3, stored.size()); + + List events = eventBusiness.loadEvents(); + assertEquals(1, events.size()); + }); } @Test - @Disabled - void testAddPersonsToEvent() { - assertEquals(0, all.getResultList().size()); - try { - transactional(() -> eventBusiness.changePersons(new HashSet<>(persons.subList(0, 1)))); - transactional(() -> eventBusiness.changePersons(new HashSet<>(persons.subList(0, 2)))); - } - catch (Exception e) { + @Transactional + void testAddPersonsToEvent() throws Exception { + setUp(); - } + afterCommit(() -> { + assertEquals(0, all.getResultList().size()); + }); - List result = all.getResultList(); - assertEquals(2, result.size()); - } + afterCommit(() -> { + try { + eventBusiness.changePersons(new HashSet<>(persons.subList(0, 1))); + } + catch (ClubhelperException e) { + throw new RuntimeException(e); + } + }); - private void transactional(ThrowingRunnable object) { - testDatabaseHelper.transactional(() -> { + afterCommit(() -> { + List result = all.getResultList(); + assertEquals(1, result.size()); + }); + + afterCommit(() -> { try { - object.run(); + eventBusiness.changePersons(new HashSet<>(persons.subList(0, 2))); } catch (ClubhelperException e) { throw new RuntimeException(e); } }); + + afterCommit(() -> { + List result = all.getResultList(); + assertEquals(2, result.size()); + }); + } } 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 e5d9ab6..3b5353a 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,5 +1,6 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; +import static de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper.afterCommit; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -11,12 +12,12 @@ import java.util.Set; import javax.persistence.EntityManager; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubeventHasPerson; @@ -35,42 +36,43 @@ public class ClubEventDataTest { @Autowired TestDatabaseHelper testDatabaseHelper; - @AfterEach - public void cleanDatabase() { - testDatabaseHelper.cleanDatabase(); - } - @Test + @Transactional public void testEventAddon() { ClubEvent ev = testDatabaseHelper.creteEvent(); ev.setType(Type.EINZEL); - testDatabaseHelper.transactional(() -> { - entityManager.persist(ev); -// entityManager.persist(ev.getCompetitionType()); + entityManager.persist(ev); + afterCommit(() -> { + List allClubEvent = testDatabaseHelper.allClubEvent(); + assertEquals(1, allClubEvent.size()); + assertEquals(Type.EINZEL, allClubEvent.get(0).getType()); }); - List allClubEvent = testDatabaseHelper.allClubEvent(); - assertEquals(1, allClubEvent.size()); - assertEquals(Type.EINZEL, allClubEvent.get(0).getType()); ev.setType(Type.DOPPELMINI); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); - allClubEvent = testDatabaseHelper.allClubEvent(); - assertEquals(1, allClubEvent.size()); - assertEquals(Type.DOPPELMINI, allClubEvent.get(0).getType()); + entityManager.merge(ev); + + afterCommit(() -> { + List allClubEvent = testDatabaseHelper.allClubEvent(); + assertEquals(1, allClubEvent.size()); + assertEquals(Type.DOPPELMINI, allClubEvent.get(0).getType()); + }); } @Test + @Transactional public void testSaveAndSelectEvent() { ClubEvent ev = testDatabaseHelper.creteEvent(); - - testDatabaseHelper.transactional(() -> entityManager.persist(ev)); - List result = testDatabaseHelper.allClubEvent(); - assertEquals(1, result.size()); + entityManager.persist(ev); + afterCommit(() -> { + List result = testDatabaseHelper.allClubEvent(); + assertEquals(1, result.size()); + }); } @Test + @Transactional public void testEventWithPerson() { ClubEvent ev = testDatabaseHelper.creteEvent(); @@ -82,22 +84,23 @@ public class ClubEventDataTest { ev.setPersons(persons); } persons.add(person); + entityManager.persist(ev); - testDatabaseHelper.transactional(() -> entityManager.persist(ev)); - - List loadEventPersons = testDatabaseHelper.loadEventPersons(); - assertFalse(loadEventPersons.isEmpty()); - ClubeventHasPerson link = loadEventPersons.get(0); - assertEquals(person.getId(), link.getPersonId()); - assertEquals(ev.getId(), link.getClubEventId()); + afterCommit(() -> { + List loadEventPersons = testDatabaseHelper.loadEventPersons(); + assertFalse(loadEventPersons.isEmpty()); + ClubeventHasPerson link = loadEventPersons.get(0); + assertEquals(person.getId(), link.getPersonId()); + assertEquals(ev.getId(), link.getClubEventId()); + }); } @Test + @Transactional public void changeEventsPersons() { ClubEvent ev = testDatabaseHelper.creteEvent(); - - testDatabaseHelper.transactional(() -> entityManager.persist(ev)); + entityManager.persist(ev); Person person = testDatabaseHelper.testInsertPerson(); @@ -106,7 +109,7 @@ public class ClubEventDataTest { person2.setSurname(person.getSurname() + "_2"); person2.setBirth(LocalDate.now()); - testDatabaseHelper.transactional(() -> entityManager.persist(person2)); + entityManager.persist(person2); ClubEvent loaded = entityManager.find(ClubEvent.class, ev.getId()); assertNotNull(loaded); @@ -115,41 +118,47 @@ public class ClubEventDataTest { } loaded.add(person); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); + entityManager.merge(ev); loaded.add(person2); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); + entityManager.merge(ev); - List entries = testDatabaseHelper.loadEventPersons(); - assertEquals(2, entries.size()); + afterCommit(() -> { + List entries = testDatabaseHelper.loadEventPersons(); + assertEquals(2, entries.size()); + }); } @Test + @Transactional public void testChangeEventParticipantsRapidly() { final ClubEvent created = testDatabaseHelper.creteEvent(); - testDatabaseHelper.transactional(() -> { - entityManager.persist(created); - }); + entityManager.persist(created); - final ClubEvent ev = entityManager.find(ClubEvent.class, created.getId()); - List persons = testDatabaseHelper.insertPersons(6); - for (Person p : persons) { - ev.add(p); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); - } - ev.remove(persons.get(2)); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); + afterCommit(() -> { + final ClubEvent ev = entityManager.find(ClubEvent.class, created.getId()); + List persons = testDatabaseHelper.insertPersons(6); + for (Person p : persons) { + ev.add(p); + entityManager.merge(ev); + } + ev.remove(persons.get(2)); + entityManager.merge(ev); - ev.remove(persons.get(4)); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); + ev.remove(persons.get(4)); + entityManager.merge(ev); - ev.getPersons().add(persons.get(2)); - ev.getPersons().add(persons.get(4)); - testDatabaseHelper.transactional(() -> entityManager.merge(ev)); + ev.getPersons().add(persons.get(2)); + ev.getPersons().add(persons.get(4)); + entityManager.merge(ev); - List result = testDatabaseHelper.loadEventPersons(); - assertEquals(6, result.size()); + }); + afterCommit(() -> { + + List result = testDatabaseHelper.loadEventPersons(); + assertEquals(6, result.size()); + }); } } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoRelativeTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoRelativeTest.java index e645559..26c5450 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoRelativeTest.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoRelativeTest.java @@ -1,10 +1,7 @@ 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.jupiter.api.Assertions.assertNotNull; -import java.io.IOException; import java.sql.ResultSet; import java.sql.Statement; import java.util.List; @@ -13,22 +10,22 @@ import javax.persistence.EntityManager; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestConfiguration; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestPersonGenerator; @SpringBootTest @ContextConfiguration(classes = TestConfiguration.class) @Tag("spring") -@Disabled public class PersonDaoRelativeTest { @Autowired @@ -37,51 +34,56 @@ public class PersonDaoRelativeTest { @Autowired private EntityManager entityManager; - @Autowired - private TestDatabaseHelper testDatabaseHelper; - @Autowired private SessionFactory sessionFactory; - private Person person1; - - private Person person2; + private List persons; @BeforeEach + @Transactional + @Rollback(false) public void setUp() throws Exception { -// testDatabaseHelper.cleanDatabase(); -// List persons = TestPersonGenerator.generatePersonen(2); -// person1 = persons.get(0); -// person2 = persons.get(1); - List resultList = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); - assertFalse(resultList.isEmpty()); - } + persons = TestPersonGenerator.generatePersonen(2); + for (Person p : persons) { + p.setId(0); + } - @AfterEach - public void clearDatabase() throws IOException { -// testDatabaseHelper.cleanDatabase(); } @Test + @Transactional void testLoadPersonById() { - person1 = entityManager.find(Person.class, Integer.valueOf(1)); - assertNotNull(person1); - assertEquals(1, person1.getId()); + for (Person p : persons) { + personDao.save(p); + } + TestDatabaseHelper.afterCommit(() -> { + Person person1 = entityManager.find(Person.class, 1); + assertNotNull(person1); + }); } @Test + @Transactional void testStorePersonChildRelationship() { - Session session = sessionFactory.openSession(); - session.doWork(conn -> { - try (Statement stm = conn.createStatement()) { - ResultSet rs = stm.executeQuery( - "SELECT id, person1, person2, TO_PERSON1_RELATION, TO_PERSON2_RELATION, changed, created, deleted FROM relative where person1=1 OR person2=1 and deleted is null"); - while (rs.next()) { - System.out.println("id=" + rs.getInt("id") + ", person1=" + rs.getInt("person1") + ", person2=" - + rs.getInt("person2") + ", TO_PERSON1_RELATION=" + rs.getString("TO_PERSON1_RELATION")); + for (Person p : persons) { + personDao.save(p); + } + TestDatabaseHelper.afterCommit(() -> { + Session session = sessionFactory.openSession(); + session.doWork(conn -> { + try (Statement stm = conn.createStatement()) { + ResultSet rs = stm.executeQuery( + "SELECT id, person1, person2, TO_PERSON1_RELATION, TO_PERSON2_RELATION, changed, created, deleted FROM relative where person1=1 OR person2=1 and deleted is null"); + while (rs.next()) { + System.out.println( + "id=" + rs.getInt("id") + ", person1=" + rs.getInt("person1") + ", person2=" + + rs.getInt("person2") + ", TO_PERSON1_RELATION=" + + rs.getString("TO_PERSON1_RELATION")); + } } - } + }); }); } + } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoTest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoTest.java index c2ad74b..55cd19d 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoTest.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoTest.java @@ -1,22 +1,21 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; +import static de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper.afterCommit; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import java.io.IOException; import java.time.LocalDate; import java.util.List; import javax.persistence.EntityManager; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; +import org.springframework.transaction.annotation.Transactional; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Gender; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; @@ -33,14 +32,10 @@ public class PersonDaoTest { @Autowired private EntityManager entityManager; - @Autowired - private TestDatabaseHelper testDatabaseHelper; - private Person person; @BeforeEach public void setUp() throws Exception { - testDatabaseHelper.cleanDatabase(); person = new Person(); person.setPrename("prename"); person.setSurname("surname"); @@ -50,54 +45,58 @@ public class PersonDaoTest { assertTrue(entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList().isEmpty()); } - @AfterEach - public void clearDatabase() throws IOException { - testDatabaseHelper.cleanDatabase(); - } - @Test + @Transactional public void testSave() { - testDatabaseHelper.transactional(() -> personDao.save(person)); - - List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); - assertEquals(1, stored.size()); - assertEquals(person, stored.get(0)); - assertEquals(person, personDao.get(person.getId())); + personDao.save(person); + afterCommit(() -> { + List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); + assertEquals(1, stored.size()); + assertEquals(person, stored.get(0)); + assertEquals(person, personDao.get(person.getId())); + }); } @Test + @Transactional public void testUpdate() { - testDatabaseHelper.transactional(() -> personDao.save(person)); - person.setSurname("surname2"); - person.setPrename("prename2"); + personDao.save(person); + afterCommit(() -> { + + person.setSurname("surname2"); + person.setPrename("prename2"); - testDatabaseHelper.transactional(() -> personDao.save(person)); + personDao.save(person); - List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); - assertEquals(1, stored.size()); - assertEquals(person, stored.get(0)); + }); + afterCommit(() -> { + List stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); + assertEquals(1, stored.size()); + assertEquals(person, stored.get(0)); + }); } @Test + @Transactional public void testListAll() { - testDatabaseHelper.transactional(() -> personDao.save(person)); + + personDao.save(person); person = new Person(); person.setSurname("surname2"); person.setPrename("prename2"); person.setBirth(LocalDate.of(2018, 11, 8)); person.setPassword("password"); + personDao.save(person); - testDatabaseHelper.transactional(() -> personDao.save(person)); - List stored = personDao.listAll(); - assertEquals(2, stored.size()); + afterCommit(() -> { - } + List stored = personDao.listAll(); + assertEquals(2, stored.size()); + }); - @Test - public void testPersonGroup() { - assertNotNull(new GroupDaoImpl()); } + } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelper.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelper.java index a02027a..377ddab 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelper.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelper.java @@ -1,9 +1,9 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.dao; import java.util.List; -import java.util.function.Consumer; -import org.hibernate.Session; +import org.springframework.transaction.support.TransactionSynchronizationAdapter; +import org.springframework.transaction.support.TransactionSynchronizationManager; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubeventHasPerson; @@ -11,15 +11,6 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; public interface TestDatabaseHelper { - /** - * executes the given runnable within a jpa Transaction. - * - * @param r - */ - void transactional(Runnable r); - - void transactional(Consumer r); - List insertPersons(int count); List createPersons(int count); @@ -32,5 +23,18 @@ public interface TestDatabaseHelper { Person testInsertPerson(); - void cleanDatabase(); -} \ No newline at end of file + public static void afterCommit(final Runnable r) { + + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { + @Override + public void afterCommit() { + r.run(); + } + }); + } + + public static void waitForCommit() { + afterCommit(() -> { + }); + } +} diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelperImpl.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelperImpl.java index ecf2f3d..b258484 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelperImpl.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/TestDatabaseHelperImpl.java @@ -14,10 +14,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Consumer; import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; @@ -36,28 +34,6 @@ public class TestDatabaseHelperImpl implements TestDatabaseHelper { @Autowired protected EntityManager entityManager; - @Override - public void cleanDatabase() { - - Session session = (Session) entityManager; - session.doWork(conn -> { - - List tableNames = loadTables(conn); - try (Statement stm = conn.createStatement()) { - - stm.addBatch("SET FOREIGN_KEY_CHECKS=0"); - for (String table : tableNames) { - stm.addBatch("TRUNCATE TABLE " + table); - } - stm.addBatch("SET FOREIGN_KEY_CHECKS=1"); - stm.executeBatch(); - } - if (conn.getAutoCommit() == false) { - conn.commit(); - } - }); - } - public List loadTables(Connection conn) throws SQLException { List tableNames = new ArrayList<>(); @@ -71,30 +47,24 @@ public class TestDatabaseHelperImpl implements TestDatabaseHelper { return tableNames; } - /** - * executes the given runnable within a jpa Transaction. - * - * @param r - */ - @Override - public void transactional(Runnable r) { - transactional(session -> r.run()); - } - - @Override - public void transactional(Consumer r) { - - Session session = (Session) entityManager; - EntityTransaction tx = session.getTransaction(); - tx.begin(); - try { - r.accept(session); - tx.commit(); - } catch (Exception e) { - tx.rollback(); - throw e; - } - } +// private void transactional(Runnable r) { +// transactional(session -> r.run()); +// } +// +// private void transactional(Consumer r) { +// +// Session session = (Session) entityManager; +// EntityTransaction tx = session.getTransaction(); +// tx.begin(); +// try { +// r.accept(session); +// tx.commit(); +// } +// catch (Exception e) { +// tx.rollback(); +// throw e; +// } +// } @Override public Person testInsertPerson() { @@ -103,7 +73,7 @@ public class TestDatabaseHelperImpl implements TestDatabaseHelper { p.setSurname("surname"); p.setBirth(LocalDate.now()); - transactional(() -> entityManager.persist(p)); + entityManager.persist(p); return p; } @@ -112,11 +82,9 @@ public class TestDatabaseHelperImpl implements TestDatabaseHelper { final List inserted = createPersons(count); - transactional(() -> { - for (Person p : inserted) { - entityManager.persist(p); - } - }); + for (Person p : inserted) { + entityManager.persist(p); + } for (Person p : inserted) { assertTrue(p.getId() > 0, "not saved: " + p); } diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/SmokeUITest.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/SmokeUITest.java new file mode 100644 index 0000000..ed8452a --- /dev/null +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/SmokeUITest.java @@ -0,0 +1,132 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; + +import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.EntityExchangeResult; +import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec; +import org.springframework.test.web.reactive.server.WebTestClient.ResponseSpec; +import org.springframework.transaction.annotation.Transactional; + +import com.vaadin.server.VaadinSession; + +import de.kreth.googleconnectors.calendar.CalendarAdapter; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PflichtenDao; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.TestDatabaseHelper; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation.ClubhelperNavigation; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) // , properties = + // "spring.main.web-application-type=reactive" +@AutoConfigureWebTestClient +@Tag("spring") +public class SmokeUITest { + + @Autowired + WebTestClient webClient; + + @Autowired + PersonDao personDao; + + @Autowired + GroupDao groupDao; + + @Autowired + EventBusiness eventBusiness; + + @Autowired + PflichtenDao pflichtenDao; + + @Autowired + SecurityVerifier securityGroupVerifier; + + @Autowired + CalendarAdapter calendarAdapter; + + @Autowired + ClubhelperNavigation clubhelperNavigation; + + @Test + public void autowiredComponentsArePresent() { + List autowiredFields = Arrays.asList(getClass().getDeclaredFields()).stream() + .filter(f -> f.getAnnotation(Autowired.class) != null) + .collect(Collectors.toList()); + + for (Field field : autowiredFields) { + try { + Object object = field.get(this); + assertNotNull(object, "Null object in field: " + field); + } + catch (IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException("Error accessing object in Field " + field, e); + } + } + } + + @Test + void databaseIsEmpty() { + List allPersons = personDao.listAll(); + assertEquals(0, allPersons.size()); + } + + @Test + @Transactional + void useDatabase() { + GroupDef group = new GroupDef(); + group.setName("admin"); + + this.groupDao.save(group); + TestDatabaseHelper.afterCommit(() -> { + assertEquals(1, groupDao.listAll().size()); + }); + } + + @Test + void securityGroupVerifierIsLoggedin() { + VaadinSession session = mock(VaadinSession.class); + VaadinSession.setCurrent(session); + assertFalse(securityGroupVerifier.isLoggedin()); + Person person = new Person(); + Set groups = new HashSet(); + groups.add(new GroupDef()); + person.setGroups(groups); + securityGroupVerifier.setLoggedinPerson(person); // must be set and have at least one Group defined. + assertTrue(securityGroupVerifier.isLoggedin()); + } + + @Test + void webClientAccess() { + ResponseSpec responseSpec = this.webClient.get().uri("/").exchange(); + responseSpec.expectStatus().isOk(); + BodyContentSpec body = responseSpec.expectBody(); + EntityExchangeResult result = body.returnResult(); + String content = new String(result.getResponseBody()); + assertFalse(content.isBlank()); + assertTrue(content.toLowerCase().contains("vaadin")); + } +} diff --git a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/TestPersonGenerator.java b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/TestPersonGenerator.java index fc64142..c38d2c1 100644 --- a/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/TestPersonGenerator.java +++ b/src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/tests/TestPersonGenerator.java @@ -10,7 +10,7 @@ public class TestPersonGenerator { public static List generatePersonen(int count) { List personen = new ArrayList<>(); - for (int i = 0; i < count; i++) { + for (int i = 1; i <= count; i++) { Person p = new Person(); p.setId(i); p.setPrename("prename_" + i);