from unittest.mock import Mock import hashlib import pytest from labelaudit.lib.vapi import token_storage from labelaudit.lib.vapi.oauth_client import OauthClient base_url = 'https://notreal.abc.com' client_id = 'CLIENTID' client_secret = 'SHHHHHHH' redirect_uri = 'https://redirect.abc.com' user_id = 123 user_type = 'oa' @pytest.fixture() def oauth_client(): return OauthClient( client_id, client_secret, base_url, redirect_uri, user_id, user_type) def test_fetches_from_cache(oauth_client): cache = Mock(get=Mock(return_value='cache-token')) assert token_storage.get_access_token(oauth_client, cache) == 'cache-token' def test_fetches_from_client(monkeypatch, oauth_client): monkeypatch.setattr( oauth_client, 'fetch_token', Mock(return_value={'access_token': 'new-token'})) cache = Mock(get=Mock(return_value=None)) assert token_storage.get_access_token(oauth_client, cache) == 'new-token' def test_caches_token_from_client(monkeypatch, oauth_client): monkeypatch.setattr( token_storage, 'cache_key', Mock(return_value='cache-key')) monkeypatch.setattr( oauth_client, 'fetch_token', Mock(return_value={'access_token': 'new-token'})) cache = Mock(get=Mock(return_value=None, set=Mock())) cache_timeout = 3000 token_storage.get_access_token(oauth_client, cache, cache_timeout) cache.set.assert_called_with('cache-key', 'new-token', cache_timeout) def test_calculates_unique_hash_key(oauth_client): values = (str(client_id), client_secret, base_url, str(user_id), user_type) md5 = hashlib.md5(','.join(values).encode()).hexdigest() assert token_storage.cache_key(oauth_client) == 'access-token-' + md5