|
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)
|
|
|