Package com.salas.bb.core.actions.guide

Source Code of com.salas.bb.core.actions.guide.TestImportGuidesAction

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2006 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: TestImportGuidesAction.java,v 1.39 2007/05/09 14:17:57 spyromus Exp $
//

package com.salas.bb.core.actions.guide;

import com.jgoodies.uif.util.ResourceUtils;
import com.salas.bb.core.GlobalModel;
import com.salas.bb.domain.*;
import com.salas.bb.domain.query.IComparisonOperation;
import com.salas.bb.domain.query.ICriteria;
import com.salas.bb.domain.query.IProperty;
import com.salas.bb.domain.query.articles.Query;
import com.salas.bb.domain.querytypes.QueryType;
import com.salas.bb.domain.utils.GuideIcons;
import com.salas.bbutilities.opml.objects.DefaultOPMLFeed;
import com.salas.bbutilities.opml.objects.DirectOPMLFeed;
import com.salas.bbutilities.opml.objects.OPMLGuide;
import junit.framework.TestCase;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
* @see ImportGuidesAction
*/
public class TestImportGuidesAction extends TestCase
{
    private boolean dbInitialized = false;
    private static final int NUM_CHANNELS = 3;

    protected void setUp() throws Exception
    {
        GlobalModel gm = new GlobalModel(null);
        GlobalModel.setSINGLETON(gm);
        ResourceUtils.setBundlePath("Resource");
    }

    /**
     * @see ImportGuidesAction#countFeeds
     */
    public void testCountChannels()
    {
        final OPMLGuide emptyGuide = new OPMLGuide("test", null, false, null, null, false, 0, false, false, false);

        final OPMLGuide guide1 = new OPMLGuide("guide1", null, false, null, null, false, 0, false, false, false);
        final ArrayList<DefaultOPMLFeed> al1 = new ArrayList<DefaultOPMLFeed>();
        al1.add(new DirectOPMLFeed("1", "1", "1", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        guide1.setFeeds(al1);

        final OPMLGuide[] guides = {emptyGuide, guide1};

        assertEquals(1, ImportGuidesAction.countFeeds(guides));
    }

    /**
     * @see ImportGuidesAction#appendGuides
     */
    public void testAppendGuides()
        throws Exception
    {
        initDB();

        // Setup guides for appending
        final OPMLGuide g1, g2;
        final ArrayList<DefaultOPMLFeed> a1, a2;

        g1 = new OPMLGuide("g1", "icon1", false, null, null, false, 0, false, false, false);
        a1 = new ArrayList<DefaultOPMLFeed>();
        a1.add(new DirectOPMLFeed("1", "file://1", "file://1", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a1.add(new DirectOPMLFeed("2", "file://2", "file://2", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g1.setFeeds(a1);

        g2 = new OPMLGuide("g2", null, false, null, null, false, 0, false, false, false);
        a2 = new ArrayList<DefaultOPMLFeed>();
        a2.add(new DirectOPMLFeed("3", "file://3", "file://3", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a2.add(new DirectOPMLFeed("4", "file://4", "file://4", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g2.setFeeds(a2);

        final OPMLGuide[] guides = {g1, g2};

        // Put in ChannelGuideSet guide with duplicate name to check how dedupe works
        GuidesSet cgs = GlobalModel.SINGLETON.getGuidesSet();
        final StandardGuide guide = new StandardGuide();
        guide.setTitle("g1");
        cgs.add(guide);

        // Append guides
        ImportGuidesAction.appendGuides(null, guides, cgs);

        // Check
        assertEquals(NUM_CHANNELS, cgs.getGuidesCount());

        String[] iconsNames = GuideIcons.getIconsNames();

        // Guide 0
        IGuide guide0 = cgs.getGuideAt(0);
        assertEquals("g1", guide0.getTitle());
        assertNull("Icon name wasn't specified.", guide0.getIconKey());
        assertEquals(0, guide0.getFeedsCount());

        // Guide 1
        final IGuide guide1 = cgs.getGuideAt(1);
        assertEquals("g1_2", guide1.getTitle());
        assertEquals("icon1", guide1.getIconKey());
        assertEquals(2, guide1.getFeedsCount());

        final DirectFeed pcge1 = (DirectFeed)guide1.getFeedAt(0);
        assertEquals("file://1", pcge1.getXmlURL().toString());
        assertEquals("file://1", pcge1.getSiteURL().toString());
        final DirectFeed pcge2 = (DirectFeed)guide1.getFeedAt(1);
        assertEquals("file://2", pcge2.getXmlURL().toString());
        assertEquals("file://2", pcge2.getSiteURL().toString());

        // Guide 2
        final IGuide guide2 = cgs.getGuideAt(2);
        assertEquals("g2", guide2.getTitle());
        assertEquals("Wrong icon name.", iconsNames[0], guide2.getIconKey());
        assertEquals(2, guide2.getFeedsCount());
        final DirectFeed pcge3 = (DirectFeed)guide2.getFeedAt(0);
        assertEquals("file://3", pcge3.getXmlURL().toString());
        assertEquals("file://3", pcge3.getSiteURL().toString());
        final DirectFeed pcge4 = (DirectFeed)guide2.getFeedAt(1);
        assertEquals("file://4", pcge4.getXmlURL().toString());
        assertEquals("file://4", pcge4.getSiteURL().toString());
    }

    private synchronized void initDB()
    {
        if (dbInitialized) return;

        GlobalModel.SINGLETON.getUserPreferences().setUsingPersistence(false);

//        InformaBackEnd.getInstance().connect();
        dbInitialized = true;
    }

    /**
     * @see ImportGuidesAction#replaceGuides
     */
    public void testReplaceGuides()
        throws Exception
    {
        initDB();

        // Setup guides for replacing
        final OPMLGuide g1, g2;
        final ArrayList<DefaultOPMLFeed> a1, a2;

        g1 = new OPMLGuide("g1", "icon1", false, null, null, false, 0, false, false, false);
        a1 = new ArrayList<DefaultOPMLFeed>();
        a1.add(new DirectOPMLFeed("1", "file://1", "file://1", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a1.add(new DirectOPMLFeed("2", "file://2", "file://2", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g1.setFeeds(a1);

        g2 = new OPMLGuide("g1", null, false, null, null, false, 0, false, false, false);
        a2 = new ArrayList<DefaultOPMLFeed>();
        a2.add(new DirectOPMLFeed("3", "file://3", "file://3", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a2.add(new DirectOPMLFeed("4", "file://4", "file://4", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g2.setFeeds(a2);

        final OPMLGuide[] guides = {g1, g2};

        // Put in ChannelGuideSet guide with duplicate name to check how dedupe works
        GuidesSet cgs = GlobalModel.SINGLETON.getGuidesSet();
        final StandardGuide guide = new StandardGuide();
        guide.setTitle("g1");
//        InformaBackEnd.getInstance().connect(guide);
        cgs.add(guide);

        // Append guides
        ImportGuidesAction.replaceGuides(null, guides, cgs);

        // Check
        assertEquals(2, cgs.getGuidesCount());

        // Guide 0
        final IGuide guide0 = cgs.getGuideAt(0);
        assertEquals("g1", guide0.getTitle());
        assertEquals("icon1", guide0.getIconKey());
        assertEquals(2, guide0.getFeedsCount());
        final DirectFeed pcge1 = (DirectFeed)guide0.getFeedAt(0);
        assertEquals("file://1", pcge1.getXmlURL().toString());
        assertEquals("file://1", pcge1.getSiteURL().toString());
        final DirectFeed pcge2 = (DirectFeed)guide0.getFeedAt(1);
        assertEquals("file://2", pcge2.getXmlURL().toString());
        assertEquals("file://2", pcge2.getSiteURL().toString());

        String[] iconsNames = GuideIcons.getIconsNames();

        // Guide 1
        final IGuide guide1 = cgs.getGuideAt(1);
        assertEquals("g1_2", guide1.getTitle());
        assertEquals("Wrong icon name.", iconsNames[0], guide1.getIconKey());
        assertEquals(2, guide1.getFeedsCount());
        final DirectFeed pcge3 = (DirectFeed)guide1.getFeedAt(0);
        assertEquals("file://3", pcge3.getXmlURL().toString());
        assertEquals("file://3", pcge3.getSiteURL().toString());
        final DirectFeed pcge4 = (DirectFeed)guide1.getFeedAt(1);
        assertEquals("file://4", pcge4.getXmlURL().toString());
        assertEquals("file://4", pcge4.getSiteURL().toString());
    }

    /**
     * @see ImportGuidesAction#replaceGuides
     */
    public void testReplaceGuidesEmpty()
    {
        initDB();

        // Setup guides for replacing
        final OPMLGuide g1, g2;
        final ArrayList<DefaultOPMLFeed> a1, a2;

        g1 = new OPMLGuide("g1", "icon1", false, null, null, false, 0, false, false, false);
        a1 = new ArrayList<DefaultOPMLFeed>();
        a1.add(new DirectOPMLFeed("1", "file://1", "file://1", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a1.add(new DirectOPMLFeed("2", "file://2", "file://2", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g1.setFeeds(a1);

        g2 = new OPMLGuide("g1", null, false, null, null, false, 0, false, false, false);
        a2 = new ArrayList<DefaultOPMLFeed>();
        a2.add(new DirectOPMLFeed("3", "file://3", "file://3", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a2.add(new DirectOPMLFeed("4", "file://4", "file://4", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        g2.setFeeds(a2);

        final OPMLGuide[] guides = {g1, g2};

        // Leave cgs empty
        GuidesSet cgs = GlobalModel.SINGLETON.getGuidesSet();
        assertEquals(0, cgs.getGuidesCount());

        // Append guides
        ImportGuidesAction.replaceGuides(null, guides, cgs);

        // Check
        assertEquals(2, cgs.getGuidesCount());

        // Guide 0
        final IGuide guide0 = cgs.getGuideAt(0);
        assertEquals("g1", guide0.getTitle());
        assertEquals("icon1", guide0.getIconKey());
        assertEquals(2, guide0.getFeedsCount());
        final DirectFeed pcge1 = (DirectFeed)guide0.getFeedAt(0);
        assertEquals("file://1", pcge1.getXmlURL().toString());
        assertEquals("file://1", pcge1.getSiteURL().toString());
        final DirectFeed pcge2 = (DirectFeed)guide0.getFeedAt(1);
        assertEquals("file://2", pcge2.getXmlURL().toString());
        assertEquals("file://2", pcge2.getSiteURL().toString());

        String[] iconsNames = GuideIcons.getIconsNames();

        // Guide 1
        final IGuide guide1 = cgs.getGuideAt(1);
        assertEquals("g1_2", guide1.getTitle());
        assertEquals("Wrong icon name.", iconsNames[0], guide1.getIconKey());
        assertEquals(2, guide1.getFeedsCount());
        final DirectFeed pcge3 = (DirectFeed)guide1.getFeedAt(0);
        assertEquals("file://3", pcge3.getXmlURL().toString());
        assertEquals("file://3", pcge3.getSiteURL().toString());
        final DirectFeed pcge4 = (DirectFeed)guide1.getFeedAt(1);
        assertEquals("file://4", pcge4.getXmlURL().toString());
        assertEquals("file://4", pcge4.getSiteURL().toString());
    }

    /**
     * @see ImportGuidesAction#getUniqueTitle
     */
    public void testGetUniqueTitle()
    {
        final Set<String> a1 = new HashSet<String>();
        assertEquals("a", ImportGuidesAction.getUniqueTitle("a", a1));

        a1.add("a");
        assertEquals("a_2", ImportGuidesAction.getUniqueTitle("a", a1));

        a1.add("a_2");
        assertEquals("a_3", ImportGuidesAction.getUniqueTitle("a", a1));
    }

    /**
     * @see ImportGuidesAction#appendGuide
     */
    public void testAppendGuide()
        throws Exception
    {
        initDB();

        final OPMLGuide guide = new OPMLGuide("g1", "icon", false, null, null, false, 0, false, false, false);
        final ArrayList<DefaultOPMLFeed> a1 = new ArrayList<DefaultOPMLFeed>();
        a1.add(new DirectOPMLFeed("1", "file://1", "file://1", 0, null, null, -1, null, null, null, null, null, null, false, 1, false, 0, false, 0));
        a1.add(new DirectOPMLFeed("2", "file://2", "file://2", 0, null, null, 1, "A", "B", "C", "D", "E", "F", false, 1, false, 0, false, 0));
        guide.setFeeds(a1);

        // Put in GuidesSet guide with duplicate name to check how dedupe works
        GuidesSet cgs = GlobalModel.SINGLETON.getGuidesSet();
        final StandardGuide g = new StandardGuide();
        g.setTitle("g1");
        cgs.add(g);

        // Note that unique title. Deduping made manually.
        ImportGuidesAction.appendGuide(null, guide, "g1_2", cgs);

        // Check
        assertEquals(2, cgs.getGuidesCount());

        // Guide 0
        assertEquals("g1", cgs.getGuideAt(0).getTitle());
        assertEquals(0, cgs.getGuideAt(0).getFeedsCount());

        // Guide 1
        final IGuide guide1 = cgs.getGuideAt(1);
        assertEquals("g1_2", guide1.getTitle());
        assertEquals("icon", guide1.getIconKey());
        assertEquals(2, guide1.getFeedsCount());

        final DirectFeed feed1 = (DirectFeed)guide1.getFeedAt(0);
        assertEquals("file://1", feed1.getXmlURL().toString());
        assertEquals("file://1", feed1.getSiteURL().toString());
        assertNull(feed1.getCustomTitle());
        assertNull(feed1.getCustomAuthor());
        assertNull(feed1.getCustomDescription());
        assertEquals(-1, feed1.getPurgeLimit());

        final DirectFeed feed2 = (DirectFeed)guide1.getFeedAt(1);
        assertEquals("file://2", feed2.getXmlURL().toString());
        assertEquals("file://2", feed2.getSiteURL().toString());
        assertEquals("A", feed2.getCustomTitle());
        assertEquals("B", feed2.getCustomAuthor());
        assertEquals("C", feed2.getCustomDescription());
        assertEquals(1, feed2.getPurgeLimit());
    }

    // ------------------------------------------------------------------------
    // Testing deduplication during import
    // ------------------------------------------------------------------------

    /** Tests no sharing due to the empty set. */
    public void testReplaceFeedsWithShares_emptySet()
    {
        GuidesSet set = new GuidesSet();
        StandardGuide guide = new StandardGuide();

        // Checking there are no errors
        ImportGuidesAction.replaceFeedsWithShares(set, guide);

        // Adding feed and checking if a guide is processed somehow -- shouldn't
        DirectFeed df1 = directFeed(1);
        guide.add(df1);
        ImportGuidesAction.replaceFeedsWithShares(set, guide);
        assertEquals(1, guide.getFeedsCount());
        assertTrue(df1 == guide.getFeedAt(0));
    }

    /** Tests sharing in guides. */
    public void testReplaceFeedsWithShares_replacing()
    {
        GuidesSet set = new GuidesSet();

        // Adding a guide with feeds
        StandardGuide guide1 = new StandardGuide();
        DirectFeed df1 = directFeed(1);
        QueryFeed qf1 = queryFeed(1);
        SearchFeed sf1 = searchFeed(1);
        guide1.add(df1);
        guide1.add(qf1);
        guide1.add(sf1);
        set.add(guide1);

        // Creating the second guide with the same and other feeds
        StandardGuide guide2 = new StandardGuide();
        DirectFeed df2 = directFeed(2);
        QueryFeed qf2 = queryFeed(2);
        SearchFeed sf2 = searchFeed(2);
        guide2.add(directFeed(1));
        guide2.add(df2);
        guide2.add(queryFeed(1));
        guide2.add(qf2);
        guide2.add(searchFeed(1));
        guide2.add(sf2);

        // Checking
        ImportGuidesAction.replaceFeedsWithShares(set, guide2);
        assertEquals(6, guide2.getFeedsCount());
        assertTrue(df2 == guide2.getFeedAt(0));
        assertTrue(qf2 == guide2.getFeedAt(1));
        assertTrue(sf2 == guide2.getFeedAt(2));
        assertTrue(df1 == guide2.getFeedAt(3));
        assertTrue(qf1 == guide2.getFeedAt(4));
        assertTrue(sf1 == guide2.getFeedAt(5));
    }

    /**
     * Testing the sharing in a reading list.
     * @throws MalformedURLException nowhen.
     */
    public void testReplaceFeedsWithShares_readingList()
            throws MalformedURLException
    {
        GuidesSet set = new GuidesSet();

        // Adding a guide with feeds
        StandardGuide guide1 = new StandardGuide();
        DirectFeed df1 = directFeed(1);
        QueryFeed qf1 = queryFeed(1);
        SearchFeed sf1 = searchFeed(1);
        guide1.add(df1);
        guide1.add(qf1);
        guide1.add(sf1);
        set.add(guide1);

        // Creating the second guide with the same and other feeds
        StandardGuide guide2 = new StandardGuide();
        ReadingList rl = new ReadingList(new URL("file://a"));
        DirectFeed df2 = directFeed(2);
        rl.add(directFeed(1));
        rl.add(df2);
        guide2.add(rl);

        // Checking
        ImportGuidesAction.replaceFeedsWithShares(set, guide2);
        assertEquals(2, guide2.getFeedsCount());
        assertTrue(df2 == guide2.getFeedAt(0));
        assertTrue(df1 == guide2.getFeedAt(1));
    }
                 
    // ------------------------------------------------------------------------
    // Helpers
    // ------------------------------------------------------------------------

    private static DirectFeed directFeed(int n)
    {
        DirectFeed df = new DirectFeed();
        try
        {
            df.setXmlURL(new URL("file://" + n));
        } catch (MalformedURLException e)
        {
            // Fall through
        }

        return df;
    }

    private static QueryFeed queryFeed(int n)
    {
        QueryFeed qf = new QueryFeed();
        qf.setQueryType(QueryType.getQueryType(QueryType.TYPE_AMAZON_BOOKS));
        qf.setParameter(Integer.toString(n));

        return qf;
    }

    private static SearchFeed searchFeed(int n)
    {
        // Create Query
        Query q = new Query();
        Collection props = q.getAvailableProperties();
        IProperty p = (IProperty)props.iterator().next();
        IComparisonOperation op = (IComparisonOperation)p.getComparsonOperations().iterator().next();
        ICriteria c = q.addCriteria();
        c.setProperty(p);
        c.setComparisonOperation(op);
        c.setValue(Integer.toString(n));

        SearchFeed sf = new SearchFeed();
        sf.setQuery(q);
        return sf;
    }
}
TOP

Related Classes of com.salas.bb.core.actions.guide.TestImportGuidesAction

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.