/* ********************************************************************** ** ** 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.controller; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.eclipse.core.runtime.NullProgressMonitor; import org.junit.Before; import org.junit.Test; import org.rssowl.core.Owl; import org.rssowl.core.internal.persist.Feed; import org.rssowl.core.internal.persist.service.PersistenceServiceImpl; import org.rssowl.core.persist.IBookMark; import org.rssowl.core.persist.IFeed; import org.rssowl.core.persist.IFolder; import org.rssowl.core.persist.IModelFactory; import org.rssowl.core.persist.INews; import org.rssowl.core.persist.INewsBin; import org.rssowl.core.persist.NewsCounter; import org.rssowl.core.persist.dao.DynamicDAO; import org.rssowl.core.persist.dao.INewsCounterDAO; import org.rssowl.core.persist.dao.INewsDAO; import org.rssowl.core.persist.reference.BookMarkReference; import org.rssowl.core.persist.reference.FeedLinkReference; import org.rssowl.core.persist.reference.FeedReference; import org.rssowl.core.persist.service.PersistenceException; import org.rssowl.ui.internal.Controller; import org.rssowl.ui.internal.Controller.BookMarkLoadListener; import java.net.URI; import java.util.Collections; import java.util.concurrent.atomic.AtomicBoolean; /** * This TestCase covers use-cases for the Controller (network only). * * @author bpasero */ public class ControllerTestNetwork { /** * @throws Exception */ @Before public void setUp() throws Exception { ((PersistenceServiceImpl)Owl.getPersistenceService()).recreateSchemaForTests(); } /** * Reload a Feed. * * @throws Exception */ @Test public void testReloadFeed() throws Exception { BookMarkLoadListener listener = null; try { final IFeed feed = DynamicDAO.save(new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/manager/rss_2_0.xml"))); //$NON-NLS-1$ IBookMark bookmark = createBookMark(feed); final AtomicBoolean bool1 = new AtomicBoolean(false); final AtomicBoolean bool2 = new AtomicBoolean(false); assertTrue(bookmark.getNewsRefs().isEmpty()); assertTrue(bookmark.getNewsRefs(INews.State.getVisible()).isEmpty()); assertTrue(bookmark.getNews().isEmpty()); assertTrue(bookmark.getNews(INews.State.getVisible()).isEmpty()); assertEquals(0, bookmark.getNewsCount(INews.State.getVisible())); listener = new BookMarkLoadListener() { public void bookMarkDoneLoading(IBookMark bookmark) { if (bookmark.getFeedLinkReference().references(feed)) bool1.set(true); } public void bookMarkAboutToLoad(IBookMark bookmark) { if (bookmark.getFeedLinkReference().references(feed)) bool2.set(true); } }; Controller.getDefault().addBookMarkLoadListener(listener); Controller.getDefault().reload(bookmark, null, new NullProgressMonitor()); assertEquals(new FeedReference(feed.getId()).resolve().getFormat(), "RSS 2.0"); //$NON-NLS-1$ assertEquals(15, bookmark.getNewsRefs().size()); assertEquals(15, bookmark.getNewsRefs(INews.State.getVisible()).size()); assertEquals(15, bookmark.getNews().size()); assertEquals(15, bookmark.getNews(INews.State.getVisible()).size()); assertEquals(15, bookmark.getNewsCount(INews.State.getVisible())); assertTrue(bool1.get()); assertTrue(bool2.get()); } finally { if (listener != null) Controller.getDefault().removeBookMarkLoadListener(listener); } } /** * @throws Exception * See http://dev.rssowl.org/show_bug.cgi?id=1107 */ @Test public void testDeleteFolderHierarchyWithBin() throws Exception { IModelFactory factory = Owl.getModelFactory(); IFolder root = factory.createFolder(null, null, "Root"); IFolder folder = factory.createFolder(null, root, "Folder"); IFolder childFolder = factory.createFolder(null, folder, "Child Folder"); IFeed feed = factory.createFeed(null, new URI("http://www.rssowl.org/rssowl2dg/tests/manager/rss_2_0.xml")); DynamicDAO.save(feed); IBookMark mark = factory.createBookMark(null, childFolder, new FeedLinkReference(feed.getLink()), "Bookmark"); INewsBin bin = factory.createNewsBin(null, folder, "Bin"); DynamicDAO.save(root); Controller.getDefault().reload(mark, null, new NullProgressMonitor()); /* Move News to Bin */ INews copiedNews = factory.createNews(feed.getNews().get(0), bin); DynamicDAO.save(copiedNews); DynamicDAO.save(bin); DynamicDAO.getDAO(INewsDAO.class).setState(Collections.singletonList(feed.getNews().get(0)), INews.State.HIDDEN, false, false); /* Delete Folder */ DynamicDAO.deleteAll(Collections.singleton(folder)); assertNull(Owl.getPersistenceService().getDAOService().getNewsCounterDAO().load().get(feed.getLink().toString())); } /** * Reload a large Feed with invalid encoding. * * @throws Exception */ @Test public void testReloadLargeFeedWithInvalidEncoding() throws Exception { IFeed feed = new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/manager/invalid_utf8_large.xml")); //$NON-NLS-1$ feed = DynamicDAO.save(feed); Controller.getDefault().reload(createBookMark(feed), null, new NullProgressMonitor()); assertEquals("RDF", new FeedReference(feed.getId()).resolve().getFormat()); //$NON-NLS-1$ } /** * Reload a small Feed with invalid encoding. * * @throws Exception */ @Test public void testReloadSmallFeedWithInvalidEncoding() throws Exception { IFeed feed = new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/manager/invalid_utf8_small.xml")); //$NON-NLS-1$ feed = DynamicDAO.save(feed); Controller.getDefault().reload(createBookMark(feed), null, new NullProgressMonitor()); assertEquals("RDF", new FeedReference(feed.getId()).resolve().getFormat()); //$NON-NLS-1$ } /** * Reload a BookMark. * * @throws Exception */ @SuppressWarnings("nls") @Test public void testReloadBookMark() throws Exception { IFeed feed = new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/manager/rss_2_0.xml")); feed = DynamicDAO.save(feed); IFolder folder = Owl.getModelFactory().createFolder(null, null, "Folder"); folder = DynamicDAO.save(folder); IBookMark bookmark = Owl.getModelFactory().createBookMark(1L, folder, new FeedLinkReference(feed.getLink()), "BookMark"); Controller.getDefault().reload(bookmark, null, new NullProgressMonitor()); assertEquals(new FeedReference(feed.getId()).resolve().getFormat(), "RSS 2.0"); //$NON-NLS-1$ } /** * Reload a BookMark that points to an unavailable Feed. * * @throws Exception */ @SuppressWarnings("nls") @Test public void testReloadBookMarkWithError() throws Exception { IFeed feed = new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/not_existing.xml")); feed = DynamicDAO.save(feed); IFolder folder = Owl.getModelFactory().createFolder(null, null, "Folder"); folder = DynamicDAO.save(folder); IBookMark bookmark = Owl.getModelFactory().createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark"); Controller.getDefault().reload(bookmark, null, new NullProgressMonitor()); assertEquals(true, new BookMarkReference(bookmark.getId()).resolve().isErrorLoading()); } private NewsCounter loadNewsCounter() { return DynamicDAO.getDAO(INewsCounterDAO.class).load(); } private int getNewCount(IFeed feed) { return loadNewsCounter().getNewCount(feed.getLink().toString()); } private int getUnreadCount(IFeed feed) { return loadNewsCounter().getUnreadCount(feed.getLink().toString()); } private int getStickyCount(IFeed feed) { return loadNewsCounter().getStickyCount(feed.getLink().toString()); } /** * Test the News-Service with Reload. * * @throws Exception */ @SuppressWarnings("nls") @Test public void testNewsServiceWithReloadBookMark() throws Exception { IFeed feed = new Feed(new URI("http://www.rssowl.org/rssowl2dg/tests/manager/rss_2_0.xml")); feed = DynamicDAO.save(feed); IFolder folder = Owl.getModelFactory().createFolder(null, null, "Folder"); folder = DynamicDAO.save(folder); IBookMark bookmark = Owl.getModelFactory().createBookMark(1L, folder, new FeedLinkReference(feed.getLink()), "BookMark"); Controller.getDefault().reload(bookmark, null, new NullProgressMonitor()); feed.getNews().get(0).setFlagged(true); DynamicDAO.save(feed); int unreadCounter = getUnreadCount(feed); int newCounter = getNewCount(feed); int stickyCounter = getStickyCount(feed); Controller.getDefault().reload(bookmark, null, new NullProgressMonitor()); assertEquals(unreadCounter, getUnreadCount(feed)); assertEquals(newCounter, getNewCount(feed)); assertEquals(stickyCounter, getStickyCount(feed)); } private IBookMark createBookMark(IFeed feed) throws PersistenceException { IFolder folder = DynamicDAO.save(Owl.getModelFactory().createFolder(null, null, "Root")); return DynamicDAO.save(Owl.getModelFactory().createBookMark(null, folder, new FeedLinkReference(feed.getLink()), "BookMark")); } }