// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // This program is free software; you can redistribute it and/or modify it under // the terms of the GNU 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 General Public License for more details. // // You should have received a copy of the GNU General Public License along with this program; // if not, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: TestSearchFeedsManager.java,v 1.8 2007/02/06 15:34:02 spyromus Exp $ // package com.salas.bb.core; import com.salas.bb.domain.*; import com.salas.bb.domain.query.ICriteria; import com.salas.bb.domain.query.articles.ArticleStatusProperty; import com.salas.bb.domain.query.articles.FeedStarzProperty; import com.salas.bb.domain.query.articles.Query; import com.salas.bb.domain.query.general.StringEqualsCO; import com.salas.bb.domain.utils.DomainEventsListener; import junit.framework.TestCase; /** * This suite contains tests for <code>SearchFeedsManager</code> unit. */ public class TestSearchFeedsManager extends TestCase { private StandardArticle readArticle; private StandardArticle unreadArticle; private DataFeed dataFeed; private StandardGuide standardGuide; private GuidesSet guidesSet; private DomainEventsListener domainEventsListener; private SearchFeed searchFeed; private Query searchFeedQuery; private SearchFeedsManager manager; protected void setUp() throws Exception { super.setUp(); readArticle = new StandardArticle("readArticle"); readArticle.setTitle("read"); readArticle.setRead(true); unreadArticle = new StandardArticle("unreadArticle"); unreadArticle.setTitle("unread"); unreadArticle.setRead(false); dataFeed = new DirectFeed(); dataFeed.appendArticle(readArticle); dataFeed.appendArticle(unreadArticle); standardGuide = new StandardGuide(); standardGuide.add(dataFeed); guidesSet = new GuidesSet(); guidesSet.add(standardGuide); domainEventsListener = new DomainEventsListener(guidesSet); searchFeedQuery = new Query(); ICriteria unreadStatusCriteria = searchFeedQuery.addCriteria(); unreadStatusCriteria.setProperty(ArticleStatusProperty.INSTANCE); unreadStatusCriteria.setComparisonOperation(StringEqualsCO.INSTANCE); unreadStatusCriteria.setValue(ArticleStatusProperty.VALUE_UNREAD); searchFeed = new SearchFeed(); searchFeed.setBaseTitle("Unread"); searchFeed.setArticlesLimit(2); searchFeed.setQuery(searchFeedQuery); standardGuide.add(searchFeed); manager = new SearchFeedsManager(guidesSet); domainEventsListener.addDomainListener(manager); } /** * Tests initial scanning of all feeds for the articles to display. */ public void testRunningInitialQuery() { manager.runQuery(searchFeed); assertEquals(1, searchFeed.getArticlesCount()); assertEquals(unreadArticle, searchFeed.getArticleAt(0)); } /** * Tests the reaction of manager on changes of feed properties. */ public void testFeedPropertyHasChanged() { // Add dependence from feed starz (2 starz required) searchFeedQuery.setAndQuery(true); ICriteria feedStarz = searchFeedQuery.addCriteria(); feedStarz.setProperty(FeedStarzProperty.INSTANCE); feedStarz.setComparisonOperation(StringEqualsCO.INSTANCE); feedStarz.setValue("2"); // Feed rating is in range [0;4], but property rating is in range [1;5] dataFeed.setRating(0); manager.runQuery(searchFeed); assertEquals("There are not enough starz to select articles.", 0, searchFeed.getArticlesCount()); dataFeed.setRating(1); assertEquals("There are enough starz to select articles.", 1, searchFeed.getArticlesCount()); dataFeed.setRating(0); assertEquals("There are not enough starz to select articles.", 0, searchFeed.getArticlesCount()); } /** * Tests the reaction of manager on addition of new articles. */ public void testArticleAdded() { manager.runQuery(searchFeed); StandardArticle newUnreadArticle = new StandardArticle("new unread article"); newUnreadArticle.setTitle("new unread article"); newUnreadArticle.setRead(false); dataFeed.appendArticle(newUnreadArticle); assertEquals("Expecting new article.", 2, searchFeed.getArticlesCount()); assertTrue(newUnreadArticle == searchFeed.getArticleAt(1) || searchFeed.getArticleAt(0) == newUnreadArticle); } /** * Tests the update of the search feed when its query changes. */ public void testSearchFeedQueryHasChanged() { manager.runQuery(searchFeed); assertEquals(1, searchFeed.getArticlesCount()); // Setting the criteria which should not match searchFeedQuery.setAndQuery(true); ICriteria feedStarz = searchFeedQuery.addCriteria(); feedStarz.setProperty(FeedStarzProperty.INSTANCE); feedStarz.setComparisonOperation(StringEqualsCO.INSTANCE); feedStarz.setValue("5"); manager.queryUpdated(searchFeed); assertEquals("None of articles meet the criteria.", 0, searchFeed.getArticlesCount()); } /** * Tests the scenario when search feed has articles from some data feed. The data * feed gets removed by user. The articles should also leave the search feed. */ public void testFeedRemoved() { // make sure search feed has the article from data feed manager.runQuery(searchFeed); assertEquals(1, searchFeed.getArticlesCount()); standardGuide.remove(dataFeed); assertEquals("Feed is removed. Corresponding article should leave search feed.", 0, searchFeed.getArticlesCount()); } /** * Tests the scenario when search feed has article and this article gets removed * from its data feed. The article should leave search feed. */ public void testArticleRemoved() { // make sure search feed has the article from data feed manager.runQuery(searchFeed); assertEquals(1, searchFeed.getArticlesCount()); dataFeed.setPurgeLimit(0); assertEquals("Feed cleanup failed.", 0, dataFeed.getArticlesCount()); assertEquals("Article was removed. It should leave search feed as well.", 0, searchFeed.getArticlesCount()); } }