2023-02-08 15:21:32 -05:00
|
|
|
import datetime
|
2023-02-06 20:29:53 -05:00
|
|
|
import unittest
|
2023-02-08 15:21:32 -05:00
|
|
|
from freezegun import freeze_time
|
2023-02-06 20:29:53 -05:00
|
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
from zoho_auth import ZohoToken
|
|
|
|
|
|
|
|
class TestZohoToken(unittest.TestCase):
|
|
|
|
"""Test the ZohoToken class"""
|
|
|
|
|
|
|
|
@patch('zoho_auth.request')
|
|
|
|
def test_fetches_token(self, mock_request):
|
|
|
|
"""Test that the ZohoAuth class fetches a token from the web service"""
|
|
|
|
mock_response = MagicMock()
|
|
|
|
mock_response.read.return_value.decode.return_value = '{"access_token": "mock_access_token", "expires_in": 3600}'
|
|
|
|
mock_request.urlopen.return_value.__enter__.return_value = mock_response
|
|
|
|
|
|
|
|
auth = ZohoToken('mock_client_id', 'mock_client_secret', 'mock_refresh_token')
|
|
|
|
|
|
|
|
# Assert that the token was fetched
|
2023-02-08 15:21:32 -05:00
|
|
|
self.assertEqual(auth.get_token(), 'mock_access_token')
|
|
|
|
mock_request.Request.assert_called_with('https://accounts.zoho.com/oauth/v2/token?refresh_token=mock_refresh_token&client_id=mock_client_id&client_secret=mock_client_secret&grant_type=refresh_token', method='POST')
|
2023-02-06 20:29:53 -05:00
|
|
|
|
2023-02-08 15:21:32 -05:00
|
|
|
@patch('zoho_auth.request')
|
|
|
|
@freeze_time('2009-06-15 09:00:00', as_kwarg='frozen_time')
|
|
|
|
def test_updates_token_after_expiration(self, mock_request, frozen_time):
|
|
|
|
"""Test that ZohoAuth fetches a new token after the previous one expires"""
|
|
|
|
mock_response = MagicMock()
|
|
|
|
mock_response.read.return_value.decode.return_value = '{"access_token": "mock_access_token", "expires_in": 3600}'
|
|
|
|
mock_request.urlopen.return_value.__enter__.return_value = mock_response
|
|
|
|
|
|
|
|
auth = ZohoToken('mock_client_id', 'mock_client_secret', 'mock_refresh_token')
|
|
|
|
self.assertEqual(auth.expires_at, datetime.datetime(2009, 6, 15, 10, 0, 0))
|
2023-02-06 20:29:53 -05:00
|
|
|
|
2023-02-08 15:21:32 -05:00
|
|
|
mock_response.read.return_value.decode.return_value = '{"access_token": "updated_mock_access_token", "expires_in": 3600}'
|
|
|
|
frozen_time.tick(datetime.timedelta(seconds=3599))
|
|
|
|
token = auth.get_token()
|
|
|
|
self.assertEqual(token, 'mock_access_token')
|
|
|
|
frozen_time.tick(datetime.timedelta(seconds=1))
|
|
|
|
token = auth.get_token()
|
|
|
|
self.assertEqual(token, 'updated_mock_access_token')
|
2023-02-06 20:29:53 -05:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2023-02-08 15:21:32 -05:00
|
|
|
unittest.main()
|