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