"""Test set_product_to_complete handler.""" from unittest.mock import ANY, call, patch import index from constants import graphql_queries, sql_queries @patch('index.secrets_manager_client') @patch('index.config.graphql_gateway') @patch('index.run_rds_query') def test_handler( mock_run_rds_query, mock_graphql_gateway, mock_secrets_manager): """Test the handler.""" upc_1 = '196925302166' upc_2 = '196925302401' mock_run_rds_query.return_value = [ {'upc': upc_1}, {'upc': upc_2}, ] mock_graphql_gateway.execute.side_effect = [ { 'data': { 'productByUpc': { 'productId': 123, } } }, { 'data': { 'productByUpc': { 'productId': 321, } } }, { 'data': { 'approveProduct': { 'productId': 123, } } }, { 'data': { 'approveProduct': { 'productId': 321, } } } ] index.handler({}, None) mock_secrets_manager.get_cred.assert_called() graphql_calls = mock_graphql_gateway.execute.call_args_list assert graphql_calls == [ call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_1}), call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_2}), call(graphql_queries.APPROVE_AUDIO_PRODUCT, {'productId': 123}), call(graphql_queries.APPROVE_AUDIO_PRODUCT, {'productId': 321}), ] rds_calls = mock_run_rds_query.call_args_list assert rds_calls == [ call(ANY, ANY, ANY, ANY, ANY, sql_queries.SELECT_UPC_N_ROWS, 60), call(ANY, ANY, ANY, ANY, ANY, sql_queries.UPDATE_ROW_PRODUCT_SET_TO_COMPLETE, int(upc_1)), call(ANY, ANY, ANY, ANY, ANY, sql_queries.UPDATE_ROW_PRODUCT_SET_TO_COMPLETE, int(upc_2)), ] @patch('index.secrets_manager_client') @patch('index.config.graphql_gateway') @patch('index.run_rds_query') def test_handler_video_accounting_dummy( mock_run_rds_query, mock_graphql_gateway, mock_secrets_manager): """Test the handler.""" upc = '196925302166' product_id = 123 mock_run_rds_query.return_value = [ {'upc': upc}, ] mock_graphql_gateway.execute.side_effect = [ { 'data': { 'productByUpc': { 'productId': product_id, 'vendorId': 39580, 'subaccountId': None, 'status': 'in_content', 'notForDistribution': 'AccountingDummy', 'videoProduct': { 'typeOfVideo': 'OFFICIAL_MUSIC_VIDEO' } } } }, { 'data': { 'approveVideoSingleProduct': { 'productId': product_id, } } } ] index.handler({}, None) mock_secrets_manager.get_cred.assert_called() graphql_calls = mock_graphql_gateway.execute.call_args_list assert graphql_calls == [ call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc}), call( graphql_queries.APPROVE_VIDEO_PRODUCT, {'data': { 'productId': product_id, 'approvalType': 'FINAL', 'bypassValidation': True }} ) ] rds_calls = mock_run_rds_query.call_args_list assert rds_calls == [ call(ANY, ANY, ANY, ANY, ANY, sql_queries.SELECT_UPC_N_ROWS, 60), call(ANY, ANY, ANY, ANY, ANY, sql_queries.UPDATE_ROW_PRODUCT_SET_TO_COMPLETE, int(upc)) ] @patch('index.secrets_manager_client') @patch('index.config.graphql_gateway') @patch('index.run_rds_query') def test_handler_graphql_exception( mock_run_rds_query, mock_graphql_gateway, mock_secrets_manager): """Test the handler.""" upc_1 = '196925302166' upc_2 = '196925302401' mock_run_rds_query.return_value = [ {'upc': upc_1}, {'upc': upc_2}, ] mock_graphql_gateway.execute.side_effect = [ Exception(), { 'data': { 'productByUpc': { 'productId': 321, } } }, { 'data': { 'approveProduct': { 'productId': 321, } } } ] index.handler({}, None) mock_secrets_manager.get_cred.assert_called() graphql_calls = mock_graphql_gateway.execute.call_args_list assert graphql_calls == [ call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_1}), call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_2}), call(graphql_queries.APPROVE_AUDIO_PRODUCT, {'productId': 321}), ] @patch('index.secrets_manager_client') @patch('index.config.graphql_gateway') @patch('index.run_rds_query') def test_handler_product_not_found( mock_run_rds_query, mock_graphql_gateway, mock_secrets_manager): """Test the handler.""" upc_1 = '196925302166' upc_2 = '196925302401' mock_run_rds_query.return_value = [ {'upc': upc_1}, {'upc': upc_2}, ] mock_graphql_gateway.execute.side_effect = [ { 'data': { 'productByUpc': None } }, { 'data': { 'productByUpc': { 'productId': 321, } } }, { 'data': { 'approveProduct': { 'productId': 321, } } }, ] index.handler({}, None) mock_secrets_manager.get_cred.assert_called() graphql_calls = mock_graphql_gateway.execute.call_args_list rds_calls = mock_run_rds_query.call_args_list assert rds_calls == [ call(ANY, ANY, ANY, ANY, ANY, sql_queries.SELECT_UPC_N_ROWS, 60), call(ANY, ANY, ANY, ANY, ANY, sql_queries.UPDATE_ROW_PRODUCT_SET_TO_NOT_FOUND, int(upc_1)), call(ANY, ANY, ANY, ANY, ANY, sql_queries.UPDATE_ROW_PRODUCT_SET_TO_COMPLETE, int(upc_2)), ] assert graphql_calls == [ call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_1}), call(graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc_2}), call(graphql_queries.APPROVE_AUDIO_PRODUCT, {'productId': 321}), ] @patch('index.secrets_manager_client') @patch('index.config.graphql_gateway') @patch('index.run_rds_query') def test_handler_db_exception( mock_run_rds_query, mock_graphql_gateway, mock_secrets_manager): """Test the handler.""" mock_run_rds_query.side_effect = [ Exception() ] index.handler({}, None) mock_graphql_gateway.execute.assert_not_called()