/** Unit Test ensuring some basic initialization properties being set. */
  @Test
  public void testSearchReceivingMessageSourceInit() {

    final SearchReceivingMessageSource messageSource =
        new SearchReceivingMessageSource(new TwitterTemplate("test"), "foo");
    messageSource.setComponentName("twitterSearchMessageSource");

    final Object metadataStore = TestUtils.getPropertyValue(messageSource, "metadataStore");
    final Object metadataKey = TestUtils.getPropertyValue(messageSource, "metadataKey");

    assertNull(metadataStore);
    assertNotNull(metadataKey);

    messageSource.setBeanFactory(mock(BeanFactory.class));
    messageSource.afterPropertiesSet();

    final Object metadataStoreInitialized =
        TestUtils.getPropertyValue(messageSource, "metadataStore");
    final Object metadataKeyInitialized = TestUtils.getPropertyValue(messageSource, "metadataKey");

    assertNotNull(metadataStoreInitialized);
    assertTrue(metadataStoreInitialized instanceof SimpleMetadataStore);
    assertNotNull(metadataKeyInitialized);
    assertEquals("foo", metadataKeyInitialized);

    final Twitter twitter = TestUtils.getPropertyValue(messageSource, "twitter", Twitter.class);

    assertFalse(twitter.isAuthorized());
    assertNotNull(twitter.userOperations());
  }
  /** Verify that a polling operation returns in fact 3 results. */
  @Test
  public void testPollForTweetsThreeResults() {

    final TwitterTemplate twitterTemplate;

    final SearchOperations so = mock(SearchOperations.class);

    final List<Tweet> tweets = new ArrayList<Tweet>();

    tweets.add(mock(Tweet.class));
    tweets.add(mock(Tweet.class));
    tweets.add(mock(Tweet.class));

    final SearchResults results = new SearchResults(tweets, new SearchMetadata(111, 111));

    twitterTemplate = mock(TwitterTemplate.class);

    when(twitterTemplate.searchOperations()).thenReturn(so);
    SearchParameters params = new SearchParameters(SEARCH_QUERY).count(20).sinceId(0);
    when(twitterTemplate.searchOperations().search(params)).thenReturn(results);

    final SearchReceivingMessageSource messageSource =
        new SearchReceivingMessageSource(twitterTemplate, "foo");

    messageSource.setQuery(SEARCH_QUERY);

    final List<Tweet> tweetSearchResults = messageSource.pollForTweets(0);

    assertNotNull(tweetSearchResults);
    assertEquals(3, tweetSearchResults.size());
  }
 @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();
   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, "foo");
   tSource.setQuery(SEARCH_QUERY);
   tSource.afterPropertiesSet();
   for (int i = 0; i < 50; i++) {
     Message<Tweet> message = (Message<Tweet>) tSource.receive();
     if (message != null) {
       Tweet tweet = message.getPayload();
       logger.info(tweet.getFromUser() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
     }
   }
 }
  /**
   * This test ensures that when polling for a list of Tweets null is never returned. In case of no
   * polling results, an empty list is returned instead.
   */
  @Test
  public void testPollForTweetsNullResults() {

    final TwitterTemplate twitterTemplate = mock(TwitterTemplate.class);
    final SearchOperations so = mock(SearchOperations.class);

    when(twitterTemplate.searchOperations()).thenReturn(so);
    when(twitterTemplate.searchOperations().search(SEARCH_QUERY, 20, 0, 0)).thenReturn(null);

    final SearchReceivingMessageSource messageSource =
        new SearchReceivingMessageSource(twitterTemplate, "foo");
    messageSource.setQuery(SEARCH_QUERY);

    final String setQuery = TestUtils.getPropertyValue(messageSource, "query", String.class);

    assertEquals(SEARCH_QUERY, setQuery);
    assertEquals("twitter:search-inbound-channel-adapter", messageSource.getComponentType());

    final List<Tweet> tweets = messageSource.pollForTweets(0);

    assertNotNull(tweets);
    assertTrue(tweets.isEmpty());
  }