Ejemplo n.º 1
0
class TwitterSearchTest(testutil.HandlerTest):

  def setUp(self):
    super(TwitterSearchTest, self).setUp()
    self.twitter = TwitterSearch(key_name='example.com')
    self.datastore_stub = self.testbed.get_stub('datastore_v3')

  def test_tweet_to_salmon_with_expanded_url(self):
    self.assert_equals(TWEETS_SALMON_VARS[0],
                       self.twitter.tweet_to_salmon_vars(TWEETS_JSON[0]))

  def test_tweet_to_salmon_with_url(self):
    self.assert_equals(TWEETS_SALMON_VARS[1],
                       self.twitter.tweet_to_salmon_vars(TWEETS_JSON[1]))

  def test_tweet_to_salmon_minimal(self):
    salmon = self.twitter.tweet_to_salmon_vars({'id': 123})
    self.assert_equals('tag:twitter.com,2012:123', salmon['id'])

  def test_tweet_to_salmon_no_matching_url(self):
    tweet = copy.deepcopy(TWEETS_JSON[0])
    tweet['entities']['urls'][0]['expanded_url'] = 'http://foo.com/bar'

    expected = copy.deepcopy(TWEETS_SALMON_VARS[0])
    expected['in_reply_to'] = None
    self.assert_equals(expected, self.twitter.tweet_to_salmon_vars(tweet))

  def test_get_salmon(self):
    self.expect_urlfetch(twitter.API_SEARCH_URL % 'example.com',
                         json.dumps({'results': TWEETS_JSON}))
    self.expect_urlfetch(twitter.API_SEARCH_URL % '@snarfed',
                         json.dumps({'results': []}))
    self.expect_urlfetch(twitter.API_SEARCH_URL % '@user1',
                         json.dumps({'results': MENTIONS_JSON}))
    self.mox.ReplayAll()

    self.assert_equals(TWEETS_SALMON_VARS, self.twitter.get_salmon())

  def test_add_good_domain(self):
    for domain in 'asdf.com', 'https://asdf.com/', 'asdf.com/foo?bar#baz':
      self.datastore_stub.Clear()

      resp = twitter.application.get_response('/twitter/add?domain=%s' % domain,
                                              method='POST')
      self.assertEquals(302, resp.status_int, resp.body)
      self.assertEquals('http://localhost/', resp.headers['Location'])

      searches = TwitterSearch.all().fetch(10)
      self.assertEqual(1, len(searches))
      ts = searches[0]
      self.assertEqual('asdf.com', ts.key().name())
      self.assertEqual('http://asdf.com/', ts.url)
      self.assertEqual('http://asdf.com/favicon.ico', ts.picture)
      self.assertEqual(self.current_user_id, ts.owner.key().name())

  def test_add_bad_domain(self):
    for domain in '', '  ', 'com', 'com.', 'a/b/c':
      resp = twitter.application.get_response('/twitter/add?domain=%s' % domain,
                                              method='POST')
      self.assertEquals(400, resp.status_int, resp.body)
      self.assertEqual(0, TwitterSearch.all().count())