from unittest.mock import MagicMock from inventory_provider import gap def test_get_token_endpoint(mocker): mock_response = MagicMock() mock_response.json.return_value = {'token_endpoint': 'http://example.com/token'} mock_response.raise_for_status = MagicMock() mocker.patch('inventory_provider.gap.requests.get', return_value=mock_response) discovery_endpoint_url = 'http://example.com/aai' token_endpoint = gap.get_token_endpoint(discovery_endpoint_url) assert token_endpoint == 'http://example.com/token' def test_get_token(mocker): mocker.patch('inventory_provider.gap.get_token_endpoint', return_value='http://example.com/token') mock_response = MagicMock() mock_response.json.return_value = {'access_token': 'test_token'} mock_response.raise_for_status = MagicMock() mocker.patch('inventory_provider.gap.requests.post', return_value=mock_response) aai_config = { 'discovery_endpoint_url': 'http://example.com/aai', 'inventory_provider': {'client_id': 'test_id', 'secret': 'test_secret'} } token = gap.get_token(aai_config) assert token == 'test_token' def test_extract_router_info(mocker): device = { 'product': {'tag': 'RTR'}, 'subscriptionId': 'test_subscription_id' } mocker.patch('inventory_provider.gap.make_request', return_value={ 'data': { 'subscriptions': { 'page': [{ 'productBlockInstances': [{ 'productBlockInstanceValues': [ {'field': 'routerFqdn', 'value': 'test_fqdn'}, {'field': 'vendor', 'value': 'test_vendor'} ] }] }] } } }) config = { "aai": { "discovery_endpoint_url": "https://sample-url", "inventory_provider": { "client_id": "test_id", "secret": "test_secret" } }, "orchestrator": { "url": "orchestrator-url" } } router_info = gap.extract_router_info(device, 'test_token', config) assert router_info == {'fqdn': 'test_fqdn', 'vendor': 'test_vendor'} def test_load_routers_from_orchestrator(mocker): mocker.patch('inventory_provider.gap.make_request', return_value={ 'data': { 'subscriptions': { 'page': [ {'subscriptionId': '1', 'product': {'tag': 'RTR'}}, {'subscriptionId': '2', 'product': {'tag': 'OFFICE_ROUTER'}} ], "pageInfo": { "totalItems": 2, "startCursor": 0, "hasPreviousPage": False, "hasNextPage": False, "endCursor": 2 } } } }) mocker.patch('inventory_provider.gap.extract_router_info', side_effect=[ {'fqdn': 'fqdn1', 'vendor': 'vendor1'}, {'fqdn': 'fqdn2', 'vendor': 'vendor2'} ]) mocker.patch('inventory_provider.gap.get_token', return_value='test_token') config = { "aai": { "discovery_endpoint_url": "https://sample-url", "inventory_provider": { "client_id": "test_id", "secret": "test_secret" } }, "orchestrator": { "url": "orchestrator-url" } } routers = gap.load_routers_from_orchestrator(config) assert routers == {'fqdn1': 'vendor1', 'fqdn2': 'vendor2'}