def test_save_tweet(self):
     status = 9999999999999999999999999
     reimbursement = mixer.blend(Reimbursement, search_vector=None)
     command = Command()
     command.log = MagicMock()
     command.save_tweet(reimbursement, status)
     self.assertEqual(status, reimbursement.tweet.status)
     self.assertEqual(1, command.log.info.call_count)
     self.assertEqual(1, Tweet.objects.count())
 def test_save_duplicated_tweet(self):
     status = 9999999999999999999999999
     reimbursement = mixer.blend(Reimbursement)
     tweet = mixer.blend(Tweet, status=status, reimbursement=reimbursement)
     command = Command()
     command.log = MagicMock()
     command.save_tweet(reimbursement, status)
     self.assertEqual(status, reimbursement.tweet.status)
     self.assertEqual(1, command.log.info.call_count)
     self.assertEqual(1, Tweet.objects.count())
 def test_get_document_id(self):
     valid = (
         'http://jarbas.serenatadeamor.org/#/documentId/666',
         'http://jarbas.serenatadeamor.org/#/documentId/666/',
         'http://jarbas.serenatadeamor.org/#/documentId/666/something/else',
         'http://jarbas.serenatadeamor.org/#/something/else/documentId/666')
     invalid = ('http://jarbas.serenatadeamor.org/#/document/666',
                'http://jarbas.serenatadeamor.org/#/documentid/666/',
                'http://jarbas.serenatadeamor.org/#/year/2015/',
                'http://jarbas.serenatadeamor.org/#/')
     self.assertTrue(all((Command.get_document_id(u) for u in valid)))
     self.assertFalse(any((Command.get_document_id(u) for u in invalid)))
 def test_urls(self, tweets):
     tweets.return_value = (Status(
         1234, (Url('http://t.co/12'), Url('http://t.co/34'))),
                            Status(42, (Url('http://t.co/42'), )))
     expected = ((1234, 'http://t.co/12'), (1234, 'http://t.co/34'),
                 (42, 'http://t.co/42'))
     self.assertEqual(expected, tuple(Command().urls))
 def test_new_tweet(self, save_tweet, document_ids):
     obj = mixer.blend(Reimbursement,
                       search_vector=None,
                       document_id=123456)
     document_ids.return_value = ((42, 123456), )
     with self.settings(**self.credentials):
         Command().handle()
     save_tweet.assert_called_once_with(obj, 42)
    def test_existing_tweet(self, save_tweet, document_ids):
        reimbursement = mixer.blend(Reimbursement, document_id=123456)
        mixer.blend(Tweet, status=42, reimbursement=reimbursement)

        document_ids.return_value = ((42, 123456), )
        with self.settings(**self.credentials):
            Command().handle()
        save_tweet.assert_not_called()
 def test_handler_without_credentials(self, first, api, log):
     missing_values = tuple(set(permutations(['', '42', '42', '42'])))
     missing_credentials = (dict(zip(KEYS, v)) for v in missing_values)
     for credentials in missing_credentials:
         with self.settings(**credentials):
             Command().handle()
     api.assert_not_called()
     first.assert_not_called()
     self.assertEqual(4, log.return_value.warning.call_count)
 def test_tweets_with_clean_database(self, api):
     api.return_value.GetUserTimeline.return_value = range(3)
     with self.settings(**self.credentials):
         command = Command()
     self.assertEqual((0, 1, 2), tuple(command.tweets))
     api.assert_called_once_with('42',
                                 '42',
                                 '42',
                                 '42',
                                 sleep_on_rate_limit=True)
     api.return_value.GetUserTimeline.assert_called_once_with(
         screen_name='RosieDaSerenata',
         count=200,
         include_rts=False,
         exclude_replies=True)
 def test_tweets_with_database(self, api):
     tweet = mixer.blend(Tweet,
                         reimbursement__search_vector=None,
                         status=random_tweet_status())
     api.return_value.GetUserTimeline.return_value = range(3)
     with self.settings(**self.credentials):
         command = Command()
     self.assertEqual((0, 1, 2), tuple(command.tweets))
     api.assert_called_once_with('42',
                                 '42',
                                 '42',
                                 '42',
                                 sleep_on_rate_limit=True)
     api.return_value.GetUserTimeline.assert_called_once_with(
         screen_name='RosieDaSerenata',
         count=200,
         include_rts=False,
         exclude_replies=True,
         since_id=tweet.status)
 def test_non_existent_reimbursement(self, save_tweet, document_ids):
     document_ids.return_value = ((42, 24), )
     with self.settings(**self.credentials):
         Command().handle()
     save_tweet.assert_not_called()
 def test_credentials(self, first, api):
     with self.settings(**self.credentials):
         Command().handle()
     credentials = (self.credentials[k] for k in KEYS)
     api.assert_called_once_with(*credentials, sleep_on_rate_limit=True)
     first.assert_called_once_with()
 def test_document_ids(self, urls):
     urls.return_value = ((123, 'documentId/1'), (456, 'documentId/2'))
     self.assertEqual(((123, 1), (456, 2)), tuple(Command().document_ids))