/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* 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.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.core.feed;
import static org.easymock.EasyMock.*;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.apache.commons.codec.digest.DigestUtils;
import org.eclipse.skalli.model.Project;
import org.eclipse.skalli.services.feed.Entry;
import org.eclipse.skalli.services.feed.FeedEntry;
import org.eclipse.skalli.services.feed.FeedProvider;
import org.eclipse.skalli.services.feed.FeedUpdater;
import org.eclipse.skalli.services.project.ProjectService;
import org.eclipse.skalli.testutil.TestUUIDs;
import org.eclipse.skalli.testutil.feeds.HashMapFeedService;
import org.junit.Test;
@SuppressWarnings("nls")
public class FeedManagerComponentTest {
private static final UUID PROJECT1_UUID = TestUUIDs.TEST_UUIDS[0];
private static final UUID PROJECT2_UUID = TestUUIDs.TEST_UUIDS[1];
@Test
public void testUpdateAllFeeds() throws Exception {
final Date aTestDate = new Date(1318946441120L);
HashMapFeedService hashMapfeedService = new HashMapFeedService();
FeedManagerComponent feedManagerImpl = new FeedManagerComponent(false);
feedManagerImpl.bindFeedPersistenceService(hashMapfeedService);
//bindProjectService
ProjectService projectServiceMock = createMock(ProjectService.class);
Set<UUID> projectIds = new HashSet<UUID>();
projectIds.add(PROJECT1_UUID);
projectIds.add(PROJECT2_UUID);
Project p1 = new Project();
p1.setUuid(PROJECT1_UUID);
Project p2 = new Project();
p2.setUuid(PROJECT2_UUID);
expect(projectServiceMock.keySet()).andReturn(projectIds);
expect(projectServiceMock.getByUUID(PROJECT1_UUID)).andReturn(p1);
expect(projectServiceMock.getByUUID(PROJECT2_UUID)).andReturn(p2);
replay(projectServiceMock);
feedManagerImpl.bindProjectService(projectServiceMock);
//bindFeedProvider
FeedProvider feedProviderMock = createMock(FeedProvider.class);
expect(feedProviderMock.getFeedUpdaters(p1)).andReturn(
Collections.singletonList(getFeedUpdaterMock(hashMapfeedService,aTestDate, "source-a")));
expect(feedProviderMock.getFeedUpdaters(p2)).andReturn(
Collections.singletonList(getFeedUpdaterMock(hashMapfeedService,aTestDate, "source-b")));
replay(feedProviderMock);
feedManagerImpl.bindFeedProvider(feedProviderMock);
feedManagerImpl.updateAllFeeds();
assertThat(hashMapfeedService.getEntries().size(), is(3));
Entry foundEntry1 = findEntryByTitle(hashMapfeedService.getEntries(), "title1-source-a");
Entry foundEntry2 = findEntryByTitle(hashMapfeedService.getEntries(), "title2-source-a");
Entry foundEntry3 = findEntryByTitle(hashMapfeedService.getEntries(), "title1-source-b");
assertNotNull(foundEntry1);
assertNotNull(foundEntry2);
assertNotNull(foundEntry3);
assertNotNull(foundEntry1.getId());
assertThat(foundEntry1.getId(),
is(DigestUtils.shaHex(PROJECT1_UUID.toString() + aTestDate.getTime() + "source-a")));
assertThat(foundEntry1.getSource(), is("source-a"));
assertThat(foundEntry1.getProjectId(), is(PROJECT1_UUID));
assertThat(foundEntry1.getPublished(), is(aTestDate));
assertNotNull(foundEntry2.getId());
assertThat(foundEntry2.getId(), is("a4e8621588347aa9192f95708bdb48c8e4fb2b68")); //the original + alwasGeneratedPart as shaHex
assertThat(foundEntry2.getSource(), is("source-a"));
assertThat(foundEntry2.getProjectId(), is(PROJECT1_UUID));
assertThat(foundEntry2.getPublished(), is(aTestDate));
assertNotNull(foundEntry3.getId());
assertThat(foundEntry3.getId(),
is(DigestUtils.shaHex(PROJECT2_UUID.toString() + aTestDate.getTime() + "source-b")));
assertThat(foundEntry3.getSource(), is("source-b"));
assertThat(foundEntry3.getProjectId(), is(PROJECT2_UUID));
assertThat(foundEntry3.getPublished(), is(aTestDate));
}
private Entry findEntryByTitle(Collection<Entry> entries, final String title) {
for (Entry entry : entries) {
if (entry.getTitle().equals(title)) {
return entry;
}
}
return null;
}
private FeedUpdater getFeedUpdaterMock(HashMapFeedService hashMapfeedService, Date date, String source) {
FeedUpdater feedUpdaterProjectMock = createMock(FeedUpdater.class);
expect(feedUpdaterProjectMock.getSource()).andReturn(source);
expect(feedUpdaterProjectMock.getSource()).andReturn(source);
List<FeedEntry> entries = new ArrayList<FeedEntry>();
FeedEntry e1 = new HashMapFeedService.SimpleEntry();
e1.setTitle("title1-" + source);
e1.setPublished(date);
entries.add(e1);
if ("source-a".equals(source)) {
FeedEntry e2 = new HashMapFeedService.SimpleEntry();
e2.setTitle("title2-" + source);
e2.setPublished(date);
e2.setId("idTitle2");
entries.add(e2);
}
expect(feedUpdaterProjectMock.updateFeed(hashMapfeedService)).andReturn(entries);
replay(feedUpdaterProjectMock);
return feedUpdaterProjectMock;
}
}