"""Test token storage.""" import hashlib from unittest.mock import Mock import pytest from product_review.lib.vapi import token_storage from product_review.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(): """Oauth client fixture.""" return OauthClient( client_id, client_secret, base_url, redirect_uri, user_id, user_type ) def test_fetches_from_cache(oauth_client): """Test fetches from cache.""" 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): """Test fetches from 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): """Test caches token from 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): """Test calculates unique hash key.""" values = (str(client_id), client_secret, base_url, str(user_id), user_type) hashed = hashlib.sha256(",".join(values).encode()).hexdigest() assert token_storage.cache_key(oauth_client) == "access-token-" + hashed