package fr.keemto.provider.yammer; import com.google.common.collect.Lists; import fr.keemto.provider.social.EventData; import org.junit.Before; import org.junit.Test; import org.springframework.social.connect.Connection; import org.springframework.social.yammer.api.MessageInfo; import org.springframework.social.yammer.api.MessageOperations; import org.springframework.social.yammer.api.YammerMessage; import org.springframework.social.yammer.api.impl.YammerTemplate; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class YammerFetcherTest { private YammerFetcher fetcher; private MessageOperations messageOperations; private Connection connection; @Before public void initBeforeTest() throws Exception { YammerTemplate api = mock(YammerTemplate.class); messageOperations = mock(MessageOperations.class); fetcher = new YammerFetcher(); connection = mock(Connection.class); when(connection.getApi()).thenReturn(api); when(api.messageOperations()).thenReturn(messageOperations); } @Test public void shouldRetrieveAUniqueSentMessage() throws Exception { long lastFetchedEventTime = new Date().getTime(); Date messageCreationDate = new Date(lastFetchedEventTime + 1000); YammerMessage message = createYammerMessage("foo", "foo-parsed", messageCreationDate); MessageInfo messageInfo = new MessageInfo(Lists.newArrayList(message), null); when(messageOperations.getMessagesSent(0, 0, null, 0)).thenReturn(messageInfo); List<EventData> datas = fetcher.fetch(connection, lastFetchedEventTime); assertThat(datas, notNullValue()); assertThat(datas.isEmpty(), is(false)); EventData data = datas.get(0); assertThat(data.getMessage(), equalTo("foo")); assertThat(data.getTimestamp(), equalTo(messageCreationDate.getTime())); assertThat(data.getProviderId(), equalTo("yammer")); } @Test public void shouldRetrieveAllSentMessages() throws Exception { long lastFetchedEventTime = new Date().getTime(); Date messageCreationDate = new Date(lastFetchedEventTime + 1000); YammerMessage message = createYammerMessage("foo", "foo-parsed", messageCreationDate); YammerMessage message2 = createYammerMessage("bar", "bar-parsed", messageCreationDate); MessageInfo messageInfo = new MessageInfo(Lists.newArrayList(message, message2), null); when(messageOperations.getMessagesSent(0, 0, null, 0)).thenReturn(messageInfo); List<EventData> datas = fetcher.fetch(connection, lastFetchedEventTime); assertThat(datas, notNullValue()); assertThat(datas.size(), equalTo(2)); assertThat(datas.get(0).getMessage(), equalTo("foo")); assertThat(datas.get(1).getMessage(), equalTo("bar")); } @Test public void shouldIgnoreMessagesBeforeLastFetchedEventTime() throws Exception { long lastFetchedEventTime = new Date().getTime(); YammerMessage acceptedMessage = createYammerMessage("accepted", "accepted-parsed", new Date(lastFetchedEventTime + 1000)); YammerMessage ignoredMessage = createYammerMessage("ignored", "ignored-parsed", new Date(lastFetchedEventTime - 5000)); MessageInfo messageInfo = new MessageInfo(Lists.newArrayList(acceptedMessage, ignoredMessage), null); when(messageOperations.getMessagesSent(0, 0, null, 0)).thenReturn(messageInfo); List<EventData> datas = fetcher.fetch(connection, lastFetchedEventTime); assertThat(datas, notNullValue()); assertThat(datas.size(), equalTo(1)); } private YammerMessage createYammerMessage(String message, String messageParsed, Date messageCreationDate) { YammerMessage.Body body = new YammerMessage.Body(message, messageParsed, "rich", new ArrayList<String>()); return new YammerMessage(100, body, null, 0, null, 0, null, null, 0L, 0L, null, null, false, null, messageCreationDate, false, null, null, 0); } }