migrated Twitter support to use Spring Social
This commit is contained in:
committed by
Mark Fisher
parent
94f213fc15
commit
e5ce83329f
@@ -17,7 +17,9 @@
|
||||
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd http://www.springframework.org/schema/integration/twitter http://www.springframework.org/schema/integration/twitter/spring-integration-twitter.xsd">
|
||||
|
||||
|
||||
<beans:bean id="twitter" class="org.springframework.integration.twitter.config.TestReceivingMessageSourceParserTests.TwitterTemplateFactoryBean"/>
|
||||
<beans:bean id="twitter" class="org.mockito.Mockito" factory-method="mock">
|
||||
<beans:constructor-arg value="org.springframework.social.twitter.api.Twitter"/>
|
||||
</beans:bean>
|
||||
|
||||
<channel id="inbound_mentions"/>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,53 +16,41 @@
|
||||
|
||||
package org.springframework.integration.twitter.config;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.twitter.inbound.DirectMessageReceivingMessageSource;
|
||||
import org.springframework.integration.twitter.inbound.MentionsReceivingMessageSource;
|
||||
import org.springframework.integration.twitter.inbound.TimelineReceivingMessageSource;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*/
|
||||
public class TestReceivingMessageSourceParserTests {
|
||||
|
||||
@org.junit.Test public void test() { }
|
||||
|
||||
|
||||
// NO LONGER RELEVANT...
|
||||
// @Test
|
||||
// public void testRecievingAdapterConfigurationAutoStartup(){
|
||||
// ApplicationContext ac = new ClassPathXmlApplicationContext("TestReceivingMessageSourceParser-context.xml", this.getClass());
|
||||
// SourcePollingChannelAdapter spca = ac.getBean("mentionAdapter", SourcePollingChannelAdapter.class);
|
||||
// SmartLifecycle ms = TestUtils.getPropertyValue(spca, "source", SmartLifecycle.class);
|
||||
// assertFalse(ms.isAutoStartup());
|
||||
//
|
||||
// spca = ac.getBean("dmAdapter", SourcePollingChannelAdapter.class);
|
||||
// ms = TestUtils.getPropertyValue(spca, "source", SmartLifecycle.class);
|
||||
// assertFalse(ms.isAutoStartup());
|
||||
//
|
||||
// spca = ac.getBean("updateAdapter", SourcePollingChannelAdapter.class);
|
||||
// ms = TestUtils.getPropertyValue(spca, "source", SmartLifecycle.class);
|
||||
// assertFalse(ms.isAutoStartup());
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testReceivingAdapterConfigurationAutoStartup(){
|
||||
ApplicationContext ac = new ClassPathXmlApplicationContext("TestReceivingMessageSourceParser-context.xml", this.getClass());
|
||||
SourcePollingChannelAdapter spca = ac.getBean("mentionAdapter", SourcePollingChannelAdapter.class);
|
||||
MentionsReceivingMessageSource ms = TestUtils.getPropertyValue(spca, "source", MentionsReceivingMessageSource.class);
|
||||
assertNotNull(ms);
|
||||
|
||||
public static class TwitterTemplateFactoryBean implements FactoryBean<TwitterOperations>{
|
||||
spca = ac.getBean("dmAdapter", SourcePollingChannelAdapter.class);
|
||||
DirectMessageReceivingMessageSource dms = TestUtils.getPropertyValue(spca, "source", DirectMessageReceivingMessageSource.class);
|
||||
assertNotNull(dms);
|
||||
|
||||
public TwitterOperations getObject() throws Exception {
|
||||
TwitterOperations oper = mock(TwitterOperations.class);
|
||||
when(oper.getProfileId()).thenReturn("kermit");
|
||||
return oper;
|
||||
}
|
||||
|
||||
public Class<?> getObjectType() {
|
||||
return TwitterOperations.class;
|
||||
}
|
||||
|
||||
public boolean isSingleton() {
|
||||
return true;
|
||||
}
|
||||
spca = ac.getBean("updateAdapter", SourcePollingChannelAdapter.class);
|
||||
|
||||
spca = ac.getBean("updateAdapter", SourcePollingChannelAdapter.class);
|
||||
TimelineReceivingMessageSource tms = TestUtils.getPropertyValue(spca, "source", TimelineReceivingMessageSource.class);
|
||||
assertNotNull(tms);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,18 +16,17 @@
|
||||
|
||||
package org.springframework.integration.twitter.config;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.twitter.core.Twitter4jTemplate;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
import org.springframework.integration.twitter.inbound.SearchReceivingMessageSource;
|
||||
import org.springframework.social.twitter.api.Twitter;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
@@ -35,23 +34,12 @@ import org.springframework.integration.twitter.inbound.SearchReceivingMessageSou
|
||||
public class TestSearchReceivingMessageSourceParserTests {
|
||||
|
||||
@Test
|
||||
@Ignore // because userOpoeration.getProfile() throws exception where it doesn't have to since its a search
|
||||
public void testSearchReceivingDefaultTemplate(){
|
||||
ApplicationContext ac = new ClassPathXmlApplicationContext("TestSearchReceivingMessageSourceParser-context.xml", this.getClass());
|
||||
SourcePollingChannelAdapter spca = ac.getBean("searchAdapter", SourcePollingChannelAdapter.class);
|
||||
SearchReceivingMessageSource ms = (SearchReceivingMessageSource) TestUtils.getPropertyValue(spca, "source");
|
||||
//assertFalse(ms.isAutoStartup());
|
||||
Twitter4jTemplate template = (Twitter4jTemplate) TestUtils.getPropertyValue(ms, "twitterOperations");
|
||||
assertFalse(template.getUnderlyingTwitter().isOAuthEnabled()); // verify anonymous Twitter
|
||||
Twitter template = (Twitter) TestUtils.getPropertyValue(ms, "twitter");
|
||||
assertNotNull(template);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSearchReceivingCustomTemplate(){
|
||||
ApplicationContext ac = new ClassPathXmlApplicationContext("TestSearchReceivingMessageSourceParser-context.xml", this.getClass());
|
||||
SourcePollingChannelAdapter spca = ac.getBean("searchAdapterWithTemplate", SourcePollingChannelAdapter.class);
|
||||
SearchReceivingMessageSource ms = (SearchReceivingMessageSource) TestUtils.getPropertyValue(spca, "source");
|
||||
//assertFalse(ms.isAutoStartup());
|
||||
TwitterOperations template = (TwitterOperations) TestUtils.getPropertyValue(ms, "twitterOperations");
|
||||
assertEquals(ac.getBean("twitter"), template);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
http://www.springframework.org/schema/integration/twitter http://www.springframework.org/schema/integration/twitter/spring-integration-twitter-2.0.xsd">
|
||||
|
||||
|
||||
<beans:bean id="twitter" class="org.springframework.integration.twitter.core.Twitter4jTemplate"/>
|
||||
<beans:bean id="twitter" class="org.springframework.social.twitter.api.impl.TwitterTemplate"/>
|
||||
|
||||
<channel id="inbound_mentions"/>
|
||||
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
*
|
||||
* 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 org.springframework.integration.twitter.core;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
|
||||
import twitter4j.Paging;
|
||||
import twitter4j.Query;
|
||||
import twitter4j.QueryResult;
|
||||
import twitter4j.StatusUpdate;
|
||||
import twitter4j.Twitter;
|
||||
import twitter4j.http.AccessToken;
|
||||
import twitter4j.http.Authorization;
|
||||
import twitter4j.http.OAuthAuthorization;
|
||||
|
||||
/**
|
||||
* Validates that all calls are delegated properly top Twitter
|
||||
*
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
*/
|
||||
public class Twitter4jTemplateTests {
|
||||
Twitter4jTemplate template;
|
||||
Twitter twitter;
|
||||
|
||||
@Before
|
||||
public void prepare() throws Exception{
|
||||
template = new Twitter4jTemplate();
|
||||
Field twitterField = Twitter4jTemplate.class.getDeclaredField("twitter");
|
||||
twitterField.setAccessible(true);
|
||||
twitter = mock(Twitter.class);
|
||||
twitterField.set(template, twitter);
|
||||
}
|
||||
@Test
|
||||
public void testOauthConstructor() throws Exception{
|
||||
template = new Twitter4jTemplate("a", "b", "1234-c", "d");
|
||||
Twitter twitter = (Twitter) TestUtils.getPropertyValue(template, "twitter");
|
||||
Authorization auth = twitter.getAuthorization();
|
||||
assertTrue(twitter.getAuthorization() instanceof OAuthAuthorization);
|
||||
AccessToken accessToken = ((OAuthAuthorization)auth).getOAuthAccessToken();
|
||||
assertEquals("1234-c", accessToken.getToken());
|
||||
assertEquals("d", accessToken.getTokenSecret());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProfileId() throws Exception{
|
||||
when(twitter.getScreenName()).thenReturn("kermit");
|
||||
when(twitter.isOAuthEnabled()).thenReturn(true);
|
||||
assertEquals("kermit", template.getProfileId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetDirectMessages() throws Exception{
|
||||
template.getDirectMessages();
|
||||
template.getDirectMessages(123);
|
||||
verify(twitter, times(1)).getDirectMessages();
|
||||
verify(twitter, times(1)).getDirectMessages(Mockito.any(Paging.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetMentions() throws Exception{
|
||||
template.getMentions();
|
||||
template.getMentions(123);
|
||||
verify(twitter, times(1)).getMentions();
|
||||
verify(twitter, times(1)).getMentions(Mockito.any(Paging.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetFriendsTimeline() throws Exception{
|
||||
template.getTimeline();
|
||||
template.getTimeline(123);
|
||||
verify(twitter, times(1)).getHomeTimeline();
|
||||
verify(twitter, times(1)).getHomeTimeline(Mockito.any(Paging.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendDirectMessage() throws Exception{
|
||||
template.sendDirectMessage("kermit", "hello");
|
||||
template.sendDirectMessage(1, "hello");
|
||||
verify(twitter, times(1)).sendDirectMessage("kermit", "hello");
|
||||
verify(twitter, times(1)).sendDirectMessage(1, "hello");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateStatus() throws Exception{
|
||||
template.updateStatus("writing twitter test");
|
||||
verify(twitter, times(1)).updateStatus(Mockito.any(StatusUpdate.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSearch() throws Exception{
|
||||
// set up test
|
||||
QueryResult result = mock(QueryResult.class);
|
||||
List<twitter4j.Tweet> t4jTweets = new ArrayList<twitter4j.Tweet>();
|
||||
t4jTweets.add(mock(twitter4j.Tweet.class));
|
||||
t4jTweets.add(mock(twitter4j.Tweet.class));
|
||||
t4jTweets.add(mock(twitter4j.Tweet.class));
|
||||
|
||||
when(result.getTweets()).thenReturn(t4jTweets);
|
||||
|
||||
when(twitter.search(Mockito.any(Query.class))).thenReturn(result);
|
||||
// end setup test
|
||||
|
||||
SearchResults results = template.search("#s2gx");
|
||||
List<Tweet> tweets = results.getTweets();
|
||||
assertNotNull(tweets);
|
||||
assertEquals(3, tweets.size());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors
|
||||
*
|
||||
* 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 org.springframework.integration.twitter.core;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static junit.framework.Assert.fail;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import twitter4j.TwitterException;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
*/
|
||||
public class TwitterOperationExceptionTests {
|
||||
|
||||
@Test
|
||||
public void test401(){
|
||||
// will result in exception since a,b,c,d are invalid credentials
|
||||
Twitter4jTemplate template = new Twitter4jTemplate("a", "b", "1234-c", "d");
|
||||
try {
|
||||
template.getProfileId();
|
||||
fail();
|
||||
} catch (Exception e) {
|
||||
assertTrue(e instanceof TwitterOperationException);
|
||||
assertEquals(401, ((TwitterOperationException)e).getTwitterStatusCode());
|
||||
}
|
||||
}
|
||||
@Test
|
||||
public void testWithNull(){
|
||||
try {
|
||||
throw new TwitterOperationException();
|
||||
} catch (Exception e) {
|
||||
TwitterOperationException tex = (TwitterOperationException) e;
|
||||
assertFalse(StringUtils.hasText(tex.getMessage()));
|
||||
assertEquals(-1, tex.getTwitterStatusCode());
|
||||
}
|
||||
}
|
||||
@Test
|
||||
public void testWithTwitterException(){
|
||||
try {
|
||||
throw new TwitterOperationException(new TwitterException("foo"));
|
||||
} catch (Exception e) {
|
||||
TwitterOperationException tex = (TwitterOperationException) e;
|
||||
assertTrue(StringUtils.hasText(tex.getMessage()));
|
||||
assertTrue(tex.getMessage().contains("foo"));
|
||||
assertEquals(-1, tex.getTwitterStatusCode());
|
||||
}
|
||||
}
|
||||
@Test
|
||||
public void testWithDescription(){
|
||||
try {
|
||||
throw new TwitterOperationException("foo");
|
||||
} catch (Exception e) {
|
||||
TwitterOperationException tex = (TwitterOperationException) e;
|
||||
assertTrue(StringUtils.hasText(tex.getMessage()));
|
||||
assertTrue(tex.getMessage().contains("foo"));
|
||||
assertEquals(-1, tex.getTwitterStatusCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,41 +18,40 @@
|
||||
|
||||
<message-history/>
|
||||
|
||||
<context:property-placeholder
|
||||
location="classpath:twitter.receiver.properties"
|
||||
ignore-unresolvable="true"/>
|
||||
|
||||
<context:property-placeholder location="classpath:sample.properties"/>
|
||||
|
||||
<channel id="inbound_dm"/>
|
||||
<channel id="inbound_mentions"/>
|
||||
<channel id="inbound_updates"/>
|
||||
<channel id="inbound_search"/>
|
||||
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.integration.twitter.core.Twitter4jTemplate">
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerKey}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerSecret}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.accessToken}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.accessTokenSecret}"/>
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.social.twitter.api.impl.TwitterTemplate">
|
||||
<beans:constructor-arg value="${z_oleg.oauth.consumerKey}"/>
|
||||
<beans:constructor-arg value="${z_oleg.oauth.consumerSecret}"/>
|
||||
<beans:constructor-arg value="${z_oleg.oauth.accessToken}"/>
|
||||
<beans:constructor-arg value="${z_oleg.oauth.accessTokenSecret}"/>
|
||||
</beans:bean>
|
||||
|
||||
<twitter:mentions-inbound-channel-adapter twitter-template="twitterTemplate" channel="inbound_mentions">
|
||||
<poller fixed-rate="5000" max-messages-per-poll="3"/>
|
||||
</twitter:mentions-inbound-channel-adapter>
|
||||
<service-activator input-channel="inbound_mentions" ref="twitterAnnouncer" method="mention"/>
|
||||
|
||||
<!-- <twitter:dm-inbound-channel-adapter twitter-template="twitterTemplate" channel="inbound_dm">-->
|
||||
<!-- <poller fixed-rate="5000" max-messages-per-poll="3"/>-->
|
||||
<!-- </twitter:dm-inbound-channel-adapter>-->
|
||||
<!-- <service-activator input-channel="inbound_dm" ref="twitterAnnouncer" method="dm"/>-->
|
||||
<!-- <twitter:mentions-inbound-channel-adapter twitter-template="twitterTemplate" channel="inbound_mentions"> -->
|
||||
<!-- <poller fixed-rate="5000" max-messages-per-poll="-1"/> -->
|
||||
<!-- </twitter:mentions-inbound-channel-adapter> -->
|
||||
|
||||
<!-- <twitter:search-inbound-channel-adapter id="searchAdapter" channel="inbound_search" query="#springintegration">-->
|
||||
<!-- <poller fixed-rate="5000" max-messages-per-poll="5"/>-->
|
||||
<!-- </twitter:search-inbound-channel-adapter>-->
|
||||
<!-- <service-activator input-channel="inbound_search" ref="twitterAnnouncer" method="search"/>-->
|
||||
<!-- <service-activator input-channel="inbound_mentions" ref="twitterAnnouncer" method="mention"/> -->
|
||||
|
||||
<!-- <twitter:inbound-channel-adapter id="twitterInbound" twitter-template="twitterTemplate" channel="inbound_updates">-->
|
||||
<!-- <poller fixed-rate="1000" max-messages-per-poll="3"/>-->
|
||||
<!-- </twitter:inbound-channel-adapter>-->
|
||||
<!-- <service-activator input-channel="inbound_updates" ref="twitterAnnouncer" method="updates"/>-->
|
||||
<!-- <twitter:dm-inbound-channel-adapter twitter-template="twitterTemplate" channel="inbound_dm"> -->
|
||||
<!-- <poller fixed-rate="5000" max-messages-per-poll="-1"/> -->
|
||||
<!-- </twitter:dm-inbound-channel-adapter> -->
|
||||
<!-- <service-activator input-channel="inbound_dm" ref="twitterAnnouncer" method="dm"/> -->
|
||||
|
||||
<!-- <twitter:search-inbound-channel-adapter id="searchAdapter" twitter-template="twitterTemplate" channel="inbound_search" query="#springintegration"> -->
|
||||
<!-- <poller fixed-rate="5000" max-messages-per-poll="5"/> -->
|
||||
<!-- </twitter:search-inbound-channel-adapter> -->
|
||||
<!-- <service-activator input-channel="inbound_search" ref="twitterAnnouncer" method="search"/> -->
|
||||
|
||||
<twitter:inbound-channel-adapter id="twitterInbound" twitter-template="twitterTemplate" channel="inbound_updates">
|
||||
<poller fixed-rate="1000" max-messages-per-poll="3"/>
|
||||
</twitter:inbound-channel-adapter>
|
||||
<service-activator input-channel="inbound_updates" ref="twitterAnnouncer" method="updates"/>
|
||||
|
||||
<beans:bean id="twitterAnnouncer" class="org.springframework.integration.twitter.ignored.TwitterAnnouncer"/>
|
||||
</beans:beans>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
location="classpath:twitter.sender.properties"
|
||||
ignore-unresolvable="true"/>
|
||||
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.integration.twitter.core.Twitter4jTemplate">
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.social.twitter.api.impl.TwitterTemplate">
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerKey}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerSecret}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.accessToken}"/>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
location="classpath:twitter.receiver.properties"
|
||||
ignore-unresolvable="true"/>
|
||||
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.integration.twitter.core.Twitter4jTemplate">
|
||||
<beans:bean id="twitterTemplate" class="org.springframework.social.twitter.api.impl.TwitterTemplate">
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerKey}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.consumerSecret}"/>
|
||||
<beans:constructor-arg value="${twitter.oauth.accessToken}"/>
|
||||
|
||||
@@ -18,15 +18,16 @@ package org.springframework.integration.twitter.ignored;
|
||||
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.history.MessageHistory;
|
||||
import org.springframework.integration.twitter.core.Tweet;
|
||||
import org.springframework.social.twitter.api.DirectMessage;
|
||||
import org.springframework.social.twitter.api.Tweet;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class TwitterAnnouncer {
|
||||
|
||||
public void dm(Tweet directMessage) {
|
||||
public void dm(DirectMessage directMessage) {
|
||||
System.out.println("A direct message has been received from " +
|
||||
directMessage.getFromUser() + " with text " + directMessage.getText());
|
||||
directMessage.getSender().getScreenName() + " with text " + directMessage.getText());
|
||||
}
|
||||
|
||||
public void search(Message<?> search) {
|
||||
|
||||
@@ -16,197 +16,42 @@
|
||||
|
||||
package org.springframework.integration.twitter.inbound;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import java.util.Properties;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.store.PropertiesPersistingMetadataStore;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.twitter.core.Tweet;
|
||||
import org.springframework.integration.twitter.core.Twitter4jTemplate;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
|
||||
import twitter4j.DirectMessage;
|
||||
import twitter4j.Paging;
|
||||
import twitter4j.RateLimitStatus;
|
||||
import twitter4j.ResponseList;
|
||||
import twitter4j.Twitter;
|
||||
import org.springframework.social.twitter.api.DirectMessage;
|
||||
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*/
|
||||
public class DirectMessageReceivingMessageSourceTests {
|
||||
|
||||
private DirectMessage firstMessage;
|
||||
|
||||
private DirectMessage secondMessage;
|
||||
|
||||
private DirectMessage thirdMessage;
|
||||
|
||||
private DirectMessage fourthMessage;
|
||||
|
||||
private TwitterOperations twitter;
|
||||
|
||||
Twitter tw;
|
||||
|
||||
|
||||
@Before
|
||||
public void prepare() throws Exception{
|
||||
twitter = new Twitter4jTemplate();
|
||||
|
||||
firstMessage = mock(DirectMessage.class);
|
||||
when(firstMessage.getCreatedAt()).thenReturn(new Date(5555555555L));
|
||||
when(firstMessage.getId()).thenReturn( (long) 200);
|
||||
|
||||
secondMessage = mock(DirectMessage.class);
|
||||
when(secondMessage.getCreatedAt()).thenReturn(new Date(2222222222L));
|
||||
when(secondMessage.getId()).thenReturn( (long) 2000);
|
||||
|
||||
thirdMessage = mock(DirectMessage.class);
|
||||
when(thirdMessage.getCreatedAt()).thenReturn(new Date(66666666666L));
|
||||
when(thirdMessage.getId()).thenReturn( (long) 3000);
|
||||
|
||||
fourthMessage = mock(DirectMessage.class);
|
||||
when(fourthMessage.getCreatedAt()).thenReturn(new Date(77777777777L));
|
||||
when(fourthMessage.getId()).thenReturn( (long) 4000);
|
||||
|
||||
tw = mock(Twitter.class);
|
||||
Field twField = Twitter4jTemplate.class.getDeclaredField("twitter");
|
||||
twField.setAccessible(true);
|
||||
twField.set(twitter, tw);
|
||||
when(tw.getScreenName()).thenReturn("kermit");
|
||||
|
||||
twitter = spy(twitter);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSuccessfullInitialization() throws Exception{
|
||||
when(tw.isOAuthEnabled()).thenReturn(true);
|
||||
DirectMessageReceivingMessageSource source = new DirectMessageReceivingMessageSource(twitter);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
assertEquals("twitter:dm-inbound-channel-adapter.twitterEndpoint.kermit", TestUtils.getPropertyValue(source, "metadataKey"));
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
@Test
|
||||
public void testSuccessfullInitializationWithMessages() throws Exception{
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
|
||||
DirectMessageReceivingMessageSource source = new DirectMessageReceivingMessageSource(twitter);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
Message<Tweet> msg = (Message<Tweet>) source.receive();
|
||||
assertNotNull(msg);
|
||||
|
||||
Tweet message = msg.getPayload();
|
||||
assertEquals(2000, message.getId());
|
||||
Thread.sleep(1000);
|
||||
verify(twitter, times(1)).getDirectMessages();
|
||||
}
|
||||
/**
|
||||
* This test will validate that last status is initialized from the metadatastore
|
||||
* @throws Exception
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Test
|
||||
public void testSuccessfullInitializationWithMessagesWithPersistentMetadata() throws Exception{
|
||||
String fileName = System.getProperty("java.io.tmpdir") + "/spring-integration/metadata-store.properties";
|
||||
File file = new File(fileName);
|
||||
if (file.exists()){
|
||||
file.delete();
|
||||
}
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
PropertiesPersistingMetadataStore store = new PropertiesPersistingMetadataStore();
|
||||
store.afterPropertiesSet();
|
||||
bf.registerSingleton(IntegrationContextUtils.METADATA_STORE_BEAN_NAME, store);
|
||||
DirectMessageReceivingMessageSource source = new DirectMessageReceivingMessageSource(twitter);
|
||||
source.setBeanFactory(bf);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
Message msg = source.receive();
|
||||
assertNotNull(msg);
|
||||
Tweet tweet = (Tweet) msg.getPayload();
|
||||
|
||||
|
||||
// Resuming
|
||||
this.prepare();
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
store.destroy();
|
||||
bf = new DefaultListableBeanFactory();
|
||||
store = new PropertiesPersistingMetadataStore();
|
||||
store.afterPropertiesSet();
|
||||
bf.registerSingleton(IntegrationContextUtils.METADATA_STORE_BEAN_NAME, store);
|
||||
source = new DirectMessageReceivingMessageSource(twitter);
|
||||
source.setBeanFactory(bf);
|
||||
scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
msg = source.receive();
|
||||
tweet = (Tweet) msg.getPayload();
|
||||
assertEquals(3000, tweet.getId());
|
||||
msg = source.receive();
|
||||
tweet = (Tweet) msg.getPayload();
|
||||
assertEquals(4000, tweet.getId());
|
||||
file.delete();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void setUpMockScenarioForMessagePolling() throws Exception{
|
||||
RateLimitStatus rateLimitStatus = mock(RateLimitStatus.class);
|
||||
when(tw.isOAuthEnabled()).thenReturn(true);
|
||||
when(tw.getRateLimitStatus()).thenReturn(rateLimitStatus);
|
||||
when(rateLimitStatus.getSecondsUntilReset()).thenReturn(1000);
|
||||
when(rateLimitStatus.getRemainingHits()).thenReturn(1000);
|
||||
|
||||
SampleResoponceList testMessages = new SampleResoponceList();
|
||||
testMessages.add(firstMessage);
|
||||
testMessages.add(secondMessage);
|
||||
when(tw.getDirectMessages()).thenReturn(testMessages);
|
||||
|
||||
testMessages = new SampleResoponceList();
|
||||
testMessages.add(thirdMessage);
|
||||
testMessages.add(fourthMessage);
|
||||
when(tw.getDirectMessages(Mockito.any(Paging.class))).thenReturn(testMessages);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "serial" })
|
||||
public static class SampleResoponceList extends ArrayList implements ResponseList {
|
||||
|
||||
public RateLimitStatus getRateLimitStatus() {
|
||||
return mock(RateLimitStatus.class);
|
||||
@Test @Ignore
|
||||
public void demoReceiveDm() throws Exception{
|
||||
PropertiesFactoryBean pf = new PropertiesFactoryBean();
|
||||
pf.setLocation(new ClassPathResource("sample.properties"));
|
||||
pf.afterPropertiesSet();
|
||||
Properties prop = pf.getObject();
|
||||
System.out.println(prop);
|
||||
TwitterTemplate template = new TwitterTemplate(prop.getProperty("z_oleg.oauth.consumerKey"),
|
||||
prop.getProperty("z_oleg.oauth.consumerSecret"),
|
||||
prop.getProperty("z_oleg.oauth.accessToken"),
|
||||
prop.getProperty("z_oleg.oauth.accessTokenSecret"));
|
||||
DirectMessageReceivingMessageSource tSource = new DirectMessageReceivingMessageSource(template);
|
||||
tSource.afterPropertiesSet();
|
||||
for (int i = 0; i < 50; i++) {
|
||||
Message<DirectMessage> message = (Message<DirectMessage>) tSource.receive();
|
||||
if (message != null){
|
||||
DirectMessage tweet = message.getPayload();
|
||||
System.out.println(tweet.getSender().getScreenName() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
|
||||
}
|
||||
}
|
||||
|
||||
public RateLimitStatus getFeatureSpecificRateLimitStatus() {
|
||||
return mock(RateLimitStatus.class);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,17 +16,15 @@
|
||||
|
||||
package org.springframework.integration.twitter.inbound;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessagingException;
|
||||
import org.springframework.integration.channel.DirectChannel;
|
||||
import org.springframework.integration.core.MessageHandler;
|
||||
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
|
||||
import org.springframework.integration.twitter.core.Tweet;
|
||||
import org.springframework.integration.twitter.core.Twitter4jTemplate;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
import org.springframework.social.twitter.api.Tweet;
|
||||
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||
|
||||
|
||||
/**
|
||||
@@ -34,37 +32,28 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
*/
|
||||
public class SearchReceivingMessageSourceTests {
|
||||
|
||||
/**
|
||||
* THis test is a sample test and wil require connecting to a real Twitter
|
||||
* however no OAuth is required sincxe uts a search, so simply uncomment and run
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
@Ignore
|
||||
public void testSearchReceiving() throws Exception{
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
bf.registerSingleton("taskScheduler", scheduler);
|
||||
SearchReceivingMessageSource ms = new SearchReceivingMessageSource(new Twitter4jTemplate());
|
||||
DirectChannel channel = new DirectChannel();
|
||||
channel.subscribe(new MessageHandler() {
|
||||
public void handleMessage(Message<?> message) throws MessagingException {
|
||||
System.out.println("Message: " + ((Tweet)message.getPayload()).getCreatedAt() + " - " + ((Tweet)message.getPayload()).getText());
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test @Ignore
|
||||
public void demoReceiveSearchResults() throws Exception{
|
||||
PropertiesFactoryBean pf = new PropertiesFactoryBean();
|
||||
pf.setLocation(new ClassPathResource("sample.properties"));
|
||||
pf.afterPropertiesSet();
|
||||
Properties prop = pf.getObject();
|
||||
System.out.println(prop);
|
||||
TwitterTemplate template = new TwitterTemplate(prop.getProperty("z_oleg.oauth.consumerKey"),
|
||||
prop.getProperty("z_oleg.oauth.consumerSecret"),
|
||||
prop.getProperty("z_oleg.oauth.accessToken"),
|
||||
prop.getProperty("z_oleg.oauth.accessTokenSecret"));
|
||||
SearchReceivingMessageSource tSource = new SearchReceivingMessageSource(template);
|
||||
tSource.setQuery("#springsocial");
|
||||
tSource.afterPropertiesSet();
|
||||
for (int i = 0; i < 50; i++) {
|
||||
Message<Tweet> message = (Message<Tweet>) tSource.receive();
|
||||
if (message != null){
|
||||
Tweet tweet = message.getPayload();
|
||||
System.out.println(tweet.getFromUser() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
|
||||
}
|
||||
});
|
||||
SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter();
|
||||
adapter.setSource(ms);
|
||||
adapter.setBeanFactory(bf);
|
||||
adapter.setOutputChannel(channel);
|
||||
adapter.afterPropertiesSet();
|
||||
adapter.start();
|
||||
ms.setBeanFactory(bf);
|
||||
ms.setQuery("#springintegration");
|
||||
//ms.setTaskScheduler(scheduler);
|
||||
ms.afterPropertiesSet();
|
||||
//ms.start();
|
||||
System.in.read();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,197 +16,43 @@
|
||||
|
||||
package org.springframework.integration.twitter.inbound;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import java.util.Properties;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.store.PropertiesPersistingMetadataStore;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.twitter.core.Tweet;
|
||||
import org.springframework.integration.twitter.core.Twitter4jTemplate;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
import org.springframework.social.twitter.api.Tweet;
|
||||
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||
|
||||
import twitter4j.Paging;
|
||||
import twitter4j.RateLimitStatus;
|
||||
import twitter4j.ResponseList;
|
||||
import twitter4j.Status;
|
||||
import twitter4j.Twitter;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*/
|
||||
public class TimelineReceivingMessageSourceTests {
|
||||
|
||||
private Status firstMessage;
|
||||
|
||||
private Status secondMessage;
|
||||
|
||||
private Status thirdMessage;
|
||||
|
||||
private Status fourthMessage;
|
||||
|
||||
private TwitterOperations twitter;
|
||||
|
||||
Twitter tw;
|
||||
|
||||
|
||||
@Before
|
||||
public void prepare() throws Exception{
|
||||
twitter = new Twitter4jTemplate();
|
||||
|
||||
firstMessage = mock(Status.class);
|
||||
when(firstMessage.getCreatedAt()).thenReturn(new Date(5555555555L));
|
||||
when(firstMessage.getId()).thenReturn( (long) 200);
|
||||
|
||||
secondMessage = mock(Status.class);
|
||||
when(secondMessage.getCreatedAt()).thenReturn(new Date(2222222222L));
|
||||
when(secondMessage.getId()).thenReturn((long) 2000);
|
||||
|
||||
thirdMessage = mock(Status.class);
|
||||
when(thirdMessage.getCreatedAt()).thenReturn(new Date(66666666666L));
|
||||
when(thirdMessage.getId()).thenReturn((long) 3000);
|
||||
|
||||
fourthMessage = mock(Status.class);
|
||||
when(fourthMessage.getCreatedAt()).thenReturn(new Date(77777777777L));
|
||||
when(fourthMessage.getId()).thenReturn( (long)4000);
|
||||
|
||||
tw = mock(Twitter.class);
|
||||
Field twField = Twitter4jTemplate.class.getDeclaredField("twitter");
|
||||
twField.setAccessible(true);
|
||||
twField.set(twitter, tw);
|
||||
when(tw.getScreenName()).thenReturn("kermit");
|
||||
|
||||
twitter = spy(twitter);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSuccessfulInitialization() throws Exception{
|
||||
when(tw.isOAuthEnabled()).thenReturn(true);
|
||||
TimelineReceivingMessageSource source = new TimelineReceivingMessageSource(twitter);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
assertEquals("twitter:inbound-channel-adapter.twitterEndpoint.kermit", TestUtils.getPropertyValue(source, "metadataKey"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Test
|
||||
public void testSuccessfulInitializationWithMessages() throws Exception{
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
|
||||
TimelineReceivingMessageSource source = new TimelineReceivingMessageSource(twitter);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
Message msg = source.receive();
|
||||
assertNotNull(msg);
|
||||
Tweet message = (Tweet) msg.getPayload();
|
||||
assertEquals(2000, message.getId());
|
||||
verify(twitter, times(1)).getTimeline();
|
||||
}
|
||||
/**
|
||||
* This test will validate that last status is initilaized from the metadatastore
|
||||
* @throws Exception
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Test
|
||||
public void testSuccessfulInitializationWithMessagesWithPersistentMetadata() throws Exception{
|
||||
String fileName = System.getProperty("java.io.tmpdir") + "/spring-integration/metadata-store.properties";
|
||||
File file = new File(fileName);
|
||||
if (file.exists()){
|
||||
file.delete();
|
||||
}
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
|
||||
PropertiesPersistingMetadataStore store = new PropertiesPersistingMetadataStore();
|
||||
store.afterPropertiesSet();
|
||||
bf.registerSingleton(IntegrationContextUtils.METADATA_STORE_BEAN_NAME, store);
|
||||
TimelineReceivingMessageSource source = new TimelineReceivingMessageSource(twitter);
|
||||
source.setBeanFactory(bf);
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
|
||||
Message message = source.receive();
|
||||
Tweet tweet = (Tweet) message.getPayload();
|
||||
assertEquals(2000, tweet.getId());
|
||||
|
||||
|
||||
// Resuming
|
||||
this.prepare();
|
||||
this.setUpMockScenarioForMessagePolling();
|
||||
store.destroy();
|
||||
bf = new DefaultListableBeanFactory();
|
||||
store = new PropertiesPersistingMetadataStore();
|
||||
store.afterPropertiesSet();
|
||||
bf.registerSingleton(IntegrationContextUtils.METADATA_STORE_BEAN_NAME, store);
|
||||
source = new TimelineReceivingMessageSource(twitter);
|
||||
source.setBeanFactory(bf);
|
||||
scheduler = new ThreadPoolTaskScheduler();
|
||||
scheduler.afterPropertiesSet();
|
||||
source.setBeanName("twitterEndpoint");
|
||||
source.afterPropertiesSet();
|
||||
|
||||
message = source.receive();
|
||||
tweet = (Tweet) message.getPayload();
|
||||
assertEquals(3000, tweet.getId());
|
||||
message = source.receive();
|
||||
tweet = (Tweet) message.getPayload();
|
||||
assertEquals(4000, tweet.getId());
|
||||
file.delete();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void setUpMockScenarioForMessagePolling() throws Exception{
|
||||
RateLimitStatus rateLimitStatus = mock(RateLimitStatus.class);
|
||||
|
||||
when(tw.getRateLimitStatus()).thenReturn(rateLimitStatus);
|
||||
when(rateLimitStatus.getSecondsUntilReset()).thenReturn(1000);
|
||||
when(rateLimitStatus.getRemainingHits()).thenReturn(1000);
|
||||
|
||||
SampleResoponceList testMessages = new SampleResoponceList();
|
||||
testMessages.add(firstMessage);
|
||||
testMessages.add(secondMessage);
|
||||
when(tw.getHomeTimeline()).thenReturn(testMessages);
|
||||
|
||||
testMessages = new SampleResoponceList();
|
||||
testMessages.add(thirdMessage);
|
||||
testMessages.add(fourthMessage);
|
||||
when(tw.getHomeTimeline(Mockito.any(Paging.class))).thenReturn(testMessages);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "serial" })
|
||||
public static class SampleResoponceList extends ArrayList implements ResponseList {
|
||||
|
||||
public RateLimitStatus getRateLimitStatus() {
|
||||
return mock(RateLimitStatus.class);
|
||||
@Test @Ignore
|
||||
public void demoReceiveTimeline() throws Exception{
|
||||
PropertiesFactoryBean pf = new PropertiesFactoryBean();
|
||||
pf.setLocation(new ClassPathResource("sample.properties"));
|
||||
pf.afterPropertiesSet();
|
||||
Properties prop = pf.getObject();
|
||||
System.out.println(prop);
|
||||
TwitterTemplate template = new TwitterTemplate(prop.getProperty("z_oleg.oauth.consumerKey"),
|
||||
prop.getProperty("z_oleg.oauth.consumerSecret"),
|
||||
prop.getProperty("z_oleg.oauth.accessToken"),
|
||||
prop.getProperty("z_oleg.oauth.accessTokenSecret"));
|
||||
TimelineReceivingMessageSource tSource = new TimelineReceivingMessageSource(template);
|
||||
tSource.afterPropertiesSet();
|
||||
for (int i = 0; i < 50; i++) {
|
||||
Message<Tweet> message = (Message<Tweet>) tSource.receive();
|
||||
if (message != null){
|
||||
Tweet tweet = message.getPayload();
|
||||
System.out.println(tweet.getFromUser() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
|
||||
}
|
||||
}
|
||||
|
||||
public RateLimitStatus getFeatureSpecificRateLimitStatus() {
|
||||
return mock(RateLimitStatus.class);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
package org.springframework.integration.twitter.outbound;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.twitter.core.TwitterHeaders;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
@@ -33,20 +33,22 @@ import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
*/
|
||||
public class DirectMessageSendingMessageHandlerTests {
|
||||
|
||||
private TwitterOperations twitter = mock(TwitterOperations.class);
|
||||
|
||||
@Test
|
||||
@Test @Ignore
|
||||
public void validateSendDirectMessage() throws Exception{
|
||||
Message<?> message1 = MessageBuilder.withPayload("hello")
|
||||
.setHeader(TwitterHeaders.DM_TARGET_USER_ID, "foo").build();
|
||||
DirectMessageSendingMessageHandler handler = new DirectMessageSendingMessageHandler(twitter);
|
||||
PropertiesFactoryBean pf = new PropertiesFactoryBean();
|
||||
pf.setLocation(new ClassPathResource("sample.properties"));
|
||||
pf.afterPropertiesSet();
|
||||
Properties prop = pf.getObject();
|
||||
System.out.println(prop);
|
||||
TwitterTemplate template = new TwitterTemplate(prop.getProperty("spring_eip.oauth.consumerKey"),
|
||||
prop.getProperty("spring_eip.oauth.consumerSecret"),
|
||||
prop.getProperty("spring_eip.oauth.accessToken"),
|
||||
prop.getProperty("spring_eip.oauth.accessTokenSecret"));
|
||||
Message<?> message1 = MessageBuilder.withPayload("Polsihing SI Twitter migration")
|
||||
.setHeader(TwitterHeaders.DM_TARGET_USER_ID, "z_oleg").build();
|
||||
DirectMessageSendingMessageHandler handler = new DirectMessageSendingMessageHandler(template);
|
||||
handler.afterPropertiesSet();
|
||||
handler.handleMessage(message1);
|
||||
verify(twitter, times(1)).sendDirectMessage("foo", "hello");
|
||||
Message<?> message2 = MessageBuilder.withPayload("hello")
|
||||
.setHeader(TwitterHeaders.DM_TARGET_USER_ID, 123).build();;
|
||||
handler.handleMessage(message2);
|
||||
verify(twitter, times(1)).sendDirectMessage(123, "hello");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,64 +16,37 @@
|
||||
|
||||
package org.springframework.integration.twitter.outbound;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import java.util.Properties;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.twitter.core.Tweet;
|
||||
import org.springframework.integration.twitter.core.Twitter4jTemplate;
|
||||
import org.springframework.integration.twitter.core.TwitterOperations;
|
||||
|
||||
import twitter4j.StatusUpdate;
|
||||
import twitter4j.Twitter;
|
||||
import org.springframework.social.twitter.api.impl.TwitterTemplate;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
* @since 2.0
|
||||
*/
|
||||
public class StatusUpdatingMessageHandlerTests {
|
||||
|
||||
|
||||
TwitterOperations twitterOperations;
|
||||
|
||||
Twitter twitter;
|
||||
|
||||
@Before
|
||||
public void prepare() throws Exception{
|
||||
twitterOperations = spy(new Twitter4jTemplate());
|
||||
Field twitterField = Twitter4jTemplate.class.getDeclaredField("twitter");
|
||||
twitterField.setAccessible(true);
|
||||
twitter = mock(Twitter.class);
|
||||
twitterField.set(twitterOperations, twitter);
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public void testSendingStatusUpdate() throws Exception{
|
||||
StatusUpdatingMessageHandler handler = new StatusUpdatingMessageHandler(twitterOperations);
|
||||
Tweet tweet = new Tweet();
|
||||
tweet.setText("writing twitter tests");
|
||||
handler.handleMessage(new GenericMessage(tweet));
|
||||
verify(twitterOperations, times(1)).updateStatus(Mockito.any(String.class));
|
||||
verify(twitter, times(1)).updateStatus(Mockito.any(StatusUpdate.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendingStatusUpdateWithStringPayload() throws Exception{
|
||||
StatusUpdatingMessageHandler handler = new StatusUpdatingMessageHandler(twitterOperations);
|
||||
Message<?> message = MessageBuilder.withPayload("writing twitter tests").build();
|
||||
handler.handleMessage(message);
|
||||
verify(twitterOperations, times(1)).updateStatus(Mockito.any(String.class));
|
||||
verify(twitter, times(1)).updateStatus(Mockito.any(StatusUpdate.class));
|
||||
@Test @Ignore
|
||||
public void demoSendStatusMessage() throws Exception{
|
||||
PropertiesFactoryBean pf = new PropertiesFactoryBean();
|
||||
pf.setLocation(new ClassPathResource("sample.properties"));
|
||||
pf.afterPropertiesSet();
|
||||
Properties prop = pf.getObject();
|
||||
TwitterTemplate template = new TwitterTemplate(prop.getProperty("z_oleg.oauth.consumerKey"),
|
||||
prop.getProperty("z_oleg.oauth.consumerSecret"),
|
||||
prop.getProperty("z_oleg.oauth.accessToken"),
|
||||
prop.getProperty("z_oleg.oauth.accessTokenSecret"));
|
||||
Message<?> message1 = MessageBuilder.withPayload("Ppolishing #springintegration migration to Spring Social. test").build();
|
||||
StatusUpdatingMessageHandler handler = new StatusUpdatingMessageHandler(template);
|
||||
handler.afterPropertiesSet();
|
||||
handler.handleMessage(message1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user