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.apache.abdera.model.Entry;
import org.apache.abdera.parser.stax.FOMEntry;
import org.atomhopper.adapter.FeedPublisher;
import org.atomhopper.adapter.ResponseBuilder;
import org.atomhopper.adapter.request.adapter.DeleteEntryRequest;
import org.atomhopper.adapter.request.adapter.PostEntryRequest;
import org.atomhopper.adapter.request.adapter.PutEntryRequest;
import org.atomhopper.migration.domain.MigrationReadFrom;
import org.atomhopper.migration.domain.MigrationWriteTo;
import org.atomhopper.response.AdapterResponse;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.springframework.http.HttpStatus;
@RunWith(Enclosed.class)
public class MigrationFeedPublisherTest {
public static class WhenPostingEntries {
private PutEntryRequest putEntryRequest;
private DeleteEntryRequest deleteEntryRequest;
private MigrationFeedPublisher migrationFeedPublisher;
private PostEntryRequest postEntryRequest;
private FeedPublisher oldFeedPublisher;
private FeedPublisher newFeedPublisher;
@Before
public void setUp() throws Exception {
putEntryRequest = mock(PutEntryRequest.class);
deleteEntryRequest = mock(DeleteEntryRequest.class);
oldFeedPublisher = mock(FeedPublisher.class);
newFeedPublisher = mock(FeedPublisher.class);
migrationFeedPublisher = new MigrationFeedPublisher();
migrationFeedPublisher.setNewFeedPublisher(newFeedPublisher);
migrationFeedPublisher.setOldFeedPublisher(oldFeedPublisher);
migrationFeedPublisher.setAllowOverrideDate(false);
migrationFeedPublisher.setAllowOverrideId(false);
AdapterResponse<Entry> response = ResponseBuilder.created(entry());
postEntryRequest = mock(PostEntryRequest.class);
when(postEntryRequest.getEntry()).thenReturn(entry());
when(postEntryRequest.getFeedName()).thenReturn("namespace/feed");
}
@Test
public void shouldReturnCreatedForWriteToOld() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.OLD);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test
public void shouldReturnCreatedForWriteToNew() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.NEW);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.NEW);
when(newFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test
public void shouldReturnCreatedForWriteToBothReadFromOld() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.BOTH);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
when(newFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test
public void shouldReturnCreatedForWriteToBothReadFromNew() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.BOTH);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.NEW);
when(oldFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
when(newFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test
public void shouldReturnCreatedForWriteToBothReadFromOldThrowError() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.BOTH);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.OLD);
when(oldFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
when(newFeedPublisher.postEntry(postEntryRequest)).thenThrow(new RuntimeException());
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test
public void shouldReturnCreatedForWriteToBothReadFromNewThrowError() throws Exception {
migrationFeedPublisher.setWriteTo(MigrationWriteTo.BOTH);
migrationFeedPublisher.setReadFrom(MigrationReadFrom.NEW);
when(oldFeedPublisher.postEntry(postEntryRequest)).thenThrow(new RuntimeException());
when(newFeedPublisher.postEntry(postEntryRequest)).thenReturn(ResponseBuilder.created(entry()));
AdapterResponse<Entry> adapterResponse = migrationFeedPublisher.postEntry(postEntryRequest);
assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus());
}
@Test(expected = UnsupportedOperationException.class)
public void shouldPutEntry() throws Exception {
migrationFeedPublisher.putEntry(putEntryRequest);
}
@Test(expected = UnsupportedOperationException.class)
public void shouldDeleteEntry() throws Exception {
migrationFeedPublisher.deleteEntry(deleteEntryRequest);
}
@Test(expected = UnsupportedOperationException.class)
public void shouldSetParameters() throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("test1", "test2");
migrationFeedPublisher.setParameters(map);
}
public Entry entry() {
final FOMEntry entry = new FOMEntry();
entry.setId(UUID.randomUUID().toString());
entry.setContent("testing");
entry.addCategory("category");
return entry;
}
}
}