def test_beer_not_found_yet(self, mock_api): beer_pks = [1234, 5678] with self.settings_context_manager(): with self.assertRaises(Retry): tweet_about_beers(beer_pks) mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, )
def test_single_beer_no_creds(self, mock_retry, mock_api): beer = BeerFactory() TapFactory(venue=self.venue, beer=beer) with self.settings( TWITTER_CONSUMER_KEY='', TWITTER_CONSUMER_SECRET='', TWITTER_ACCESS_TOKEN_KEY='', TWITTER_ACCESS_TOKEN_SECRET='', ): tweet_about_beers([beer.id]) mock_retry.assert_not_called() mock_api.assert_not_called()
def test_single_beer_no_creds(self, mock_retry, mock_api): beer = BeerFactory() TapFactory(venue=self.venue, beer=beer) with self.settings( TWITTER_CONSUMER_KEY="", TWITTER_CONSUMER_SECRET="", TWITTER_ACCESS_TOKEN_KEY="", TWITTER_ACCESS_TOKEN_SECRET="", ): tweet_about_beers([beer.id]) # pylint: disable=no-value-for-parameter mock_retry.assert_not_called() mock_api.assert_not_called()
def test_single_beer_already_tweeted(self, mock_retry, mock_api): beer = BeerFactory(tweeted_about=True) TapFactory(venue=self.venue, beer=beer) with self.settings_context_manager(): tweet_about_beers([beer.id]) mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdate.assert_not_called() mock_api.return_value.PostUpdates.assert_not_called()
def test_single_beer_removed_from_draft(self, mock_retry, mock_api): beer = BeerFactory() with self.settings_context_manager(): tweet_about_beers([beer.id]) # pylint: disable=no-value-for-parameter mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdate.assert_not_called() mock_api.return_value.PostUpdates.assert_not_called() beer.refresh_from_db() self.assertTrue(beer.tweeted_about)
def test_single_beer(self, mock_retry, mock_api): beer = BeerFactory() TapFactory(venue=self.venue, beer=beer) with self.settings_context_manager(): tweet_about_beers([beer.id]) # pylint: disable=no-value-for-parameter mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdate.assert_called_once_with( SINGLE_BEER_TEMPLATE.format( beer.name, "@" + beer.manufacturer.twitter_handle, beer.style.name, self.venue.name, )) mock_api.return_value.PostUpdates.assert_not_called()
def test_multi_beer_more_to_come(self, mock_retry, mock_api): mfg = ManufacturerFactory() beers = Beer.objects.bulk_create( BeerFactory.build(manufacturer=mfg, style=None) for dummy in range(20)) Tap.objects.bulk_create( TapFactory.build(venue=self.venue, beer=beer) for beer in beers) with self.settings_context_manager(): tweet_about_beers([i.id for i in beers]) # pylint: disable=no-value-for-parameter beers = beers[:10] mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdates.assert_called_once() mock_api.return_value.PostUpdate.assert_not_called() call_args = mock_api.return_value.PostUpdates.call_args self.assertEqual(call_args[1], {"continuation": "…", "threaded": True}) self.assertEqual(len(call_args[0]), 1) tweet = call_args[0][0] self.assertIn( MULTI_BEER_OUTER.format(len(beers), "(10 still to come!)").strip(), tweet, ) lines = tweet.splitlines() self.assertEqual(len(lines), 1 + len(beers)) for beer, line in zip(beers, lines[1:]): self.assertIn( MULTI_BEER_INNER.format( beer.name, "@" + beer.manufacturer.twitter_handle, "unknown", self.venue.name, ), line, )
def test_multi_beer(self, mock_retry, mock_api): mfg = ManufacturerFactory() beers = Beer.objects.bulk_create( BeerFactory.build(manufacturer=mfg, style=None) for dummy in range(10) ) Tap.objects.bulk_create( TapFactory.build(venue=self.venue, beer=beer) for beer in beers ) with self.settings_context_manager(): tweet_about_beers([i.id for i in beers]) mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdates.assert_called_once() mock_api.return_value.PostUpdate.assert_not_called() call_args = mock_api.return_value.PostUpdates.call_args self.assertEqual(call_args[1], {'continuation': '…', 'threaded': True}) self.assertEqual(len(call_args[0]), 1) tweet = call_args[0][0] self.assertIn( MULTI_BEER_OUTER.format(len(beers), '').strip(), tweet, ) lines = tweet.splitlines() self.assertEqual(len(lines), 1 + len(beers)) for beer, line in zip(beers, lines[1:]): self.assertIn(MULTI_BEER_INNER.format( beer.name, '@' + beer.manufacturer.twitter_handle, 'unknown', self.venue.name, ), line)