def test_get_access_token_needs_consumer_key(self, mock_post):
     with self.assertRaises(CommandError) as exception_context:
         get_access_token()
     self.assertEqual(
         "{}".format(exception_context.exception),
         "necessary twitter setting consumer_key or consumer_secret does not exist. "
         "Use the admin site to set these settings")
     mock_post.assert_not_called()
 def test_get_access_token_handles_unknown_token_type(self, mock_post):
     TwitterSetting.objects.create(name='consumer_key', value='myconsumer')
     TwitterSetting.objects.create(name='consumer_secret', value='mysecret')
     mock_response = MagicMock()
     mock_response.json.return_value = {'token_type': 'other'}
     mock_post.return_value = mock_response
     with self.assertRaises(CommandError) as exception_context:
         get_access_token()
     self.assertEqual("{}".format(exception_context.exception),
                      "unknown token_type other")
 def test_get_access_token_handles_http_error(self, mock_post):
     TwitterSetting.objects.create(name='consumer_key', value='myconsumer')
     TwitterSetting.objects.create(name='consumer_secret', value='mysecret')
     mock_post.side_effect = requests.HTTPError
     with self.assertRaises(CommandError) as exception_context:
         get_access_token()
     self.assertEqual(
         "{}".format(exception_context.exception),
         "A problem occurred calling the twitter oauth2 endpoint when trying to receive an access token."
     )
     mock_post.assert_called_with('https://api.twitter.com/oauth2/token',
                                  data={'grant_type': 'client_credentials'},
                                  auth=('myconsumer', 'mysecret'),
                                  proxies={})
 def test_get_access_token_effect(self, mock_post):
     TwitterSetting.objects.create(name='consumer_key', value='myconsumer')
     TwitterSetting.objects.create(name='consumer_secret', value='mysecret')
     mock_response = MagicMock()
     mock_response.json.return_value = {
         'token_type': 'bearer',
         'access_token': '4ll y0ur b4s3 4r3 b3l0ng t0 u5'
     }
     mock_post.return_value = mock_response
     access_token = get_access_token()
     self.assertEqual(access_token, '4ll y0ur b4s3 4r3 b3l0ng t0 u5')
     token_setting = TwitterSetting.objects.get(name='access_token')
     self.assertEqual(token_setting.value, '4ll y0ur b4s3 4r3 b3l0ng t0 u5')
 def test_get_access_token_returns_existing_token(self, mock_post):
     TwitterSetting.objects.create(name='access_token',
                                   value='4ll y0ur b4s3 4r3 b3l0ng t0 u5')
     access_token = get_access_token()
     self.assertEqual(access_token, '4ll y0ur b4s3 4r3 b3l0ng t0 u5')
     mock_post.assert_not_called()