"""Test handler.""" from unittest.mock import MagicMock, patch from ddex_ingester_common.constants.country_codes import ALL_COUNTRY_CODES from ddex_ingester_common.schemas.state_machine_schema import \ StateMachineSchema import index from constants import queries @patch('index.logger') @patch('index.graphql.GraphQLConnector.set_headers') @patch('index.graphql.GraphQLConnector.execute') def test_handler( mock_graphql_execute, mock_graphql_set_headers, mock_current_logger): """Test the main handler.""" mock_logger = MagicMock(name='info') mock_current_logger.return_value = mock_logger mock_event = { 'product': { 'status': None, 'display_artist_name': 'Cool Artist', 'vendor_id': None, 'subaccount_id': None, 'upc': '231232563123', 'product_id': 234324, 'is_main_release': True, 'release_type': 'release', 'release_reference': 'R0', 'artwork': None, 'original_release_date': None, 'sale_start_date': None, 'grid': 'A0145345234523453452', 'catalog_number': 'G0134523452345245', 'original_values': {'sale_start_date': None}, 'product_name': 'Test Artist', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'bucket': 'ddex-bucket', 'key': 'key', 'errors': None, 'message_id': '12345', 'message_thread_id': '12345_12345', 'party_id': 'PADPIDA2012041004F', 'update_indicator': 'OriginalMessage' } mock_graphql_execute.return_value = { 'data': { 'productByUpc': { 'vendorId': None, 'subaccountId': None, 'productId': 234324 } } } index.handler(mock_event, None) assert mock_graphql_set_headers.called mock_graphql_execute.assert_called_with( queries.set_carveouts, { 'data': { 'productId': 234324, 'upc': '231232563123', 'countryCodes': ALL_COUNTRY_CODES } } ) def test_format_carveout_data(): """Test format_carveout_data.""" mock_state_machine = { 'product': { 'display_artist_name': 'Cool Artist', 'upc': '231232563123', 'is_main_release': True, 'release_type': 'release', 'release_reference': 'R0', 'artwork': None, 'original_release_date': None, 'sale_start_date': None, 'grid': 'A0145345234523453452', 'catalog_number': 'G0134523452345245', 'product_name': 'Test Artist' }, 'bucket': 'ddex-bucket', 'key': 'key', 'message_id': '12345', 'message_thread_id': '12345_12345', 'update_indicator': 'OriginalMessage' } product_id = 123 state_machine = StateMachineSchema().load(mock_state_machine) expected_response = { 'productId': product_id, 'upc': '231232563123', 'countryCodes': ALL_COUNTRY_CODES } carveout_data = index.format_carveout_data( product_id, state_machine.product.upc ) assert carveout_data == expected_response @patch('index.graphql.GraphQLConnector.set_headers') @patch('index.graphql.GraphQLConnector.execute') def test_purged_awal_ddex( mock_graphql_execute, mock_graphql_set_headers, awal_purged_state_machine): """Test AWAL purged DDEX.""" mock_graphql_execute.return_value = { 'data': { 'productByUpc': { 'vendorId': None, 'subaccountId': None, 'productId': 234324 } } } index.handler(awal_purged_state_machine, None) assert mock_graphql_set_headers.called mock_graphql_execute.assert_called_with( queries.set_carveouts, { 'data': { 'productId': 234324, 'upc': '123', 'countryCodes': ALL_COUNTRY_CODES } } )