|
1 | 1 | from unittest.mock import patch |
2 | 2 |
|
| 3 | +import pytest |
| 4 | + |
3 | 5 | from msal_requests_auth.cache import KeyringTokenCache, SimpleTokenCache |
4 | 6 |
|
5 | 7 |
|
@@ -89,3 +91,50 @@ def test_keyring_token_cache__deserialize(deserialize_mock, keyring_mock): |
89 | 91 | keyring_mock.return_value.get_password.return_value = "TEST" |
90 | 92 | KeyringTokenCache() |
91 | 93 | deserialize_mock.assert_called_with("TEST") |
| 94 | + |
| 95 | + |
| 96 | +@patch("msal_requests_auth.cache._import_keyring") |
| 97 | +@patch("msal_requests_auth.cache.KeyringTokenCache.serialize") |
| 98 | +def test_keyring_token_cache__write_cache__windows_error(serialize_mock, keyring_mock): |
| 99 | + class MyException(Exception): |
| 100 | + def __init__(self, *args, **kwargs) -> None: |
| 101 | + self.winerror = 1783 |
| 102 | + super().__init__(*args, **kwargs) |
| 103 | + |
| 104 | + keyring_mock.return_value.set_password.side_effect = MyException |
| 105 | + |
| 106 | + serialize_mock.return_value = "TEST" |
| 107 | + keyring_mock.return_value.get_password.return_value = None |
| 108 | + with KeyringTokenCache() as cache: |
| 109 | + pass |
| 110 | + keyring_mock.return_value.get_password.assert_called_with( |
| 111 | + "__msal_requests_auth__", "token" |
| 112 | + ) |
| 113 | + keyring_mock.return_value.set_password.assert_not_called() |
| 114 | + cache.has_state_changed = True |
| 115 | + with pytest.warns(match="Token cache skipped due to error writing to keyring"): |
| 116 | + with KeyringTokenCache() as cache: |
| 117 | + cache.has_state_changed = True |
| 118 | + keyring_mock.return_value.set_password.assert_called_with( |
| 119 | + "__msal_requests_auth__", "token", "TEST" |
| 120 | + ) |
| 121 | + |
| 122 | + |
| 123 | +@patch("msal_requests_auth.cache._import_keyring") |
| 124 | +@patch("msal_requests_auth.cache.KeyringTokenCache.serialize") |
| 125 | +def test_keyring_token_cache__write_cache__error(serialize_mock, keyring_mock): |
| 126 | + keyring_mock.return_value.set_password.side_effect = RuntimeError |
| 127 | + serialize_mock.return_value = "TEST" |
| 128 | + keyring_mock.return_value.get_password.return_value = None |
| 129 | + with KeyringTokenCache() as cache: |
| 130 | + pass |
| 131 | + keyring_mock.return_value.get_password.assert_called_with( |
| 132 | + "__msal_requests_auth__", "token" |
| 133 | + ) |
| 134 | + keyring_mock.return_value.set_password.assert_not_called() |
| 135 | + with pytest.raises(RuntimeError): |
| 136 | + with KeyringTokenCache() as cache: |
| 137 | + cache.has_state_changed = True |
| 138 | + keyring_mock.return_value.set_password.assert_called_with( |
| 139 | + "__msal_requests_auth__", "token", "TEST" |
| 140 | + ) |
0 commit comments