Package org.rssowl.core.tests.model

Source Code of org.rssowl.core.tests.model.ModelTest4

/*   **********************************************************************  **
**   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.model;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.persist.LazyList;
import org.rssowl.core.internal.persist.NewsBin;
import org.rssowl.core.persist.IBookMark;
import org.rssowl.core.persist.ICategory;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFolder;
import org.rssowl.core.persist.IFolderChild;
import org.rssowl.core.persist.IGuid;
import org.rssowl.core.persist.IModelFactory;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.INewsBin;
import org.rssowl.core.persist.IPerson;
import org.rssowl.core.persist.ISearch;
import org.rssowl.core.persist.ISearchCondition;
import org.rssowl.core.persist.ISearchField;
import org.rssowl.core.persist.ISearchFilter;
import org.rssowl.core.persist.ISearchMark;
import org.rssowl.core.persist.SearchSpecifier;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.dao.IBookMarkDAO;
import org.rssowl.core.persist.dao.ICategoryDAO;
import org.rssowl.core.persist.dao.IFolderDAO;
import org.rssowl.core.persist.dao.INewsDAO;
import org.rssowl.core.persist.dao.IPersonDAO;
import org.rssowl.core.persist.dao.ISearchMarkDAO;
import org.rssowl.core.persist.event.NewsEvent;
import org.rssowl.core.persist.event.NewsListener;
import org.rssowl.core.persist.reference.FeedLinkReference;
import org.rssowl.core.persist.reference.NewsReference;
import org.rssowl.core.util.ReparentInfo;
import org.rssowl.ui.internal.Controller;

import java.net.URI;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* This TestCase is for testing the Model Plugin (4 of 4).
*
* @author bpasero
*/
public class ModelTest4 {
  private IModelFactory fFactory;

  /**
   * @throws Exception
   */
  @Before
  public void setUp() throws Exception {
    Owl.getPersistenceService().recreateSchema();
    fFactory = Owl.getModelFactory();
  }

  /**
   * @throws InterruptedException
   */
  private void waitForIndexer() throws InterruptedException {
    Thread.sleep(500);
  }

  /**
   * @throws Exception
   */
  @Test
  public void testBookMarkExists() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");

    IFeed feed = fFactory.createFeed(null, new URI("feed1"));
    DynamicDAO.save(feed);

    IBookMark mark1 = fFactory.createBookMark(null, root, new FeedLinkReference(feed.getLink()), "Mark 1");
    IBookMark mark2 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("feed2")), "Mark 2");

    DynamicDAO.save(root);

    IBookMark mark3 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("feed3")), "Mark 3");

    assertTrue(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark1.getFeedLinkReference()));
    assertTrue(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark2.getFeedLinkReference()));
    assertFalse(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark3.getFeedLinkReference()));

    System.gc();

    assertTrue(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark1.getFeedLinkReference()));
    assertTrue(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark2.getFeedLinkReference()));
    assertFalse(DynamicDAO.getDAO(IBookMarkDAO.class).exists(mark3.getFeedLinkReference()));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testFolderSort() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");
    IBookMark mark2 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark1")), "B Mark 2");
    IBookMark mark1 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark2")), "A Mark 1");
    IBookMark mark3 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark3")), "C Mark 3");
    IFolder folder2 = fFactory.createFolder(null, root, "B Folder");
    IFolder folder1 = fFactory.createFolder(null, root, "A Folder");
    DynamicDAO.save(root);

    assertTrue(root.containsChild(mark1));

    root.sort();

    List<IFolderChild> children = root.getChildren();
    assertEquals(folder1, children.get(0));
    assertEquals(folder2, children.get(1));
    assertEquals(mark1, children.get(2));
    assertEquals(mark2, children.get(3));
    assertEquals(mark3, children.get(4));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testFolderReorder() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");
    IBookMark mark1 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark2")), "A Mark 1");
    IBookMark mark2 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark1")), "B Mark 2");
    IBookMark mark3 = fFactory.createBookMark(null, root, new FeedLinkReference(new URI("mark3")), "C Mark 3");
    IFolder folder1 = fFactory.createFolder(null, root, "A Folder");
    IFolder folder2 = fFactory.createFolder(null, root, "B Folder");
    DynamicDAO.save(root);

    root.reorderChildren(Arrays.asList(new IFolderChild[] { mark1, mark2 }), folder1, true);

    List<IFolderChild> children = root.getChildren();
    assertEquals(mark3, children.get(0));
    assertEquals(folder1, children.get(1));
    assertEquals(mark1, children.get(2));
    assertEquals(mark2, children.get(3));
    assertEquals(folder2, children.get(4));

    root.reorderChildren(Arrays.asList(new IFolderChild[] { mark1, folder2 }), folder1, false);

    children = root.getChildren();
    assertEquals(mark3, children.get(0));
    assertEquals(mark1, children.get(1));
    assertEquals(folder2, children.get(2));
    assertEquals(folder1, children.get(3));
    assertEquals(mark2, children.get(4));
  }

  /**
   * @throws Exception
   */
  @Test
  @Ignore
  public void testNewsLazyList() throws Exception {
    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    INews news1 = fFactory.createNews(null, feed, new Date());
    INews news2 = fFactory.createNews(null, feed, new Date());
    INews news3 = fFactory.createNews(null, feed, new Date());

    DynamicDAO.save(feed);

    List<INews> list = feed.getNews();
    news1 = list.get(0);
    news2 = list.get(1);
    news3 = list.get(2);

    LazyList<INews> news = (LazyList<INews>) DynamicDAO.getDAO(INewsDAO.class).loadAll();
    assertTrue(news.iterator().hasNext());
    assertEquals(3, news.size());
    assertTrue(news.contains(news1));
    assertTrue(news.containsAll(Arrays.asList(new INews[] { news1, news2, news3 })));

    assertEquals(3, news.toArray().length);
    assertEquals(3, news.toArray(new INews[news.size()]).length);

    assertNotNull(news.get(0));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testBinRemoveNews() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");

    INewsBin bin = fFactory.createNewsBin(null, root, "Bin");

    DynamicDAO.save(bin);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    INews news1 = fFactory.createNews(null, feed, new Date());
    INews news2 = fFactory.createNews(null, feed, new Date());
    INews news3 = fFactory.createNews(null, feed, new Date());

    DynamicDAO.save(feed);

    news1 = fFactory.createNews(news1, bin);
    DynamicDAO.save(news1);
    news2 = fFactory.createNews(news2, bin);
    DynamicDAO.save(news2);
    news3 = fFactory.createNews(news3, bin);
    DynamicDAO.save(news3);

    DynamicDAO.save(bin);

    bin.removeNews(news1);
    ((NewsBin) bin).removeNewsRefs(Arrays.asList(new NewsReference[] { news2.toReference() }));

    List<INews> news = bin.getNews();
    assertEquals(1, news.size());
    assertEquals(news3, news.get(0));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testSearchMark() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");

    ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, INews.class.getName());
    ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, true);

    ISearchMark search = fFactory.createSearchMark(null, root, "Search");
    search.addSearchCondition(condition);

    DynamicDAO.save(root);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setFlagged(true);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setFlagged(true);
    INews news3 = fFactory.createNews(null, feed, new Date());
    news3.setFlagged(true);

    DynamicDAO.save(feed);

    waitForIndexer();
    Controller.getDefault().getSavedSearchService().updateSavedSearches(true);

    assertTrue(search.containsNews(news1));
    assertTrue(search.containsNews(news2));
    assertTrue(search.containsNews(news3));

    List<INews> news = search.getNews();
    assertEquals(3, news.size());

    news = search.getNews(INews.State.getVisible());
    assertEquals(3, news.size());

    List<NewsReference> newsRefs = search.getNewsRefs();
    assertEquals(3, newsRefs.size());

    newsRefs = search.getNewsRefs(INews.State.getVisible());
    assertEquals(3, newsRefs.size());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testCountAll() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");
    fFactory.createFolder(null, root, "Child");
    DynamicDAO.save(root);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setFlagged(true);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setFlagged(true);
    INews news3 = fFactory.createNews(null, feed, new Date());
    news3.setFlagged(true);

    DynamicDAO.save(feed);

    assertEquals(2, DynamicDAO.countAll(IFolder.class));
    assertEquals(1, DynamicDAO.countAll(IFeed.class));
    assertEquals(3, DynamicDAO.countAll(INews.class));

    DynamicDAO.delete(feed);
    DynamicDAO.delete(root);

    assertEquals(0, DynamicDAO.countAll(IFolder.class));
    assertEquals(0, DynamicDAO.countAll(IFeed.class));
    assertEquals(0, DynamicDAO.countAll(INews.class));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testLoadAllExists() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");
    fFactory.createFolder(null, root, "Child");
    root = DynamicDAO.save(root);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setFlagged(true);
    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setFlagged(true);
    INews news3 = fFactory.createNews(null, feed, new Date());
    news3.setFlagged(true);

    feed = DynamicDAO.save(feed);

    assertEquals(1, DynamicDAO.loadAll(IFeed.class).size());
    assertEquals(3, DynamicDAO.loadAll(INews.class).size());
    assertEquals(2, DynamicDAO.loadAll(IFolder.class).size());

    assertTrue(DynamicDAO.exists(IFolder.class, root.getId()));
    assertTrue(DynamicDAO.exists(IFeed.class, feed.getId()));

    DynamicDAO.delete(feed);
    DynamicDAO.delete(root);

    assertTrue(DynamicDAO.loadAll(IFeed.class).isEmpty());
    assertTrue(DynamicDAO.loadAll(INews.class).isEmpty());
    assertTrue(DynamicDAO.loadAll(IFolder.class).isEmpty());

    assertFalse(DynamicDAO.exists(IFolder.class, root.getId()));
    assertFalse(DynamicDAO.exists(IFeed.class, feed.getId()));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testLoadAllCategoryNames() throws Exception {
    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    feed = DynamicDAO.save(feed);

    ICategory cat1 = fFactory.createCategory(null, feed);
    cat1.setName("foo");

    ICategory cat2 = fFactory.createCategory(null, feed);
    cat2.setName("bar");

    DynamicDAO.save(feed);
    DynamicDAO.save(cat1);
    DynamicDAO.save(cat2);

    Set<String> cats = DynamicDAO.getDAO(ICategoryDAO.class).loadAllNames();
    assertEquals(2, cats.size());
    assertTrue(cats.contains(cat1.getName()));
    assertTrue(cats.contains(cat2.getName()));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testLoadAllPersonNames() throws Exception {
    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    feed = DynamicDAO.save(feed);

    IPerson pers1 = fFactory.createPerson(null, feed);
    pers1.setName("foo");

    IPerson pers2 = fFactory.createPerson(null, feed);
    pers2.setEmail(new URI("bar"));

    DynamicDAO.save(feed);
    DynamicDAO.save(pers1);
    DynamicDAO.save(pers2);

    Set<String> persons = DynamicDAO.getDAO(IPersonDAO.class).loadAllNames();
    assertEquals(2, persons.size());
    assertTrue(persons.contains(pers1.getName()));
    assertTrue(persons.contains(pers2.getEmail().toString()));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testLoadSearchFromCondition() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");

    ISearchField field = fFactory.createSearchField(INews.IS_FLAGGED, INews.class.getName());
    ISearchCondition condition = fFactory.createSearchCondition(field, SearchSpecifier.IS, true);

    ISearchMark search = fFactory.createSearchMark(null, root, "Search");
    search.addSearchCondition(condition);

    DynamicDAO.save(root);

    ISearchMark searchmark = DynamicDAO.getDAO(ISearchMarkDAO.class).load(condition);
    assertNotNull(searchmark);
    assertEquals("Search", searchmark.getName());
    assertEquals(root, searchmark.getParent());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testReparent() throws Exception {
    IFolder root = fFactory.createFolder(null, null, "Root");

    IFolder child1 = fFactory.createFolder(null, root, "Child 1");
    IFolder child2 = fFactory.createFolder(null, root, "Child 2");
    IFolder child3 = fFactory.createFolder(null, child2, "Child 3");

    root = DynamicDAO.save(root);

    DynamicDAO.getDAO(IFolderDAO.class).reparent(Collections.singletonList(ReparentInfo.create((IFolderChild) child1, child2, child3, true)));

    assertEquals(1, root.getChildren().size());
    IFolder child = (IFolder) root.getChildren().iterator().next();
    assertEquals(2, child.getChildren().size());
    assertEquals("Child 3", child.getFolders().get(0).getName());
    assertEquals("Child 1", child.getFolders().get(1).getName());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testFeedLinkReferenceReferences() throws Exception {
    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    feed = DynamicDAO.save(feed);

    assertTrue(new FeedLinkReference(feed.getLink()).references(feed));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testSearchFilterReference() throws Exception {
    ISearchFilter filter = fFactory.createSearchFilter(null, null, "All News");
    filter.setMatchAllNews(true);
    filter.setEnabled(true);

    filter = DynamicDAO.save(filter);

    assertEquals(filter, filter.toReference().resolve());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testSearchReference() throws Exception {
    ISearch search = fFactory.createSearch(null);
    search = DynamicDAO.save(search);

    assertEquals(search, search.toReference().resolve());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testNewsIsEquivlanet_IgnoreTrailingSlash() throws Exception {
    IFeed feed = fFactory.createFeed(null, new URI("feed"));

    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setLink(new URI("http://www.rssowl.org/news"));

    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setLink(new URI("http://www.rssowl.org/news"));

    assertTrue(news1.isEquivalent(news2));
    assertTrue(news2.isEquivalent(news1));

    news1.setLink(new URI("http://www.rssowl.org/news/"));

    assertTrue(news1.isEquivalent(news2));
    assertTrue(news2.isEquivalent(news1));

    news2.setLink(new URI("http://www.rssowl.org/news/"));

    assertTrue(news1.isEquivalent(news2));
    assertTrue(news2.isEquivalent(news1));

    news1.setLink(new URI("http://www.rssowl.org/new"));

    assertFalse(news1.isEquivalent(news2));
    assertFalse(news2.isEquivalent(news1));

    IGuid guid1 = fFactory.createGuid(news1, "http://www.guid.org/", true);
    news1.setGuid(guid1);

    IGuid guid2 = fFactory.createGuid(news2, "http://www.guid.org/", true);
    news2.setGuid(guid2);

    assertTrue(news1.isEquivalent(news2));
    assertTrue(news2.isEquivalent(news1));

    guid1 = fFactory.createGuid(news1, "http://www.guid.org", true);
    news1.setGuid(guid1);

    assertTrue(news1.isEquivalent(news2));
    assertTrue(news2.isEquivalent(news1));

    guid1 = fFactory.createGuid(news1, "http://www.guid.or", true);
    news1.setGuid(guid1);

    assertFalse(news1.isEquivalent(news2));
    assertFalse(news2.isEquivalent(news1));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testEntityReadWriteFromAdded() throws Exception {
    final AtomicBoolean listenerHit= new AtomicBoolean(false);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    fFactory.createNews(null, feed, new Date());

    NewsListener listener = new NewsListener() {
      public void entitiesAdded(Set<NewsEvent> events) {
        listenerHit.set(true);

        for (NewsEvent event : events) {
          event.getEntity().getState();
          event.getEntity().setState(INews.State.READ);
        }
      }

      public void entitiesUpdated(Set<NewsEvent> events) {}

      public void entitiesDeleted(Set<NewsEvent> events) {}
    };
    DynamicDAO.addEntityListener(INews.class, listener);

    try {
      DynamicDAO.save(feed);
      assertTrue(listenerHit.get());
    } finally {
      DynamicDAO.removeEntityListener(INews.class, listener);
    }
  }

  /**
   * @throws Exception
   * @see IllegalStateException: Cannot acquire the write lock from the same
   * thread as the read lock (Bug 1279)
   */
  @Test
  @Ignore
  public void testEntityReadWriteFromUpdated() throws Exception {
    final AtomicBoolean listenerHit = new AtomicBoolean(false);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    final INews news = fFactory.createNews(null, feed, new Date());

    DynamicDAO.save(feed);

    NewsListener listener = new NewsListener() {
      public void entitiesUpdated(Set<NewsEvent> events) {
        listenerHit.set(true);

        for (NewsEvent event : events) {
          event.getEntity().getState();
          event.getEntity().setState(INews.State.READ);
        }
      }

      public void entitiesDeleted(Set<NewsEvent> events) {}

      public void entitiesAdded(Set<NewsEvent> events) {}
    };
    DynamicDAO.addEntityListener(INews.class, listener);

    news.setFlagged(true);

    try {
      DynamicDAO.save(news);
      assertTrue(listenerHit.get());
    } finally {
      DynamicDAO.removeEntityListener(INews.class, listener);
    }
  }

  /**
   * @throws Exception
   */
  @Test
  public void testEntityReadWriteFromDeleted() throws Exception {
    final AtomicBoolean listenerHit= new AtomicBoolean(false);

    IFeed feed = fFactory.createFeed(null, new URI("feed"));
    final INews news = fFactory.createNews(null, feed, new Date());

    DynamicDAO.save(feed);

    NewsListener listener = new NewsListener() {
      public void entitiesDeleted(Set<NewsEvent> events) {
        listenerHit.set(true);

        for (NewsEvent event : events) {
          event.getEntity().getState();
          event.getEntity().setState(INews.State.READ);
        }
      }

      public void entitiesUpdated(Set<NewsEvent> events) {}

      public void entitiesAdded(Set<NewsEvent> events) {}
    };
    DynamicDAO.addEntityListener(INews.class, listener);

    try {
      DynamicDAO.delete(news);
      assertTrue(listenerHit.get());
    } finally {
      DynamicDAO.removeEntityListener(INews.class, listener);
    }
  }
}
TOP

Related Classes of org.rssowl.core.tests.model.ModelTest4

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.