/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.backendtck.queries; import static org.fest.assertions.Assertions.assertThat; import java.util.List; import javax.persistence.EntityManager; import org.hibernate.ogm.utils.jpa.OgmJpaTestCase; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; /** * @author Davide D'Alto <davide@hibernate.org> */ public class JpaQueriesTest extends OgmJpaTestCase { private static final String POLICE_HELICOPTER = "Bell 206"; @Rule public ExpectedException thrown = ExpectedException.none(); private EntityManager em; @Test @SuppressWarnings("unchecked") public void testGetResultList() throws Exception { List<Helicopter> helicopters = em.createQuery( "FROM Helicopter WHERE name = :name" ) .setParameter( "name", POLICE_HELICOPTER ) .getResultList(); assertThat( helicopters.size() ).isEqualTo( 1 ); assertThat( helicopters.get( 0 ).getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test @SuppressWarnings("unchecked") public void testGetResultListWithSelect() throws Exception { List<Helicopter> helicopters = em.createQuery( "SELECT h FROM Helicopter h WHERE h.name = :name" ) .setParameter( "name", POLICE_HELICOPTER ) .getResultList(); assertThat( helicopters.size() ).isEqualTo( 1 ); assertThat( helicopters.get( 0 ).getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test public void testGetResultListWithTypedQuery() throws Exception { List<Helicopter> helicopters = em.createQuery( "FROM Helicopter WHERE name = :name", Helicopter.class ) .setParameter( "name", POLICE_HELICOPTER ) .getResultList(); assertThat( helicopters.size() ).isEqualTo( 1 ); assertThat( helicopters.get( 0 ).getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test @SuppressWarnings("unchecked") public void testGetResultListSize() throws Exception { List<Helicopter> helicopters = em.createQuery( "FROM Helicopter" ) .getResultList(); assertThat( helicopters.size() ).isEqualTo( 2 ); } @Test public void testGetResultListSizeWithTypedQuery() throws Exception { List<Helicopter> helicopters = em.createQuery( "FROM Helicopter", Helicopter.class ) .getResultList(); assertThat( helicopters.size() ).isEqualTo( 2 ); } @Test( expected = IllegalArgumentException.class) public void testGetResultListSizeWithWrongReturnedClass() throws Exception { em.createQuery( "FROM Helicopter", Hypothesis.class ); } @Test public void testSingleResult() throws Exception { Helicopter helicopter = (Helicopter) em.createQuery( "FROM Helicopter WHERE name = :name" ) .setParameter( "name", POLICE_HELICOPTER ) .getSingleResult(); assertThat( helicopter.getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test public void testGetSingleResultTypedQuery() throws Exception { Helicopter helicopter = em.createQuery( "FROM Helicopter WHERE name = :name", Helicopter.class ) .setParameter( "name", POLICE_HELICOPTER ) .getSingleResult(); assertThat( helicopter.getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test public void testCreateNamedQuery() throws Exception { Helicopter helicopter = (Helicopter) em.createNamedQuery( Helicopter.BY_NAME ) .setParameter( "name", POLICE_HELICOPTER ) .getSingleResult(); assertThat( helicopter.getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test public void testCreateNamedQueryTypeQuery() throws Exception { Helicopter helicopter = em.createNamedQuery( Helicopter.BY_NAME, Helicopter.class ) .setParameter( "name", POLICE_HELICOPTER ) .getSingleResult(); assertThat( helicopter.getName() ).isEqualTo( POLICE_HELICOPTER ); } @Test(expected = IllegalArgumentException.class) public void testCreateNamedQueryTypeQueryWithWrongReturnedClass() throws Exception { em.createNamedQuery( Helicopter.BY_NAME, Hypothesis.class ) .setParameter( "name", POLICE_HELICOPTER ) .getSingleResult(); } @Test @SuppressWarnings("unchecked") public void testAddedNamedQuery() throws Exception { final String allHelicopters = "AllHelicopters"; getFactory().addNamedQuery( allHelicopters, em.createQuery( "FROM Helicopter" ) ); List<Helicopter> helicopters = em.createNamedQuery( allHelicopters ).getResultList(); assertThat( helicopters.size() ).isEqualTo( 2 ); } @Before public void populateDb() throws Exception { em = getFactory().createEntityManager(); em.getTransaction().begin(); em.persist( helicopter( POLICE_HELICOPTER ) ); em.persist( helicopter( "AW139SAR" ) ); em.getTransaction().commit(); em.clear(); em.getTransaction().begin(); } @After public void closeEmAndRemoveEntities() throws Exception { //Do not hide the real cause with an NPE if there are initialization issues: if ( em != null ) { em.getTransaction().commit(); em.close(); removeEntities(); } } @Override public Class<?>[] getAnnotatedClasses() { return new Class<?>[] { Helicopter.class }; } private Helicopter helicopter(String name) { Helicopter helicopter = new Helicopter(); helicopter.setName( name ); return helicopter; } }