import asyncio
from unittest.mock import MagicMock
import grpc
import pytest
from google.protobuf.any_pb2 import Any
from qcs_api_client_common.configuration import ClientConfiguration
from qcs_api_client_common.grpc import RefreshInterceptor
@pytest.fixture
async def interceptor() -> RefreshInterceptor:
return RefreshInterceptor(None)
@pytest.fixture
def client_call_details() -> grpc.aio.ClientCallDetails:
method = "/test.TestService/TestMethod"
timeout = None
metadata = [("initial", "metadata")]
credentials = None
wait_for_ready = None
return grpc.aio.ClientCallDetails(method, timeout, metadata, credentials, wait_for_ready)
@pytest.fixture
def make_request() -> Any:
return Any()
@pytest.fixture
def mock_config(mocker):
mock = mocker.patch.object(ClientConfiguration, "get_bearer_access_token_async", new_callable=MagicMock)
future = asyncio.Future()
future.set_result("mock_config_fixture_token")
mock.return_value = future
return mock
@pytest.mark.asyncio
async def test_refresh_interceptor(mock_config, client_call_details, make_request):
async def continuation(call_details: grpc.aio.ClientCallDetails, request: Any):
return call_details
updated_call_details = await RefreshInterceptor().intercept_unary_unary(
continuation, client_call_details, make_request
)
assert ("authorization", "Bearer mock_config_fixture_token") in updated_call_details.metadata, (
"Authorization token is missing in metadata"
)
assert ("initial", "metadata") in updated_call_details.metadata, "Original metadata is not preserved"