/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.test.connector; import org.dbunit.operation.DatabaseOperation; import org.jboss.seam.wiki.connectors.feed.FeedAggregatorDAO; import org.jboss.seam.wiki.connectors.feed.FeedEntryDTO; import org.jboss.seam.wiki.connectors.feed.FeedConnector; import org.jboss.seam.mock.DBUnitSeamTest; import org.jboss.seam.wiki.core.model.FeedEntry; import org.jboss.seam.wiki.core.model.Feed; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.AutoCreate; import org.jboss.seam.ScopeType; import org.testng.annotations.Test; import java.util.List; import java.util.ArrayList; import java.util.Date; import java.net.URL; /** * @author Christian Bauer */ public class FeedConnectorTest extends DBUnitSeamTest { protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT) ); } @Test public void getFeedDTOs() throws Exception { new NonFacesRequest() { protected void renderResponse() throws Exception { FeedAggregatorDAO dao = (FeedAggregatorDAO)getInstance(FeedAggregatorDAO.class); URL[] feedURLs = { new URL("http://foo"), new URL("http://bar") }; List<FeedEntryDTO> dtos = dao.getLatestFeedEntries(30, feedURLs); assert dtos.size() == 0; // Asynchronous cache needs to do its job first Thread.sleep(4000); dtos = dao.getLatestFeedEntries(30, feedURLs); assert dtos.size() == 3; } }.run(); } @Name("feedConnector") @Scope(ScopeType.APPLICATION) @Install(precedence = Install.MOCK) @AutoCreate public static class MockFeedConnector implements FeedConnector { public List<FeedEntryDTO> getFeedEntries(String feedURL) { try { Thread.sleep(3000); // Wait 3 seconds... } catch (InterruptedException e) {} List<FeedEntryDTO> entries = new ArrayList<FeedEntryDTO>(); if (feedURL.equals("http://foo")) { FeedEntry feOne = new FeedEntry(); feOne.setTitle("One"); feOne.setPublishedDate(new Date()); FeedEntry feTwo = new FeedEntry(); feTwo.setTitle("Two"); feTwo.setPublishedDate(new Date()); Feed feed = new Feed(); feed.setTitle("Foo"); feed.getFeedEntries().add(feOne); feed.getFeedEntries().add(feTwo); entries.add(new FeedEntryDTO(feed, feOne)); entries.add(new FeedEntryDTO(feed, feTwo)); } else if (feedURL.equals("http://bar")) { FeedEntry feOne = new FeedEntry(); feOne.setTitle("One"); feOne.setPublishedDate(new Date()); Feed feed = new Feed(); feed.setTitle("Bar"); feed.getFeedEntries().add(feOne); entries.add(new FeedEntryDTO(feed, feOne)); } return entries; } } }