"""Temp endpoint tests.""" from typing import Any from unittest.mock import AsyncMock, MagicMock, patch from uuid import UUID import pytest from fastapi.testclient import TestClient from pdp.connectors.dynamo import DynamoDbConnector from pdp.constants.constants import TenantType from pdp.fastapi.schemas.tenant import Tenant, TenantHierarchy @pytest.mark.parametrize( "lookup_response, expected_status_code, expected_response, description", [ ( {}, 200, {}, "No lookup results, empty dictionary of tenant hierarchy", ), ( { UUID("a9dd9b42-e53d-11ee-be6d-4a2888760682"): TenantHierarchy( company_brand=Tenant( tenant_uuid=UUID("d25a4cd1-e820-45f2-be5c-56edcfeb8298"), tenant_type=TenantType.TENANT_TYPE_COMPANY_BRAND, ), parent_company=Tenant( tenant_uuid=UUID("bb3e201f-6a0e-473a-a8d6-9e39c611aab7"), tenant_type=TenantType.TENANT_TYPE_PARENT_COMPANY, ), ) }, 200, { "a9dd9b42-e53d-11ee-be6d-4a2888760682": { "company_brand": { "tenant_uuid": "d25a4cd1-e820-45f2-be5c-56edcfeb8298", "tenant_type": "company_brand", }, "parent_company": { "tenant_uuid": "bb3e201f-6a0e-473a-a8d6-9e39c611aab7", "tenant_type": "parent_company", }, "account": None, "subaccount": None, } }, "Lookup results are returned", ), ], ) @patch("pdp.fastapi.routers.temp.MultiTenantProxy") def test_multi_tenant_proxy_account_test( mock_multi_tenant_proxy_model_cls: MagicMock, lookup_response: Any, expected_status_code: int, expected_response: Any, description: str, tenant_1_uuid_as_string: str, tenant_2_uuid_as_string: str, test_client: TestClient, ) -> None: """Test the multi tenant proxy accounts demo handler.""" mock_multi_tenant_proxy_model = mock_multi_tenant_proxy_model_cls.return_value mock_multi_tenant_proxy_model.gather_tenant_hierarchies = AsyncMock( side_effect=[ lookup_response, ] ) response = test_client.post( "/temp/infra/multi-tenant-proxy/accounts/", json=[ {"tenant_uuid": tenant_1_uuid_as_string, "tenant_type": "account"}, {"tenant_uuid": tenant_2_uuid_as_string, "tenant_type": "subaccount"}, ], ) assert response.status_code == expected_status_code assert response.json() == expected_response, description @pytest.fixture def mock_dynamodb_connector() -> DynamoDbConnector: """Return a mocked dynamodb connector.""" return MagicMock(spec=DynamoDbConnector)