package org.atomhopper.migration.adapter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import static junit.framework.Assert.assertEquals;
import org.atomhopper.adapter.FeedInformation;
import org.atomhopper.adapter.jpa.PersistedEntry;
import org.apache.abdera.Abdera;
import org.apache.abdera.model.Feed;
import org.apache.abdera.model.Entry;
import org.atomhopper.adapter.FeedSource;
import org.atomhopper.adapter.jpa.PersistedFeed;
import org.atomhopper.adapter.request.adapter.GetEntryRequest;
import org.atomhopper.adapter.request.adapter.GetFeedRequest;
import org.atomhopper.migration.domain.MigrationReadFrom;
import org.atomhopper.response.AdapterResponse;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.springframework.http.HttpStatus;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import java.util.*;
@RunWith(Enclosed.class)
public class MigrationFeedSourceTest {
public static class WhenSourcingFeeds {
private MigrationFeedSource migrationFeedSource;
private FeedSource oldFeedSource;
private FeedSource newFeedSource;
private FeedInformation oldFeedInformation;
private FeedInformation newFeedInformation;
private PersistedFeed feed;
private GetFeedRequest getFeedRequest;
private GetEntryRequest getEntryRequest;
private PersistedEntry persistedEntry;
private List<PersistedEntry> entryList;
private Abdera abdera;
private final String MARKER_ID = UUID.randomUUID().toString();
private final String ENTRY_BODY = "<entry xmlns='http://www.w3.org/2005/Atom'></entry>";
private final String FEED_NAME = "namespace/feed";
private AdapterResponse<Feed> feedResponse;
private AdapterResponse<Entry> entryResponse;
@Before
public void setUp() throws Exception {
feed = new PersistedFeed();
feed.setName(FEED_NAME);
persistedEntry = new PersistedEntry();
persistedEntry.setFeed(feed);
persistedEntry.setEntryId(MARKER_ID);
persistedEntry.setEntryBody(ENTRY_BODY);
entryList = new ArrayList<PersistedEntry>();
entryList.add(persistedEntry);
// Mocks
abdera = mock(Abdera.class);
getFeedRequest = mock(GetFeedRequest.class);
getEntryRequest = mock(GetEntryRequest.class);
oldFeedSource = mock(FeedSource.class);
newFeedSource = mock(FeedSource.class);
oldFeedInformation = mock(FeedInformation.class);
newFeedInformation = mock(FeedInformation.class);
migrationFeedSource = new MigrationFeedSource();
migrationFeedSource.setNewFeedSource(newFeedSource);
migrationFeedSource.setOldFeedSource(oldFeedSource);
feedResponse = mock(AdapterResponse.class);
// Mock GetEntryRequest
when(getEntryRequest.getFeedName()).thenReturn(FEED_NAME);
when(getEntryRequest.getEntryId()).thenReturn(MARKER_ID);
//Mock GetFeedRequest
when(getFeedRequest.getFeedName()).thenReturn(FEED_NAME);
when(getFeedRequest.getPageSize()).thenReturn("25");
when(getFeedRequest.getAbdera()).thenReturn(abdera);
}
@Test
public void shouldGetFeedInformationForReadFromOld() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedSource.getFeedInformation()).thenReturn(oldFeedInformation);
FeedInformation info = migrationFeedSource.getFeedInformation();
assertEquals(info, oldFeedInformation);
}
@Test
public void shouldGetFeedInformationForReadFromNew() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.NEW);
when(newFeedSource.getFeedInformation()).thenReturn(newFeedInformation);
FeedInformation info = migrationFeedSource.getFeedInformation();
assertEquals(info, newFeedInformation);
}
@Test
public void ShouldGetFeedForReadFromOld() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedSource.getFeed(getFeedRequest)).thenReturn(feedResponse);
AdapterResponse<Feed> feedRead = migrationFeedSource.getFeed(getFeedRequest);
}
@Test
public void ShouldGetFeedForReadFromNew() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.NEW);
when(newFeedSource.getFeed(getFeedRequest)).thenReturn(feedResponse);
AdapterResponse<Feed> feedRead = migrationFeedSource.getFeed(getFeedRequest);
}
@Test
public void ShouldGetEntryForReadFromOld() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedSource.getEntry(getEntryRequest)).thenReturn(entryResponse);
AdapterResponse<Entry> entryRead = migrationFeedSource.getEntry(getEntryRequest);
}
@Test
public void ShouldGetEntryForReadFromNew() throws Exception {
migrationFeedSource.setReadFrom(MigrationReadFrom.NEW);
when(newFeedSource.getEntry(getEntryRequest)).thenReturn(entryResponse);
AdapterResponse<Entry> entryRead = migrationFeedSource.getEntry(getEntryRequest);
}
@Test(expected=UnsupportedOperationException.class)
public void shouldSetParameters() throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("test1", "test2");
migrationFeedSource.setParameters(map);
}
}
}