"""Test SubaccountByUuidResourceGetter.""" from unittest.mock import MagicMock, patch import pytest from owsresponse import response from account.constants import constants from account.logic.resource_getters.subaccount import SubaccountByUuidResourceGetter @pytest.fixture() def some_uuid() -> str: return '11387154-0267-11ef-82c8-4a2888760684' @pytest.fixture() def resource_getter(some_uuid: str) -> SubaccountByUuidResourceGetter: return SubaccountByUuidResourceGetter(some_uuid) @patch('account.logic.resource_getters.subaccount.lookup_subaccounts_by_uuids') def test_happy_path( mock_lookup: MagicMock, some_uuid: str, resource_getter: SubaccountByUuidResourceGetter, ) -> None: """Test get_attributes happy path.""" mock_lookup.return_value = response.Response( { 'subaccounts': [ { 'uuid': some_uuid, 'vendor_uuid': '87682992-bff2-40ff-aa75-18eb6214679e', 'company_brand_uuid': '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', 'parent_company_uuid': 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', }, ] } ) actual = resource_getter.get_attributes() mock_lookup.assert_called_once_with([some_uuid], [constants.FETCH_TENANT_HIERARCHY]) assert actual == { 'tenant': { 'tenant_uuid': some_uuid, 'tenant_type': 'subaccount', 'tenant_hierarchy': [ 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', '955a1bbd-b623-4ea1-ab5f-8d6620c442fb', '87682992-bff2-40ff-aa75-18eb6214679e', ], }, 'name': some_uuid, } @pytest.mark.parametrize( 'mock_empty_response', [ pytest.param(None, id='None means there is no subaccount data.'), pytest.param( response.create_not_found_response(), id='empty message means there is no subaccount data', ), pytest.param( response.Response([]), id='empty list message means there is no subaccount data', ), pytest.param( response.Response({'subaccounts': []}), id='empty list in subaccounts means there is no subaccount data', ), pytest.param( response.Response({'subaccounts': [{}]}), id='subaccount without uuid returns empty', ), ], ) @patch('account.logic.resource_getters.subaccount.lookup_subaccounts_by_uuids') def test_empty_attributes_returned( mock_lookup: MagicMock, mock_empty_response: response.Response | None, some_uuid: str, resource_getter: SubaccountByUuidResourceGetter, ) -> None: """Test get_attributes returns empty for bad lookups.""" mock_lookup.return_value = mock_empty_response actual = resource_getter.get_attributes() mock_lookup.assert_called_once_with([some_uuid], [constants.FETCH_TENANT_HIERARCHY]) assert actual == {}