package org.compass.core.test.support.search; import org.compass.core.CompassSession; import org.compass.core.CompassTransaction; import org.compass.core.support.search.CompassSearchCommand; import org.compass.core.support.search.CompassSearchHelper; import org.compass.core.support.search.CompassSearchResults; import org.compass.core.test.AbstractTestCase; /** * @author kimchy */ public class CompassSearchHelperTests extends AbstractTestCase { protected String[] getMappings() { return new String[]{"support/search/mapping.cpm.xml"}; } public void testNoPagination() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 10); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass()); CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test")); assertEquals(10, results.getHits().length); assertEquals(10, results.getTotalHits()); tr.commit(); session.close(); } public void testNoPaginationWithCompassQuery() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 10); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass()); CompassSearchResults results = searchHelper.search(new CompassSearchCommand(session.queryBuilder().queryString("test").toQuery())); assertEquals(10, results.getHits().length); assertEquals(10, results.getTotalHits()); tr.commit(); session.close(); } public void testSinglePage() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 10); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass(), new Integer(20)); CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test")); assertEquals(10, results.getHits().length); assertEquals(10, results.getTotalHits()); assertEquals(1, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(10, results.getPages()[0].getTo()); assertEquals(10, results.getPages()[0].getSize()); assertEquals(true, results.getPages()[0].isSelected()); tr.commit(); session.close(); } public void testTwoPagesExactMatch() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 10); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass(), new Integer(5)); CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test", new Integer(0))); assertEquals(5, results.getHits().length); assertEquals(10, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(true, results.getPages()[0].isSelected()); assertEquals(6, results.getPages()[1].getFrom()); assertEquals(10, results.getPages()[1].getTo()); assertEquals(5, results.getPages()[1].getSize()); assertEquals(false, results.getPages()[1].isSelected()); searchHelper = new CompassSearchHelper(getCompass(), new Integer(5)); results = searchHelper.search(new CompassSearchCommand("test", new Integer(1))); assertEquals(5, results.getHits().length); assertEquals(10, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(false, results.getPages()[0].isSelected()); assertEquals(6, results.getPages()[1].getFrom()); assertEquals(10, results.getPages()[1].getTo()); assertEquals(5, results.getPages()[1].getSize()); assertEquals(true, results.getPages()[1].isSelected()); tr.commit(); session.close(); } public void testTwoPagesSmallerLastPage() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 8); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass(), new Integer(5)); CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test", new Integer(0))); assertEquals(5, results.getHits().length); assertEquals(8, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(true, results.getPages()[0].isSelected()); assertEquals(6, results.getPages()[1].getFrom()); assertEquals(8, results.getPages()[1].getTo()); assertEquals(3, results.getPages()[1].getSize()); assertEquals(false, results.getPages()[1].isSelected()); searchHelper = new CompassSearchHelper(getCompass(), new Integer(5)); results = searchHelper.search(new CompassSearchCommand("test", new Integer(1))); assertEquals(3, results.getHits().length); assertEquals(8, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(false, results.getPages()[0].isSelected()); assertEquals(6, results.getPages()[1].getFrom()); assertEquals(8, results.getPages()[1].getTo()); assertEquals(3, results.getPages()[1].getSize()); assertEquals(true, results.getPages()[1].isSelected()); tr.commit(); session.close(); } /** * The purpose of this test is to verify that the size of the second page is determined correctly. */ public void testSecondSmallerPageSize() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 8); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass(), new Integer(5)); CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test", new Integer(0))); assertEquals(5, results.getHits().length); assertEquals(8, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(true, results.getPages()[0].isSelected()); assertEquals(6, results.getPages()[1].getFrom()); assertEquals(8, results.getPages()[1].getTo()); assertEquals(3, results.getPages()[1].getSize()); assertEquals(false, results.getPages()[1].isSelected()); searchHelper = new AbstractSearchHelper(getCompass(), new Integer(5)); results = searchHelper.search(new CompassSearchCommand("test", new Integer(1))); assertEquals(3, results.getHits().length); assertEquals(8, results.getTotalHits()); assertEquals(2, results.getPages().length); assertEquals(5,((AbstractSearchHelper)searchHelper).getExpectedFrom()); assertEquals(3,((AbstractSearchHelper)searchHelper).getExpectedSize()); tr.commit(); session.close(); } /** * The purpose is to test that if user asks for the second result page (even if * results fits the first page completely) that it returns the first page again * and no Exeption is thrown. */ public void testSecondPageWhenFirstPageSmallerThenPageSize() { CompassSession session = openSession(); CompassTransaction tr = session.beginTransaction(); addData(session, 5); CompassSearchHelper searchHelper = new CompassSearchHelper(getCompass(), new Integer(10)); // Note that we are asking for the second result page even if results completely fits the first result page. CompassSearchResults results = searchHelper.search(new CompassSearchCommand("test", new Integer(1))); assertEquals(5, results.getHits().length); assertEquals(5, results.getTotalHits()); assertEquals(1, results.getPages().length); assertEquals(1, results.getPages()[0].getFrom()); assertEquals(5, results.getPages()[0].getTo()); assertEquals(5, results.getPages()[0].getSize()); assertEquals(true, results.getPages()[0].isSelected()); tr.commit(); session.close(); } private void addData(CompassSession session, int size) { for (int i = 0; i < size; i++) { session.save(new A(i, "test value" + i)); } } }