package org.raidenjpa.query.simple; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Before; import org.junit.Test; import org.raidenjpa.AbstractTestCase; import org.raidenjpa.entities.A; import org.raidenjpa.entities.B; import org.raidenjpa.util.BadSmell; import org.raidenjpa.util.FixMe; import org.raidenjpa.util.QueryHelper; @BadSmell("Rename") public class SimpleQueryTest extends AbstractTestCase { @Before public void setUp() { super.setUp(); createABC(); } @Test public void testWithSelectEntity() { QueryHelper query; query = new QueryHelper("SELECT a FROM A a"); assertEquals(1, query.getResultList().size()); } @Test public void testMoreThanOneFrom() { createB("b2"); createB("b3"); QueryHelper query; List<?> resultList; query = new QueryHelper("SELECT a FROM A a, B b"); resultList = query.getResultList(); assertEquals(3, resultList.size()); assertEquals(A.class, resultList.get(0).getClass()); query = new QueryHelper("SELECT b FROM A a, B b"); resultList = query.getResultList(); assertEquals(B.class, resultList.get(0).getClass()); query = new QueryHelper("SELECT b, a FROM A a, B b"); resultList = query.getResultList(); assertEquals(Object[].class, resultList.get(0).getClass()); assertEquals(B.class, get(resultList, 0, 0).getClass()); assertEquals(A.class, get(resultList, 0, 1).getClass()); query = new QueryHelper( "SELECT a.stringValue, a.intValue, b FROM A a, B b"); resultList = query.getResultList(); assertEquals("a1", get(resultList, 0, 0)); assertEquals(1, get(resultList, 0, 1)); assertEquals("b1", ((B) get(resultList, 0, 2)).getValue()); assertEquals("b2", ((B) get(resultList, 1, 2)).getValue()); assertEquals("b3", ((B) get(resultList, 2, 2)).getValue()); query = new QueryHelper("SELECT a, b, c.value FROM A a, B b, C c"); resultList = query.getResultList(); assertEquals(3, resultList.size()); assertEquals("c1", get(resultList, 0, 2)); } @Test public void testWithSelectAttributes() { QueryHelper query; List<?> resultList; query = new QueryHelper("SELECT a.stringValue FROM A a"); resultList = query.getResultList(); assertEquals("a1", resultList.get(0)); query = new QueryHelper("SELECT a.stringValue, a.intValue, a FROM A a"); resultList = query.getResultList(); Object[] row = (Object[]) resultList.get(0); assertEquals("a1", row[0]); assertEquals(1, row[1]); assertEquals("a1", ((A) row[2]).getStringValue()); } @Test public void testInFrom() { createAwithItens("a2", 3); createAwithItens("a3", 2); QueryHelper query; List<?> resultList; query = new QueryHelper("SELECT a.stringValue, item.value FROM A a, IN (a.itens) item WHERE a.stringValue = :stringValue"); query.parameter("stringValue", "a2"); resultList = query.getResultList(); assertEquals(3, resultList.size()); } @Test public void testWithoutSelect() { } @Test public void testDistinct() { createA("a1", 1); createA("a1", 1); createA("a1", 2); createA("a2", 2); String jpql = "SELECT distinct a.stringValue FROM A a"; QueryHelper query = new QueryHelper(jpql); assertEquals(2, query.getResultList().size()); jpql = "SELECT distinct a.stringValue, a.intValue FROM A a"; query = new QueryHelper(jpql); assertEquals(3, query.getResultList().size()); } @FixMe("TODO") public void testDistinctAndAggregateFunctions() { } private Object get(List<?> resultList, int linha, int coluna) { return ((Object[]) resultList.get(linha))[coluna]; } }