"""Test graphql_requests helper.""" from unittest.mock import MagicMock, patch from common.schemas.state_machine_schema import StateMachineSchema import config from src.constants import general, graphql_queries from src.helpers.graphql_requests import create_new_subaccount, \ create_new_vendor, get_product_by_upc, get_subaccount_for_vendor, \ get_vendor_for_rep_owner_code, update_external_identifier_1 @patch('config.ows_client.graphql_query') def test_get_vendor_for_rep_owner_code( mock_graphql, mock_event): """Test get_vendor_for_rep_owner_code.""" sm_context = StateMachineSchema().load(mock_event) # Mock the return value of graphql_query mock_response = MagicMock() mock_response.json.return_value = { 'data': {'vendorsByExternalIdentifier': [{'vendorId': '123'}]} } mock_graphql.return_value = mock_response mock_logger = MagicMock() # Call the function result = get_vendor_for_rep_owner_code(mock_logger, sm_context) # Assertions assert result == [{'vendorId': '123'}] mock_graphql.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.get_vendor, variables={ 'externalIdentifier': '0207', 'owner': config.OWNER }, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717', **config.GRAPHQL_HEADERS, ) @patch('config.ows_client.graphql_query') def test_get_subaccount_for_vendor( mock_graphql, mock_event): """Test get_subaccount_for_vendor.""" sm_context = StateMachineSchema().load(mock_event) mock_logger = MagicMock() # Mock the return value of graphql_query mock_response = MagicMock() mock_response.json.return_value = { 'data': { 'vendor': { 'subaccounts': { 'subaccounts': [ { 'subaccountId': 1212, 'name': 'Subaccount Name' }, { 'subaccountId': 1213, 'name': 'Subaccount Name2' }, ] } } } } mock_graphql.return_value = mock_response # Call the function result = get_subaccount_for_vendor(mock_logger, sm_context, 123) # Assertions assert result == [{'name': 'Subaccount Name', 'subaccountId': 1212}] mock_graphql.assert_called_once_with( service_name='graphql-router', query=graphql_queries.get_subaccounts, variables={ 'vendorId': 123, 'limit': config.LIMIT_SUBACCOUNTS }, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717', **config.GRAPHQL_HEADERS, ) @patch('config.ows_client.graphql_query') def test_get_product_by_upc(mock_graphql, mock_event): """Test get_product_by_upc.""" sm_context = StateMachineSchema().load(mock_event) # Mock the return value of graphql_query mock_response = MagicMock() mock_logger = MagicMock() mock_response.json.return_value = { 'data': {'productByUpc': {'vendorId': 123, 'subaccountId': 456, 'notForDistribution': 'N'}} } mock_graphql.return_value = mock_response # Call the function result = get_product_by_upc(mock_logger, sm_context) # Assertions assert result == {'vendorId': 123, 'subaccountId': 456, 'notForDistribution': 'N'} mock_graphql.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.get_product, variables={ 'upc': '196874433225' }, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717', **config.GRAPHQL_HEADERS, ) @patch('config.ows_client.graphql_query') def test_get_product_by_upc_product_does_not_exist( mock_graphql, mock_event): """Test get_product_by_upc.""" sm_context = StateMachineSchema().load(mock_event) # Mock the return value of graphql_query mock_response = MagicMock() mock_logger = MagicMock() mock_response.json.return_value = { 'data': {'productByUpc': None} } mock_graphql.return_value = mock_response # Call the function result = get_product_by_upc(mock_logger, sm_context) # Assertions assert result is None mock_graphql.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.get_product, variables={ 'upc': '196874433225' }, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717', **config.GRAPHQL_HEADERS, ) @patch('config.ows_client.graphql_query') def test_create_new_vendor(mock_graphql_query, mock_event): """Test create_new_vendor function.""" # Mock logger sm_context = StateMachineSchema().load(mock_event) # Mock parent_repertoire_owner_name sm_context.product.parent_repertoire_owner_name = 'Test Owner' # Mock GraphQL response mock_response = MagicMock() mock_logger = MagicMock() mock_response.json.return_value = { 'data': { 'createVendor': { 'vendorId': '123', 'name': 'Test Owner', 'uuid': '6821fb18-1b66-11f0-a464-023d593e8e61', } } } mock_graphql_query.return_value = mock_response # Call the function result = create_new_vendor(mock_logger, sm_context) # Assertions assert result == { 'vendorId': '123', 'name': 'Test Owner', 'uuid': '6821fb18-1b66-11f0-a464-023d593e8e61', } mock_graphql_query.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.create_vendor, variables={ 'input': { 'name': 'Test Owner', 'companyBrandName': general.COMPANY_BRAND_NAME, 'currency': general.CURRENCY, 'owner': general.OWNER, 'serviceTierUuid': general.SERVICE_TIER_UUID, 'isDistributor': general.IS_DISTRIBUTOR, } }, **config.GRAPHQL_HEADERS, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717' ) @patch('config.ows_client.graphql_query') def test_update_external_identifier_1(mock_graphql_query, mock_event): """Test update_external_identifier_1 function.""" sm_context = StateMachineSchema().load(mock_event) sm_context.product.parent_repertoire_owner_code = 'TEST_CODE' mock_logger = MagicMock() # Mock GraphQL response mock_response = MagicMock() mock_response.json.return_value = { 'data': { 'updateVendorExternalIdentifier1': { 'vendorId': '123', } } } mock_graphql_query.return_value = mock_response # Call the function result = update_external_identifier_1(mock_logger, sm_context, 'vendor_uuid') # Assertions assert result == {'vendorId': '123'} mock_graphql_query.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.update_external_identifier_1, variables={ 'uuid': 'vendor_uuid', 'externalIdentifier1': 'TEST_CODE' }, **config.GRAPHQL_HEADERS, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717' ) @patch('config.ows_client.graphql_query') def test_create_new_subaccount(mock_graphql_query, mock_event): """Test create_new_subaccount function.""" # Mock logger sm_context = StateMachineSchema().load(mock_event) mock_logger = MagicMock() # Mock parent_repertoire_owner_name sm_context.product.repertoire_owner_name = 'Test Subaccount' sm_context.product.repertoire_owner_code = 'TEST_CODE' # Mock GraphQL response mock_response = MagicMock() mock_response.json.return_value = { 'data': { 'createSubaccount': { 'subaccountId': 123, } } } mock_graphql_query.return_value = mock_response # Call the function result = create_new_subaccount(mock_logger, sm_context, 456) # Assertions assert result == {'subaccountId': 123} mock_graphql_query.assert_called_once_with( service_name=config.GRAPHQL_SERVICE, query=graphql_queries.create_subaccount, variables={ 'input': { 'subaccountName': 'Test Subaccount', 'vendorId': 456, 'description': 'TEST_CODE', } }, **config.GRAPHQL_HEADERS, correlation_id='97f28b3a-171e-44f9-bf47-c2cce1a73717' )