package org.atomhopper.postgres.adapter; import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.UUID; import static junit.framework.Assert.assertEquals; import org.apache.abdera.Abdera; import org.apache.abdera.model.Entry; import org.apache.abdera.parser.stax.FOMEntry; import org.atomhopper.adapter.request.adapter.DeleteEntryRequest; import org.atomhopper.adapter.request.adapter.PostEntryRequest; import org.atomhopper.adapter.request.adapter.PutEntryRequest; import org.atomhopper.postgres.model.PersistedEntry; import org.atomhopper.postgres.query.EntryRowMapper; 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.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.JdbcTemplate; import org.atomhopper.adapter.PublicationException; @RunWith(Enclosed.class) public class PostgresFeedPublisherTest { public static class WhenPostingEntries { private PutEntryRequest putEntryRequest; private DeleteEntryRequest deleteEntryRequest; private PostgresFeedPublisher postgresFeedPublisher; private PostEntryRequest postEntryRequest; private JdbcTemplate jdbcTemplate; 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 PersistedEntry persistedEntry; private List<PersistedEntry> entryList; @Before public void setUp() throws Exception { putEntryRequest = mock(PutEntryRequest.class); deleteEntryRequest = mock(DeleteEntryRequest.class); jdbcTemplate = mock(JdbcTemplate.class); postgresFeedPublisher = new PostgresFeedPublisher(); postgresFeedPublisher.setJdbcTemplate(jdbcTemplate); postEntryRequest = mock(PostEntryRequest.class); when(postEntryRequest.getEntry()).thenReturn(entry()); when(postEntryRequest.getFeedName()).thenReturn("namespace/feed"); persistedEntry = new PersistedEntry(); persistedEntry.setFeed(FEED_NAME); persistedEntry.setEntryId(MARKER_ID); persistedEntry.setEntryBody(ENTRY_BODY); entryList = new ArrayList<PersistedEntry>(); entryList.add(persistedEntry); } @Test public void shouldReturnHTTPCreated() throws Exception { AdapterResponse<Entry> adapterResponse = postgresFeedPublisher.postEntry(postEntryRequest); assertEquals("Should return HTTP 201 (Created)", HttpStatus.CREATED, adapterResponse.getResponseStatus()); } @Test public void shouldThrowErrorForEntryIdAlreadyExists() throws Exception { postgresFeedPublisher.setAllowOverrideId(true); when(jdbcTemplate.query(any(String.class), any(Object[].class), any(EntryRowMapper.class))).thenReturn( entryList); AdapterResponse<Entry> adapterResponse = postgresFeedPublisher.postEntry(postEntryRequest); assertEquals("Should return HTTP 409 (Conflict)", HttpStatus.CONFLICT, adapterResponse.getResponseStatus()); } @Test(expected = UnsupportedOperationException.class) public void shouldPutEntry() throws Exception { postgresFeedPublisher.putEntry(putEntryRequest); } @Test(expected = UnsupportedOperationException.class) public void shouldDeleteEntry() throws Exception { postgresFeedPublisher.deleteEntry(deleteEntryRequest); } @Test(expected = UnsupportedOperationException.class) public void shouldSetParameters() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("test1", "test2"); postgresFeedPublisher.setParameters(map); } public Entry entry() { final FOMEntry entry = new FOMEntry(); entry.setId(UUID.randomUUID().toString()); entry.setContent("testing"); entry.addCategory("category"); return entry; } } }