Package org.rssowl.core.tests.ui

Source Code of org.rssowl.core.tests.ui.SyncServiceTest

/*   **********************************************************************  **
**   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 junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.internal.newsaction.DeleteNewsAction;
import org.rssowl.core.internal.newsaction.LabelNewsAction;
import org.rssowl.core.internal.newsaction.MarkReadNewsAction;
import org.rssowl.core.internal.newsaction.MarkStickyNewsAction;
import org.rssowl.core.internal.newsaction.MarkUnreadNewsAction;
import org.rssowl.core.internal.persist.service.PersistenceServiceImpl;
import org.rssowl.core.persist.IFeed;
import org.rssowl.core.persist.IFilterAction;
import org.rssowl.core.persist.ILabel;
import org.rssowl.core.persist.IModelFactory;
import org.rssowl.core.persist.INews;
import org.rssowl.core.persist.ISearchFilter;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.event.NewsEvent;
import org.rssowl.core.util.SyncItem;
import org.rssowl.core.util.SyncUtils;
import org.rssowl.ui.internal.services.SyncItemsManager;

import java.net.URI;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;

/**
* Tests for the {@link SyncService}, {@link SyncItemsManager} and
* {@link SyncItem}.
*
* @author bpasero
*/
public class SyncServiceTest {
  private IModelFactory fFactory = Owl.getModelFactory();

  /**
   * @throws Exception
   */
  @Before
  public void setUp() throws Exception {
    ((PersistenceServiceImpl) Owl.getPersistenceService()).recreateSchemaForTests();
    SyncItemsManager manager = new SyncItemsManager();
    manager.startup();
    manager.clearUncommittedItems();
    manager.shutdown();
  }

  /**
   * @throws Exception
   */
  @Test
  public void testEventToSyncItem() throws Exception {
    ILabel label1 = fFactory.createLabel(null, "Foo");
    ILabel label2 = fFactory.createLabel(null, "Bar");

    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));

    INews oldNews = fFactory.createNews(null, feed, new Date());
    oldNews.setInReplyTo(feed.getLink().toString());
    oldNews.setGuid(fFactory.createGuid(oldNews, "tag:google.com/foo", true));

    INews currentNews = fFactory.createNews(null, feed, new Date());
    currentNews.setInReplyTo(feed.getLink().toString());
    currentNews.setGuid(fFactory.createGuid(currentNews, "tag:google.com/foo", true));

    SyncItem item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertNull(item);

    currentNews.setState(INews.State.READ);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    oldNews.setState(INews.State.READ);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertNull(item);

    currentNews.setState(INews.State.DELETED);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertNull(item);

    currentNews.setState(INews.State.HIDDEN);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertNull(item);

    currentNews.setState(INews.State.UNREAD);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    currentNews.setFlagged(true);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    oldNews.setFlagged(true);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    currentNews.setFlagged(false);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    currentNews.addLabel(label1);
    currentNews.addLabel(label2);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(2, item.getAddedLabels().size());
    assertTrue(item.getRemovedLabels().isEmpty());

    oldNews.addLabel(label1);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(1, item.getAddedLabels().size());
    assertTrue(item.getRemovedLabels().isEmpty());

    currentNews.removeLabel(label1);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(1, item.getAddedLabels().size());
    assertEquals("Bar", item.getAddedLabels().get(0));
    assertEquals(1, item.getRemovedLabels().size());
    assertEquals("Foo", item.getRemovedLabels().get(0));

    oldNews.addLabel(label2);
    currentNews.removeLabel(label2);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(0, item.getAddedLabels().size());
    assertEquals(2, item.getRemovedLabels().size());

    currentNews.setState(INews.State.HIDDEN);
    oldNews.setState(INews.State.NEW);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(0, item.getAddedLabels().size());
    assertEquals(2, item.getRemovedLabels().size());

    currentNews.setFlagged(true);
    oldNews.setFlagged(true);
    item = SyncItem.toSyncItem(new NewsEvent(oldNews, currentNews, true));
    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertTrue(item.isUnStarred());
    assertEquals(0, item.getAddedLabels().size());
    assertEquals(2, item.getRemovedLabels().size());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testFilterToSyncItem() throws Exception {
    ILabel label1 = fFactory.createLabel(null, "Foo");
    ILabel label2 = fFactory.createLabel(null, "Bar");

    DynamicDAO.save(label1);
    DynamicDAO.save(label2);

    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));
    ISearchFilter filter = fFactory.createSearchFilter(null, fFactory.createSearch(null), "Filter");

    INews currentNews = fFactory.createNews(null, feed, new Date());
    currentNews.setInReplyTo(feed.getLink().toString());
    currentNews.setGuid(fFactory.createGuid(currentNews, "tag:google.com/foo", true));

    SyncItem item = SyncItem.toSyncItem(filter, currentNews);
    assertNull(item);

    filter.addAction(fFactory.createFilterAction(MarkReadNewsAction.ID));
    item = SyncItem.toSyncItem(filter, currentNews);

    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertFalse(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    filter.addAction(fFactory.createFilterAction(MarkStickyNewsAction.ID));
    item = SyncItem.toSyncItem(filter, currentNews);

    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    filter.addAction(fFactory.createFilterAction(MarkUnreadNewsAction.ID));
    item = SyncItem.toSyncItem(filter, currentNews);

    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertTrue(item.getAddedLabels().isEmpty());
    assertTrue(item.getRemovedLabels().isEmpty());

    IFilterAction action = fFactory.createFilterAction(LabelNewsAction.ID);
    action.setData(label1.getId());
    filter.addAction(action);
    item = SyncItem.toSyncItem(filter, currentNews);

    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertEquals(1, item.getAddedLabels().size());
    assertEquals("Foo", item.getAddedLabels().get(0));
    assertTrue(item.getRemovedLabels().isEmpty());

    action = fFactory.createFilterAction(LabelNewsAction.ID);
    action.setData(label2.getId());
    filter.addAction(action);
    item = SyncItem.toSyncItem(filter, currentNews);

    assertFalse(item.isMarkedRead());
    assertTrue(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertEquals(2, item.getAddedLabels().size());
    assertEquals("Foo", item.getAddedLabels().get(0));
    assertEquals("Bar", item.getAddedLabels().get(1));
    assertTrue(item.getRemovedLabels().isEmpty());

    action = fFactory.createFilterAction(DeleteNewsAction.ID);
    filter.addAction(action);
    item = SyncItem.toSyncItem(filter, currentNews);
    assertTrue(item.isMarkedRead());
    assertFalse(item.isMarkedUnread());
    assertTrue(item.isStarred());
    assertFalse(item.isUnStarred());
    assertEquals(2, item.getAddedLabels().size());
    assertEquals("Foo", item.getAddedLabels().get(0));
    assertEquals("Bar", item.getAddedLabels().get(1));
    assertTrue(item.getRemovedLabels().isEmpty());
  }

  /**
   * @throws Exception
   */
  @Test
  public void testMergeSyncItem() throws Exception {
    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));

    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setInReplyTo(feed.getLink().toString());
    news1.setGuid(fFactory.createGuid(news1, "tag:google.com/foo", true));

    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setInReplyTo(feed.getLink().toString());
    news2.setGuid(fFactory.createGuid(news2, "tag:google.com/foo", true));

    INews news3 = fFactory.createNews(null, feed, new Date());
    news3.setInReplyTo(feed.getLink().toString());
    news3.setGuid(fFactory.createGuid(news3, "tag:google.com/foo", true));

    SyncItem item1 = SyncItem.toSyncItem(news1);
    SyncItem item2 = SyncItem.toSyncItem(news2);
    SyncItem item3 = SyncItem.toSyncItem(news3);

    item1.merge(item2);

    assertFalse(item1.isMarkedRead());
    assertFalse(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertFalse(item1.isUnStarred());
    assertTrue(item1.getAddedLabels().isEmpty());
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.setMarkedRead();
    item1.merge(item2);
    assertTrue(item1.isMarkedRead());
    assertFalse(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertFalse(item1.isUnStarred());
    assertTrue(item1.getAddedLabels().isEmpty());
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.setMarkedUnread();
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertFalse(item1.isUnStarred());
    assertTrue(item1.getAddedLabels().isEmpty());
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.setStarred();
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertTrue(item1.isStarred());
    assertFalse(item1.isUnStarred());
    assertTrue(item1.getAddedLabels().isEmpty());
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.setUnStarred();
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertTrue(item1.getAddedLabels().isEmpty());
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.addLabel("Foo");
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(1, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.addLabel("Bar");
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(2, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertTrue(item1.getRemovedLabels().isEmpty());

    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(2, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertTrue(item1.getRemovedLabels().isEmpty());

    item2.removeLabel("hello");
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(2, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertEquals(1, item1.getRemovedLabels().size());
    assertEquals("hello", item1.getRemovedLabels().get(0));

    item2.removeLabel("world");
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(2, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertEquals(2, item1.getRemovedLabels().size());
    assertEquals("hello", item1.getRemovedLabels().get(0));
    assertEquals("world", item1.getRemovedLabels().get(1));

    item2.addLabel("world");
    item1.merge(item2);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(3, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertEquals("world", item1.getAddedLabels().get(2));
    assertEquals(1, item1.getRemovedLabels().size());
    assertEquals("hello", item1.getRemovedLabels().get(0));

    item1.merge(item3);
    assertFalse(item1.isMarkedRead());
    assertTrue(item1.isMarkedUnread());
    assertFalse(item1.isStarred());
    assertTrue(item1.isUnStarred());
    assertEquals(3, item1.getAddedLabels().size());
    assertEquals("Foo", item1.getAddedLabels().get(0));
    assertEquals("Bar", item1.getAddedLabels().get(1));
    assertEquals("world", item1.getAddedLabels().get(2));
    assertEquals(1, item1.getRemovedLabels().size());
    assertEquals("hello", item1.getRemovedLabels().get(0));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testApplySyncItem() throws Exception {
    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));

    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setInReplyTo(feed.getLink().toString());
    news1.setGuid(fFactory.createGuid(news1, "tag:google.com/foo", true));

    SyncItem sync = SyncItem.toSyncItem(news1);
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    sync.setMarkedRead();
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    sync.setMarkedUnread();
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    sync.setStarred();
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertTrue(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    sync.setUnStarred();
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    sync.addLabel("Foo");
    sync.addLabel("Hello World");
    sync.removeLabel("Bar");
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    Object labelsObj = news1.getProperty(SyncUtils.GOOGLE_LABELS);
    assertNotNull(labelsObj);
    assertTrue(labelsObj instanceof String[]);

    String[] labels = (String[]) labelsObj;
    assertEquals(2, labels.length);
    assertTrue(labels[0].equals("Foo") || labels[1].equals("Foo"));
    assertTrue(labels[0].equals("Hello World") || labels[1].equals("Hello World"));

    sync.removeLabel("Foo");
    sync.removeLabel("Hello World");
    sync.addLabel("Bar");
    sync.applyTo(news1);

    assertTrue(news1.getState() == INews.State.NEW);
    assertNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_READ));
    assertNotNull(news1.getProperty(SyncUtils.GOOGLE_MARKED_UNREAD));
    assertFalse(news1.isFlagged());
    assertTrue(news1.getLabels().isEmpty());

    labelsObj = news1.getProperty(SyncUtils.GOOGLE_LABELS);
    assertNotNull(labelsObj);
    assertTrue(labelsObj instanceof String[]);

    labels = (String[]) labelsObj;
    assertEquals(1, labels.length);
    assertTrue(labels[0].equals("Bar"));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testIsSyncItemEquivalent() throws Exception {
    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));

    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setInReplyTo(feed.getLink().toString());
    news1.setGuid(fFactory.createGuid(news1, "tag:google.com/foo", true));

    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setInReplyTo(feed.getLink().toString());
    news2.setGuid(fFactory.createGuid(news2, "tag:google.com/foo", true));

    SyncItem item1 = SyncItem.toSyncItem(news1);
    SyncItem item2 = SyncItem.toSyncItem(news2);

    assertTrue(item1.isEquivalent(item2));

    item2.setMarkedRead();
    assertFalse(item1.isEquivalent(item2));
    item1.setMarkedRead();
    assertTrue(item1.isEquivalent(item2));

    item2.setMarkedUnread();
    assertFalse(item1.isEquivalent(item2));
    item1.setMarkedUnread();
    assertTrue(item1.isEquivalent(item2));

    item2.setStarred();
    assertFalse(item1.isEquivalent(item2));
    item1.setStarred();
    assertTrue(item1.isEquivalent(item2));

    item2.setUnStarred();
    assertFalse(item1.isEquivalent(item2));
    item1.setUnStarred();
    assertTrue(item1.isEquivalent(item2));

    item2.addLabel("Foo");
    assertFalse(item1.isEquivalent(item2));
    item1.addLabel("Foo");
    assertTrue(item1.isEquivalent(item2));

    item2.addLabel("Bar");
    assertFalse(item1.isEquivalent(item2));
    item1.addLabel("Bar");
    assertTrue(item1.isEquivalent(item2));

    item2.removeLabel("Hello");
    assertFalse(item1.isEquivalent(item2));
    item1.removeLabel("Hello");
    assertTrue(item1.isEquivalent(item2));

    item2.removeLabel("World");
    assertFalse(item1.isEquivalent(item2));
    item1.removeLabel("World");
    assertTrue(item1.isEquivalent(item2));
  }

  /**
   * @throws Exception
   */
  @Test
  public void testSyncItemsManager() throws Exception {
    SyncItemsManager manager = new SyncItemsManager();
    manager.startup();

    assertTrue(manager.getUncommittedItems().isEmpty());

    IFeed feed = fFactory.createFeed(null, URI.create("rssowl.org"));

    INews news1 = fFactory.createNews(null, feed, new Date());
    news1.setInReplyTo(feed.getLink().toString());
    news1.setGuid(fFactory.createGuid(news1, "tag:google.com/foo", true));

    INews news2 = fFactory.createNews(null, feed, new Date());
    news2.setInReplyTo(feed.getLink().toString());
    news2.setGuid(fFactory.createGuid(news2, "tag:google.com/bar", true));

    SyncItem item1 = SyncItem.toSyncItem(news1);
    item1.setMarkedRead();

    SyncItem item2 = SyncItem.toSyncItem(news2);
    item2.addLabel("Foo");
    item2.addLabel("Bar");
    item2.removeLabel("Hello World");

    manager.addUncommitted(Arrays.asList(item1, item2));

    assertTrue(manager.hasUncommittedItems());

    manager.shutdown();
    assertFalse(manager.hasUncommittedItems());
    manager.startup();
    assertTrue(manager.hasUncommittedItems());

    Collection<SyncItem> uncommittedItems = manager.getUncommittedItems().values();
    assertEquals(2, uncommittedItems.size());

    Iterator<SyncItem> iterator = uncommittedItems.iterator();
    SyncItem loadedItem1 = iterator.next();
    SyncItem loadedItem2 = iterator.next();

    assertTrue(item1.isEquivalent(loadedItem1));
    assertTrue(item2.isEquivalent(loadedItem2));

    SyncItem item3 = SyncItem.toSyncItem(news1);
    item3.setMarkedUnread();
    item3.setStarred();

    manager.addUncommitted(Collections.singleton(item3));

    uncommittedItems = manager.getUncommittedItems().values();
    assertEquals(2, uncommittedItems.size());

    iterator = uncommittedItems.iterator();
    loadedItem1 = iterator.next();

    assertFalse(loadedItem1.isMarkedRead());
    assertTrue(loadedItem1.isMarkedUnread());
    assertTrue(loadedItem1.isStarred());
  }
}
TOP

Related Classes of org.rssowl.core.tests.ui.SyncServiceTest

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.