File size: 4,220 Bytes
550665c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
import pickle
from os import path
from unittest.mock import patch
from pyfakefs.fake_filesystem_unittest import TestCase
from gcsa.google_calendar import GoogleCalendar
from tests.google_calendar_tests.mock_services.util import MockToken
class TestGoogleCalendarCredentials(TestCase):
def setUp(self):
self.setUpPyfakefs()
self.credentials_dir = path.join(path.expanduser('~'), '.credentials')
self.credentials_path = path.join(self.credentials_dir, 'credentials.json')
self.fs.create_dir(self.credentials_dir)
self.fs.create_file(self.credentials_path)
self.valid_token_path = path.join(self.credentials_dir, 'valid_token.pickle')
self.expired_token_path = path.join(self.credentials_dir, 'expired_token.pickle')
with open(self.valid_token_path, 'wb') as token_file:
pickle.dump(MockToken(valid=True), token_file)
with open(self.expired_token_path, 'wb') as token_file:
pickle.dump(MockToken(valid=False), token_file)
self._add_mocks()
def _add_mocks(self):
self.build_patcher = patch('googleapiclient.discovery.build', return_value=None).start()
class MockAuthFlow:
def run_local_server(self, *args, **kwargs):
return MockToken(valid=True)
self.from_client_secrets_file_patcher = patch(
'google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file',
return_value=MockAuthFlow()
).start()
def tearDown(self):
self.build_patcher.stop()
self.from_client_secrets_file_patcher.stop()
def test_with_given_credentials(self):
GoogleCalendar(credentials=MockToken(valid=True))
self.assertFalse(self.from_client_secrets_file_patcher.called)
def test_with_given_credentials_expired(self):
gc = GoogleCalendar(credentials=MockToken(valid=False))
self.assertTrue(gc.credentials.valid)
self.assertFalse(gc.credentials.expired)
def test_get_default_credentials_exist(self):
self.assertEqual(
self.credentials_path,
GoogleCalendar._get_default_credentials_path()
)
def test_get_default_credentials_path_not_exist(self):
self.fs.reset()
with self.assertRaises(FileNotFoundError):
GoogleCalendar._get_default_credentials_path()
def test_get_default_credentials_not_exist(self):
self.fs.remove(self.credentials_path)
with self.assertRaises(FileNotFoundError):
GoogleCalendar._get_default_credentials_path()
def test_get_default_credentials_client_secrets(self):
self.fs.remove(self.credentials_path)
client_secret_path = path.join(self.credentials_dir, 'client_secret_1234.json')
self.fs.create_file(client_secret_path)
self.assertEqual(
client_secret_path,
GoogleCalendar._get_default_credentials_path()
)
def test_get_default_credentials_multiple_client_secrets(self):
self.fs.remove(self.credentials_path)
self.fs.create_file(path.join(self.credentials_dir, 'client_secret_1234.json'))
self.fs.create_file(path.join(self.credentials_dir, 'client_secret_12345.json'))
with self.assertRaises(ValueError):
GoogleCalendar._get_default_credentials_path()
def test_get_token_valid(self):
gc = GoogleCalendar(token_path=self.valid_token_path)
self.assertTrue(gc.credentials.valid)
self.assertFalse(self.from_client_secrets_file_patcher.called)
def test_get_token_expired(self):
gc = GoogleCalendar(token_path=self.expired_token_path)
self.assertTrue(gc.credentials.valid)
self.assertFalse(gc.credentials.expired)
self.assertFalse(self.from_client_secrets_file_patcher.called)
def test_get_token_invalid_refresh(self):
gc = GoogleCalendar(credentials_path=self.credentials_path)
self.assertTrue(gc.credentials.valid)
self.assertFalse(gc.credentials.expired)
self.assertTrue(self.from_client_secrets_file_patcher.called)
|