fr.keemto.provider.twitter.TwitterFetcherTest.java Source code

Java tutorial

Introduction

Here is the source code for fr.keemto.provider.twitter.TwitterFetcherTest.java

Source

/*
 * Copyright (C) 2010 Benoit Guerout <bguerout at gmail dot com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package fr.keemto.provider.twitter;

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.twitter.api.TimelineOperations;
import org.springframework.social.twitter.api.Tweet;
import org.springframework.social.twitter.api.Twitter;

import java.util.Date;
import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
import static org.mockito.Mockito.*;

public class TwitterFetcherTest {

    private TwitterFetcher fetcher;
    private Twitter api;
    private TimelineOperations timelineOperations;

    private Tweet tweet1;
    private Tweet tweet2;
    private long since;
    private Connection connection;

    @Before
    public void initBeforeTest() throws Exception {

        api = mock(Twitter.class);
        timelineOperations = mock(TimelineOperations.class);
        fetcher = new TwitterFetcher();

        tweet1 = createTweet("a tweet", System.currentTimeMillis());
        tweet2 = createTweet("a second tweet", System.currentTimeMillis() + 10);
        since = 0;

        connection = mock(Connection.class);
        when(connection.getApi()).thenReturn(api);
        when(api.timelineOperations()).thenReturn(timelineOperations);
        when(timelineOperations.getUserTimeline()).thenReturn(Lists.newArrayList(tweet1, tweet2));

    }

    private Tweet createTweet(String message, long creationDate) {
        return new Tweet(1, message, new Date(creationDate), "mypseudo", "profileImageUrl", new Long(2), 2, "FR",
                "source");
    }

    @Test
    public void shouldFetchEventsUsingUserTimeline() {
        fetcher.fetch(connection, since);

        verify(api).timelineOperations();
        verify(timelineOperations).getUserTimeline();
    }

    @Test
    public void shouldConvertTweetsToEvents() {
        List<EventData> datas = fetcher.fetch(connection, since);

        assertThat(datas.size(), equalTo(2));

        EventData data = datas.get(0);
        assertThat(data.getTimestamp(), equalTo(tweet1.getCreatedAt().getTime()));
        assertThat(data.getMessage(), equalTo("a tweet"));

        data = datas.get(1);
        assertThat(data.getMessage(), equalTo("a second tweet"));
    }

    @Test
    public void shouldIgnoreTweetsBeforeLastFetchedEventTime() {

        long tweet1CreationTime = tweet1.getCreatedAt().getTime();

        List<EventData> datas = fetcher.fetch(connection, tweet1CreationTime);

        assertThat(datas.size(), greaterThan(0));
        for (EventData data : datas) {
            assertThat(data.getTimestamp(), greaterThan(tweet1CreationTime));
        }
    }

}