package net.sf.jeasyorm; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.sf.jeasyorm.model.Person; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class FinderTest extends AbstractEntityManagerTest { public FinderTest(String name, String driver, String url, String username, String password) throws ClassNotFoundException { super(name, driver, url, username, password); } @Test public void testFinders() throws SQLException { Connection conn = getConnection(); EntityManager em = getEntityManager(conn); // insert data em.insert(new Person("Franz", "Huber")); em.insert(new Person("Max", "Meier")); em.insert(new Person("Max", "Mayer")); em.insert(new Person("Martin", "Muster")); em.insert(new Person("Max", "Huber")); // check unique finder Person p1 = em.findUnique(Person.class, "where last_name = ?", "Mayer"); assertNotNull(p1); assertNotNull(p1.getId()); assertEquals("Max", p1.getFirstName()); assertEquals("Mayer", p1.getLastName()); Person p2 = em.findUnique(Person.class, "where last_name like ?", "May%"); assertNotNull(p2); assertEquals(p2.getId(), p1.getId()); Person p3 = em.findUnique(Person.class, "where last_name = ?", "X"); assertNull(p3); try { p3 = em.findUnique(Person.class, "where first_name = ?", "Max"); throw new RuntimeException("Must throw an exception!"); } catch (RuntimeSQLException e) { // OK } // check list finder List<Person> ps = em.find(Person.class, "where first_name = ?", "Franz"); assertEquals(1, ps.size()); p1 = ps.get(0); assertNotNull(p1); assertNotNull(p1.getId()); assertEquals("Franz", p1.getFirstName()); assertEquals("Huber", p1.getLastName()); ps = em.find(Person.class, "where first_name = ?", "Max"); assertEquals(3, ps.size()); ps = em.find(Person.class, "order by first_name, last_name"); assertEquals(5, ps.size()); assertEquals("Franz", ps.get(0).getFirstName()); assertEquals("Martin", ps.get(1).getFirstName()); assertEquals("Huber", ps.get(2).getLastName()); assertEquals("Mayer", ps.get(3).getLastName()); assertEquals("Meier", ps.get(4).getLastName()); // check list finder with from ps = em.find(Person.class, "from tperson where first_name = ? and last_name = ?", "Franz", "Huber"); assertEquals(1, ps.size()); // check list finder with select ps = em.find(Person.class, "select * from tperson order by last_name"); assertEquals(5, ps.size()); // check scalar finder List<String> lastNames = em.find(String.class, "select last_name from tperson where last_name > ? order by last_name", "M"); assertEquals(3, lastNames.size()); assertEquals("Mayer", lastNames.get(0)); assertEquals("Meier", lastNames.get(1)); assertEquals("Muster", lastNames.get(2)); conn.close(); } @Test public void testPaging() throws SQLException { Connection conn = getConnection(); EntityManager em = getEntityManager(conn); // insert data em.insert(new Person("Franz", "Huber")); em.insert(new Person("Max", "Huber")); em.insert(new Person("Mathias", "Matz")); em.insert(new Person("Max", "Mayer")); em.insert(new Person("Josef", "Meier")); em.insert(new Person("Matthias", "Meier")); em.insert(new Person("Max", "Meier")); em.insert(new Person("Raimund", "Meier")); em.insert(new Person("Roman", "Meier")); em.insert(new Person("Susanne", "Meier")); em.insert(new Person("Martin", "Muster")); em.insert(new Person("Robert", "Rot")); // check first page Page<Person> ps = em.find(Person.class, 0, 3, "from tperson order by last_name, first_name"); assertEquals(3, ps.size()); assertEquals(12, ps.totalSize()); assertEquals(0, ps.pageNumber()); assertEquals(3, ps.pageSize()); assertEquals("Franz", ps.get(0).getFirstName()); assertEquals("Huber", ps.get(0).getLastName()); assertEquals("Max", ps.get(1).getFirstName()); assertEquals("Huber", ps.get(1).getLastName()); assertEquals("Mathias", ps.get(2).getFirstName()); assertEquals("Matz", ps.get(2).getLastName()); // check second page ps = em.find(Person.class, 1, 3, "from tperson order by last_name, first_name"); assertEquals(3, ps.size()); assertEquals(12, ps.totalSize()); assertEquals("Max", ps.get(0).getFirstName()); assertEquals("Mayer", ps.get(0).getLastName()); assertEquals("Josef", ps.get(1).getFirstName()); assertEquals("Meier", ps.get(1).getLastName()); assertEquals("Matthias", ps.get(2).getFirstName()); assertEquals("Meier", ps.get(2).getLastName()); // get last partial page ps = em.find(Person.class, 2, 5, "from tperson order by last_name, first_name"); assertEquals(2, ps.size()); assertEquals(12, ps.totalSize()); assertEquals("Martin", ps.get(0).getFirstName()); assertEquals("Muster", ps.get(0).getLastName()); assertEquals("Robert", ps.get(1).getFirstName()); assertEquals("Rot", ps.get(1).getLastName()); // get page with where ps = em.find(Person.class, 1, 2, "from tperson where last_name = 'Meier' order by first_name"); assertEquals(2, ps.size()); assertEquals(6, ps.totalSize()); assertEquals(1, ps.pageNumber()); assertEquals(2, ps.pageSize()); assertEquals("Max", ps.get(0).getFirstName()); assertEquals("Meier", ps.get(0).getLastName()); assertEquals("Raimund", ps.get(1).getFirstName()); assertEquals("Meier", ps.get(1).getLastName()); conn.close(); } @Test public void testIterator() throws SQLException { Connection conn = getConnection(); EntityManager em = getEntityManager(conn); // insert data em.insert(new Person("Franz", "Huber")); em.insert(new Person("Max", "Huber")); em.insert(new Person("Mathias", "Matz")); em.insert(new Person("Max", "Mayer")); em.insert(new Person("Josef", "Meier")); em.insert(new Person("Matthias", "Meier")); // read data List<String> ps = new ArrayList<String>(); Iterator<Person> it = em.iterator(Person.class, "order by first_name"); while (it.hasNext()) ps.add(it.next().getFirstName()); assertEquals(6, ps.size()); assertEquals("Franz", ps.get(0)); assertEquals("Josef", ps.get(1)); assertEquals("Mathias", ps.get(2)); assertEquals("Matthias", ps.get(3)); assertEquals("Max", ps.get(4)); assertEquals("Max", ps.get(5)); conn.close(); } }