/* * Weblounge: Web Content Management System * Copyright (c) 2003 - 2011 The Weblounge Team * http://entwinemedia.com/weblounge * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package ch.entwine.weblounge.common.impl.content; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import ch.entwine.weblounge.common.Times; import ch.entwine.weblounge.common.content.SearchTerms; import ch.entwine.weblounge.common.content.page.Pagelet; import ch.entwine.weblounge.common.impl.content.page.PageletImpl; import ch.entwine.weblounge.common.impl.language.LanguageImpl; import ch.entwine.weblounge.common.impl.security.UserImpl; import ch.entwine.weblounge.common.language.Language; import ch.entwine.weblounge.common.security.User; import ch.entwine.weblounge.common.site.Site; import ch.entwine.weblounge.common.url.UrlUtils; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import java.net.URL; import java.util.Collection; import java.util.Date; import java.util.Locale; /** * Test case for {@link SearchQueryImpl}. */ public class SearchQueryImplTest { /** The query object under test */ protected SearchQueryImpl query = null; /** The mock site */ protected Site site = null; /** The German language */ protected Language german = new LanguageImpl(new Locale("de")); /** The first result item */ protected int offset = 30; /** The maximum number of result items to include */ protected int limit = 10; /** The test pagelet */ protected Pagelet pagelet = null; /** The date */ protected Date date = new Date(); /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { site = EasyMock.createNiceMock(Site.class); EasyMock.replay(site); pagelet = new PageletImpl("module", "id"); query = new SearchQueryImpl(site); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#SearchQueryImpl(ch.entwine.weblounge.common.site.Site, ch.entwine.weblounge.common.language.Language)} * . */ @Test public void testSearchQueryImplSiteLanguage() { query = new SearchQueryImpl(site, german); assertEquals(german, query.getLanguage()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#getSite()}. */ @Test public void testGetSite() { assertEquals(site, query.getSite()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withLimit(int)} * . */ @Test public void testWithLimit() { query.withLimit(limit); assertEquals(limit, query.getLimit()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withOffset(int)} * . */ @Test public void testWithOffset() { query.withOffset(offset); assertEquals(offset, query.getOffset()); } /** * Test method for {@link * ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withIdentifier( * java.util.ArrayList.ArrayList<String>())} . */ @Test public void testWithId() { String[] id = new String[] { "4bb19980-8f98-4873-a813-71b6dfab22af", "5bb19980-8f98-4873-a813-71b6dfab22af", "6bb19980-8f98-4873-a813-71b6dfab22af", "7bb19980-8f98-4873-a813-71b6dfab22af" }; for (String i : id) query.withIdentifier(i); assertArrayEquals(id, query.getIdentifier()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPath(java.lang.String)} * . */ @Test public void testWithPath() { String path = "/test"; query.withPath(path); assertEquals(UrlUtils.trim(path), query.getPath()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withStationary()} * . */ @Test public void testWithStationary() { assertFalse(query.isStationary()); query.withStationary(); assertTrue(query.isStationary()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withExternalLocation(URL)} * . */ @Test public void testWithExternalLocation() throws Exception { URL externalLocation = new URL("http://my.server.com/resource"); query.withExternalLocation(externalLocation); assertEquals(externalLocation, query.getExternalLocation()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withTemplate(String)} * . */ @Test public void testWithTemplate() { String template = "news"; query.withTemplate(template); assertEquals(template, query.getTemplate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withTypess(java.lang.String)} * . */ @Test public void testWithTypes() { String[] types = new String[] { "page" }; query.withTypes(types); assertArrayEquals(types, query.getTypes()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withoutTypess(java.lang.String)} */ @Test public void testWithoutTypes() { String[] withoutTypes = new String[] { "page" }; query.withoutTypes(withoutTypes); assertArrayEquals(withoutTypes, query.getWithoutTypes()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#and(java.util.Date)} * . */ @Test public void testAndDate() { Date endDate = new Date(date.getTime() + Times.MS_PER_MONTH); // Creation date query.withCreationDateBetween(date).and(endDate); assertEquals(date, query.getCreationDate()); assertEquals(endDate, query.getCreationDateEnd()); query.withModificationDateBetween(date).and(endDate); assertEquals(date, query.getModificationDate()); assertEquals(endDate, query.getModificationDateEnd()); query.withPublishingDateBetween(date).and(endDate); assertEquals(date, query.getPublishingDate()); assertEquals(endDate, query.getPublishingDateEnd()); // Test and(date) without withDateBetween(date) try { query = new SearchQueryImpl(site); query.and(endDate); fail("Was able to specify end date without start date"); } catch (IllegalStateException e) { // This is expected } // Test with(date).andDate(date). Should fail, since users are requested to // call withDateBetween(date).andDate(date); try { query = new SearchQueryImpl(site); query.withCreationDate(endDate); query.and(date); fail("Was able to used and(date) without withDateBetween()"); } catch (IllegalStateException e) { // This is expected } // Test order of start and end date try { query = new SearchQueryImpl(site); query.withCreationDateBetween(endDate).and(date); fail("Was able to swap start date and end date"); } catch (IllegalStateException e) { // This is expected } } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#andProperty(java.lang.String, java.lang.String)} * . */ @Test public void testAndProperty() { String propertyName = "propertyName"; String propertyValue = "propertyValue"; // Test andProperty(key, value) without withPagelet(module, id) try { query = new SearchQueryImpl(site); query.andProperty(propertyName, propertyValue); fail("Was able to specify pagelet property without pagelet"); } catch (IllegalStateException e) { // This is expected } // Test proper behavior query = new SearchQueryImpl(site); query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); query.andProperty(propertyName, propertyValue); assertEquals(1, query.getPagelets().size()); Collection<SearchTerms<Pagelet>> pagelets = query.getPagelets(); Pagelet firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(propertyValue, firstPagelet.getProperty(propertyName)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#andElement(java.lang.String, java.lang.String)} * . */ @Test public void testAndElement() { String textName = "textName"; String textValue = "text"; // Test andText(key, value) without withPagelet(module, id) try { query = new SearchQueryImpl(site); query.andElement(textName, textValue); fail("Was able to specify pagelet text without pagelet"); } catch (IllegalStateException e) { // This is expected } // Test proper behavior query = new SearchQueryImpl(site, german); query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); query.andElement(textName, textValue); assertEquals(1, query.getPagelets().size()); Collection<SearchTerms<Pagelet>> pagelets = query.getPagelets(); Pagelet firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(textValue, firstPagelet.getContent(textName)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#atPosition(int)} * . */ @Test public void testAtPosition() { String composer = "main"; int position = 5; // Test atPosition(composer) without withPagelet(module, id) try { query = new SearchQueryImpl(site); query.atPosition(position); fail("Was able to specify pagelet position without pagelet"); } catch (IllegalStateException e) { // This is expected } // Test proper behavior with pagelet only query = new SearchQueryImpl(site); query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); query.atPosition(position); assertEquals(1, query.getPagelets().size()); Collection<SearchTerms<Pagelet>> pagelets = query.getPagelets(); Pagelet firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(position, firstPagelet.getURI().getPosition()); // Test proper behavior with pagelet only query = new SearchQueryImpl(site); query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); query.inComposer(composer); query.atPosition(position); assertEquals(1, query.getPagelets().size()); pagelets = query.getPagelets(); firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(composer, firstPagelet.getURI().getComposer()); assertEquals(position, firstPagelet.getURI().getPosition()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#inComposer(java.lang.String)} * . */ @Test public void testInComposer() { String composer = "main"; // Test inComposer(composer) without withPagelet(module, id) try { query = new SearchQueryImpl(site); query.inComposer(composer); fail("Was able to specify composer without pagelet"); } catch (IllegalStateException e) { // This is expected } // Test proper behavior query = new SearchQueryImpl(site); query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); query.inComposer(composer); assertEquals(1, query.getPagelets().size()); Collection<SearchTerms<Pagelet>> pagelets = query.getPagelets(); Pagelet firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(composer, firstPagelet.getURI().getComposer()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withAuthor(ch.entwine.weblounge.common.security.User)} * . */ @Test public void testWithAuthor() { User author = new UserImpl("john"); query.withAuthor(author); assertEquals(author, query.getAuthor()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withLanguage(ch.entwine.weblounge.common.language.Language)} * . */ @Test public void testWithLanguage() { query.withLanguage(german); assertEquals(german, query.getLanguage()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withSubject(java.lang.String)} * . */ @Test public void testWithSubject() { String subject = "subject"; String otherSubject = "other subject"; query.withSubject(subject); query.withSubject(otherSubject); assertEquals(1, query.getSubjects().size()); SearchTerms<String> terms = query.getSubjects().iterator().next(); assertEquals(2, terms.getTerms().size()); assertTrue(terms.contains(subject)); assertTrue(terms.contains(otherSubject)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withCreationDate(java.util.Date)} * . */ @Test public void testWithCreationDate() { Date date = new Date(); query.withCreationDate(date); assertEquals(date, query.getCreationDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withCreationDateBetween(java.util.Date)} * . */ @Test public void testWithCreationDateBetween() { Date date = new Date(); query.withCreationDateBetween(date); assertEquals(date, query.getCreationDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withModificationDate(java.util.Date)} * . */ @Test public void testWithModificationDate() { Date date = new Date(); query.withModificationDate(date); assertEquals(date, query.getModificationDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withModificationDateBetween(java.util.Date)} * . */ @Test public void testWithModificationDateBetween() { Date date = new Date(); query.withModificationDateBetween(date); assertEquals(date, query.getModificationDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPagelet(java.lang.String, java.lang.String)} * . */ @Test public void testWithPagelet() { query.withPagelet(new PageletImpl(pagelet.getModule(), pagelet.getIdentifier())); assertEquals(1, query.getPagelets().size()); Collection<SearchTerms<Pagelet>> pagelets = query.getPagelets(); Pagelet firstPagelet = pagelets.iterator().next().getTerms().iterator().next(); assertEquals(pagelet, firstPagelet); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPathPrefix(java.lang.String)} * . */ @Test public void testWithPathPrefix() { String prefix = "/path/prefix"; query.withPathPrefix(prefix); assertEquals(prefix, query.getPathPrefix()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withCreator(ch.entwine.weblounge.common.security.User)} * . */ @Test public void testWithCreator() { User author = new UserImpl("john"); query.withAuthor(author); assertEquals(author, query.getAuthor()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withModifier(ch.entwine.weblounge.common.security.User)} * . */ @Test public void testWithModifier() { User modifier = new UserImpl("john"); query.withModifier(modifier); assertEquals(modifier, query.getModifier()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPublisher(ch.entwine.weblounge.common.security.User)} * . */ @Test public void testWithPublisher() { User publisher = new UserImpl("john"); query.withPublisher(publisher); assertEquals(publisher, query.getPublisher()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPublishingDate(java.util.Date)} * . */ @Test public void testWithPublishingDate() { Date date = new Date(); query.withPublishingDate(date); assertEquals(date, query.getPublishingDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withPublishingDateBetween(java.util.Date)} * . */ @Test public void testWithPublishingDateBetween() { Date date = new Date(); query.withPublishingDate(date); assertEquals(date, query.getPublishingDate()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withText(java.lang.String)} * . */ @Test public void testWithText() { String text = "text"; query = new SearchQueryImpl(site, german); query.withText(text); SearchTerms<String> terms = query.getTerms().iterator().next(); assertEquals(text, terms.getTerms().iterator().next()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withFulltext(java.lang.String)} * . */ @Test public void testWithFulltext() { String text = "fulltext"; query = new SearchQueryImpl(site, german); query.withFulltext(text); SearchTerms<String> terms = query.getFulltext().iterator().next(); assertEquals(text, terms.getTerms().iterator().next()); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withElement(java.lang.String, java.lang.String)} * . */ @Test public void testWithElement() { String textName = "textName"; String textValue = "text"; query = new SearchQueryImpl(site, german); query.withElement(textName, textValue); assertEquals(1, query.getElements().size()); assertEquals(textValue, query.getElements().get(textName)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withProperty(java.lang.String, java.lang.String)} * . */ @Test public void testWithProperty() { String propertyName = "propertyName"; String propertyValue = "propertyValue"; query = new SearchQueryImpl(site, german); query.withProperty(propertyName, propertyValue); assertEquals(1, query.getProperties().size()); assertEquals(propertyValue, query.getProperties().get(propertyName)); } /** * Test method for * {@link ch.entwine.weblounge.common.impl.content.SearchQueryImpl#withRecencyPriority() * . */ @Test public void testWithRecencyPriority() { query = new SearchQueryImpl(site); assertFalse(query.getRecencyPriority()); query.withRececyPriority(); assertTrue(query.getRecencyPriority()); } }