/* ********************************************************************** ** ** Copyright notice ** ** ** ** (c) 2005-2009 RSSOwl Development Team ** ** http://www.rssowl.org/ ** ** ** ** All rights reserved ** ** ** ** This program and the accompanying materials are made available under ** ** the terms of the Eclipse Public License v1.0 which accompanies this ** ** distribution, and is available at: ** ** http://www.rssowl.org/legal/epl-v10.html ** ** ** ** A copy is found in the file epl-v10.html and important notices to the ** ** license from the team is found in the textfile LICENSE.txt distributed ** ** in this package. ** ** ** ** This copyright notice MUST APPEAR in all copies of the file! ** ** ** ** Contributors: ** ** RSSOwl Development Team - initial API and implementation ** ** ** ** ********************************************************************** */ package org.rssowl.core.tests.ui; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.rssowl.core.Owl; import org.rssowl.core.internal.persist.pref.DefaultPreferences; import org.rssowl.core.internal.persist.service.PersistenceServiceImpl; import org.rssowl.core.persist.IBookMark; import org.rssowl.core.persist.IEntity; import org.rssowl.core.persist.IFeed; import org.rssowl.core.persist.IFolder; import org.rssowl.core.persist.ILabel; import org.rssowl.core.persist.IMark; import org.rssowl.core.persist.IModelFactory; import org.rssowl.core.persist.INews; import org.rssowl.core.persist.dao.DynamicDAO; import org.rssowl.core.persist.pref.IPreferenceScope; import org.rssowl.core.persist.reference.BookMarkReference; import org.rssowl.core.persist.reference.FeedLinkReference; import org.rssowl.core.persist.reference.FolderReference; import org.rssowl.core.persist.service.PersistenceException; import org.rssowl.core.util.DateUtils; import org.rssowl.core.util.RetentionStrategy; import java.net.URI; import java.util.Date; import java.util.List; /** * Tests about Retention of News. * * @author bpasero */ public class RetentionStrategyTests { /* One Day in millis (-1 second crush zone) */ private static final long DAY = 24 * 60 * 59 * 1000; /* One Hour in millis */ private static final long HOUR = 60 * 60 * 1000; private IModelFactory fFactory; /** * @throws Exception */ @Before public void setUp() throws Exception { ((PersistenceServiceImpl)Owl.getPersistenceService()).recreateSchemaForTests(); fFactory = Owl.getModelFactory(); Owl.getPreferenceService().getGlobalScope().putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, false); } /** * @throws Exception */ @Test public void testProcessFolderByAge() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(200, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(100, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(200, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(100, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAge_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(200, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(100, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAge_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(200, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(100, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(140, countNews(folder)); assertEquals(20, countNews(bookMark1)); assertEquals(40, countNews(bookMark2)); assertEquals(80, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(230, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(80, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCount_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(230, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(80, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCount_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(230, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(80, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(60, countNews(folder)); assertEquals(20, countNews(bookMark1)); assertEquals(40, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCount_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCount_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(60, countNews(folder)); assertEquals(20, countNews(bookMark1)); assertEquals(40, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByCountAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(60, countNews(folder)); assertEquals(20, countNews(bookMark1)); assertEquals(40, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessFolderByAgeAndCountAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed1 = createFeedWithNews(new URI("http://www.url1.com"), 100, 0, today - DAY, today + 5 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed1.getLink()), "BookMark1"); IFeed feed2 = createFeedWithNews(new URI("http://www.url2.com"), 100, 50, today - 7 * DAY, today + 8 * HOUR, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed2.getLink()), "BookMark2"); IFeed feed3 = createFeedWithNews(new URI("http://www.url3.com"), 100, 100, today - 31 * DAY, today - 25 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed3.getLink()), "BookMark3"); DynamicDAO.save(folder); IBookMark bookMark1 = null, bookMark2 = null, bookMark3 = null; List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark.getName().equals("BookMark1")) bookMark1 = (IBookMark) mark; else if (mark.getName().equals("BookMark2")) bookMark2 = (IBookMark) mark; else if (mark.getName().equals("BookMark3")) bookMark3 = (IBookMark) mark; } /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookMark1); IPreferenceScope prefs2 = Owl.getPreferenceService().getEntityScope(bookMark2); IPreferenceScope prefs3 = Owl.getPreferenceService().getEntityScope(bookMark3); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs2.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); prefs3.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 20); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 20); prefs2.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 40); prefs3.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 80); RetentionStrategy.process(folder); assertEquals(150, countNews(folder)); assertEquals(100, countNews(bookMark1)); assertEquals(50, countNews(bookMark2)); assertEquals(0, countNews(bookMark3)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAge() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(0, countNews(folder)); assertEquals(0, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAge_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAge_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(50, countNews(folder)); assertEquals(50, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCount_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCount_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(0, countNews(folder)); assertEquals(0, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCount_NoDeleteUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCount_NoDeleteUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(0, countNews(folder)); assertEquals(0, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(50, countNews(folder)); assertEquals(50, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByCountAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(0, countNews(folder)); assertEquals(0, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCountAndStateKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(80, countNews(folder)); assertEquals(80, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCountAndStateWithStickyNews() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 10); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(10, countNews(folder)); assertEquals(10, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessBookMarkByAgeAndCountAndStateWithStickyNewsKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 10, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(100, countNews(bookmark)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); RetentionStrategy.process(bookmark); assertEquals(90, countNews(folder)); assertEquals(90, countNews(bookmark)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByAge() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setState(INews.State.UNREAD); news3.setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(101, updatedNews.size()); assertEquals(2, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(53, updatedNews.size()); assertEquals(50, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByCountThatExceedLimit() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(53, updatedNews.size()); assertEquals(50, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(21, updatedNews.size()); assertEquals(82, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByAgeAndCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(101, updatedNews.size()); assertEquals(2, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByAgeAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(102, updatedNews.size()); assertEquals(1, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(53, updatedNews.size()); assertEquals(50, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithUnpersistedNewsByAgeAndCountAndState() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 20, today - 7 * DAY, today - 6 * DAY, 0); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); DynamicDAO.save(folder); /* Add unpersisted News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.READ); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setTitle("News #3"); news3.setState(INews.State.UNREAD); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_AGE_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.DEL_READ_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_AGE_VALUE, 5); prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(102, updatedNews.size()); assertEquals(1, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithStickyNewsByCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 100); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.UNREAD); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setState(INews.State.UNREAD); news3.setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(3, updatedNews.size()); assertEquals(100, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithStickyNewsByCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 100, true); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCount() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, false, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.UNREAD); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setState(INews.State.UNREAD); news3.setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(3, updatedNews.size()); assertEquals(100, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCountKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, true, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithStickyNewsByCountKeepUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 100, false, null); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); news1.setState(INews.State.UNREAD); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setState(INews.State.UNREAD); news2.setPublishDate(new Date(today - 7 * DAY)); INews news3 = fFactory.createNews(null, feed, new Date()); news3.setState(INews.State.UNREAD); news3.setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithStickyNewsByCountKeepUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 100, true, null); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCountKeepUnread() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, true, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCountDoNotKeepLabeled() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, false, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_LABELED_NEWS_STATE, false); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(53, updatedNews.size()); assertEquals(50, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCountKeepLabeled() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, false, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_LABELED_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 50); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } /** * @throws Exception */ @Test public void testProcessFeedWithLabeledNewsByCountKeepUnreadKeepNew() throws Exception { long today = DateUtils.getToday().getTimeInMillis(); ILabel label = DynamicDAO.save(fFactory.createLabel(null, "Label")); IFolder folder = DynamicDAO.save(fFactory.createFolder(null, null, "Root")); IFeed feed = createFeedWithNews(new URI("http://www.url.com"), 100, 100, today - 7 * DAY, today - 6 * DAY, 0, true, label); fFactory.createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark1"); DynamicDAO.save(folder); /* Add unpersisted *new* News */ INews news1 = fFactory.createNews(null, feed, new Date()); news1.setTitle("News #1"); INews news2 = fFactory.createNews(null, feed, new Date()); news2.setTitle("News #2"); news2.setPublishDate(new Date(today - 7 * DAY)); fFactory.createNews(null, feed, new Date()).setTitle("News #3"); IBookMark bookmark = (IBookMark) folder.getMarks().get(0); assertEquals(103, countNews(feed)); /* Preferences */ IPreferenceScope prefs1 = Owl.getPreferenceService().getEntityScope(bookmark); /* Setup Retention */ prefs1.putBoolean(DefaultPreferences.DEL_NEWS_BY_COUNT_STATE, true); prefs1.putBoolean(DefaultPreferences.NEVER_DEL_UNREAD_NEWS_STATE, true); /* Run and Validate Retention */ prefs1.putInteger(DefaultPreferences.DEL_NEWS_BY_COUNT_VALUE, 100); List<INews> updatedNews = RetentionStrategy.process(bookmark, feed); assertEquals(0, updatedNews.size()); assertEquals(103, countNews(feed)); } private IFeed createFeedWithNews(URI link, int total, int read, long from, long to, int sticky) throws PersistenceException { return createFeedWithNews(link, total, read, from, to, sticky, false); } private IFeed createFeedWithNews(URI link, int total, int read, long from, long to, int sticky, boolean keepNew) throws PersistenceException { return createFeedWithNews(link, total, read, from, to, sticky, keepNew, null); } private IFeed createFeedWithNews(URI link, int total, int read, long from, long to, int sticky, boolean keepNew, ILabel label) throws PersistenceException { long dateDif = to - from; IFeed feed = fFactory.createFeed(null, link); for (int i = 0; i < total; i++) { INews news = fFactory.createNews(null, feed, new Date()); news.setTitle("News 1"); if (read > i) news.setState(INews.State.READ); else if (!keepNew) news.setState(INews.State.UNREAD); if (sticky > i) news.setFlagged(true); if (label != null) news.addLabel(label); news.setPublishDate(new Date(from + (dateDif * i / total))); } return DynamicDAO.save(feed); } private int countNews(IEntity entity) throws PersistenceException { int count = 0; if (entity instanceof IFolder) { IFolder folder = new FolderReference(entity.getId()).resolve(); List<IMark> marks = folder.getMarks(); for (IMark mark : marks) { if (mark instanceof IBookMark) { IFeed feed = ((IBookMark) mark).getFeedLinkReference().resolve(); count += feed.getVisibleNews().size(); } } } else if (entity instanceof IBookMark) { IBookMark bookmark = new BookMarkReference(entity.getId()).resolve(); count += bookmark.getFeedLinkReference().resolve().getVisibleNews().size(); } else if (entity instanceof IFeed) { count += ((IFeed) entity).getVisibleNews().size(); } return count; } }