forked from anna/doors
More unit tests
This commit is contained in:
parent
817a96bd97
commit
e280496acb
3
Makefile
3
Makefile
|
@ -6,3 +6,6 @@ install:
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm -v /usr/bin/doorsd /etc/doorsrc
|
rm -v /usr/bin/doorsd /etc/doorsrc
|
||||||
|
|
||||||
|
test:
|
||||||
|
pytest
|
17
requirements.txt
Normal file
17
requirements.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
attrs==22.2.0
|
||||||
|
certifi==2022.12.7
|
||||||
|
charset-normalizer==3.0.1
|
||||||
|
exceptiongroup==1.1.0
|
||||||
|
freezegun==1.2.2
|
||||||
|
idna==3.4
|
||||||
|
iniconfig==2.0.0
|
||||||
|
packaging==23.0
|
||||||
|
pluggy==1.0.0
|
||||||
|
pytest==7.2.1
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
requests==2.28.2
|
||||||
|
requests-mock==1.10.0
|
||||||
|
six==1.16.0
|
||||||
|
slacker==0.14.0
|
||||||
|
tomli==2.0.1
|
||||||
|
urllib3==1.26.14
|
|
@ -1,4 +1,6 @@
|
||||||
|
import datetime
|
||||||
import unittest
|
import unittest
|
||||||
|
from freezegun import freeze_time
|
||||||
from unittest.mock import patch, MagicMock
|
from unittest.mock import patch, MagicMock
|
||||||
from zoho_auth import ZohoToken
|
from zoho_auth import ZohoToken
|
||||||
|
|
||||||
|
@ -12,13 +14,30 @@ class TestZohoToken(unittest.TestCase):
|
||||||
mock_response.read.return_value.decode.return_value = '{"access_token": "mock_access_token", "expires_in": 3600}'
|
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
|
mock_request.urlopen.return_value.__enter__.return_value = mock_response
|
||||||
|
|
||||||
# __init__ calls update_token()
|
|
||||||
auth = ZohoToken('mock_client_id', 'mock_client_secret', 'mock_refresh_token')
|
auth = ZohoToken('mock_client_id', 'mock_client_secret', 'mock_refresh_token')
|
||||||
|
|
||||||
# Assert that the token was fetched
|
# Assert that the token was fetched
|
||||||
self.assertEqual(auth.access_token, 'mock_access_token')
|
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')
|
||||||
|
|
||||||
|
@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))
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
10
zoho_auth.py
10
zoho_auth.py
|
@ -9,7 +9,7 @@ class ZohoToken:
|
||||||
self.client_id = client_id
|
self.client_id = client_id
|
||||||
self.client_secret = client_secret
|
self.client_secret = client_secret
|
||||||
self.refresh_token = refresh_token
|
self.refresh_token = refresh_token
|
||||||
self.access_token = None
|
self._access_token = None
|
||||||
self.expires_at = None
|
self.expires_at = None
|
||||||
self.update_token()
|
self.update_token()
|
||||||
|
|
||||||
|
@ -23,13 +23,13 @@ class ZohoToken:
|
||||||
req = request.Request(url, method="POST")
|
req = request.Request(url, method="POST")
|
||||||
with request.urlopen(req) as f:
|
with request.urlopen(req) as f:
|
||||||
data = json.loads(f.read().decode())
|
data = json.loads(f.read().decode())
|
||||||
self.access_token = data["access_token"]
|
self._access_token = data["access_token"]
|
||||||
self.expires_at = datetime.datetime.now() + datetime.timedelta(seconds=int(data["expires_in"]))
|
self.expires_at = datetime.datetime.now() + datetime.timedelta(seconds=int(data["expires_in"]))
|
||||||
|
|
||||||
def get_token(self):
|
def get_token(self):
|
||||||
if self.access_token is None or self.expires_at <= datetime.datetime.now():
|
if self._access_token is None or self.expires_at <= datetime.datetime.now():
|
||||||
self.update_token()
|
self.update_token()
|
||||||
return self.access_token
|
return self._access_token
|
||||||
|
|
||||||
def authenticate(token, key):
|
def authenticate(token, key):
|
||||||
ret = False
|
ret = False
|
||||||
|
@ -49,4 +49,4 @@ def authenticate(token, key):
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
print("Error pinging server: %s" % e)
|
print("Error pinging server: %s" % e)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
Loading…
Reference in New Issue
Block a user