"""Test create_video lambda.""" from unittest.mock import patch from ddex_ingester_common.models.s3.body import Body as S3Context from ddex_ingester_common.models.state_machine.body import \ Body as StateMachineContext from ddex_ingester_common.schemas.s3_schema import S3Schema from ddex_ingester_common.schemas.state_machine_schema import \ StateMachineSchema import index from constants import queries @patch('index.logger') @patch('index.load_ddex_json') @patch('index.create_video') def test_handler( mock_create_video, mock_load_ddex_json, mock_logger, context_data): """Test handler.""" mock_load_ddex_json.return_value = context_data index.handler(context_data, None) mock_create_video.assert_called() args, _ = mock_create_video.call_args assert len(args) == 2 assert isinstance(args[0], StateMachineContext) assert isinstance(args[1], S3Context) @patch('index.graphql_gateway.execute') def test_create_video( mock_graphql_execute, context_data): """Test create_video when there is no product.""" context = StateMachineSchema().load(context_data) s3_context = S3Schema().load(context_data) project_id = context_data['project_id'] mock_response = { 'data': { 'saveVideoSingleProduct': { 'productId': 123, }, 'productByUpc': None, } } mock_graphql_execute.return_value = mock_response expected_payload = { 'data': { 'create': { 'upc': context.product.upc, 'accountId': context.product.vendor_id, 'subaccountId': context.product.subaccount_id, 'projectId': str(project_id), 'typeOfVideo': s3_context.video.video_type, 'isrc': s3_context.video.isrc, 'notForDistribution': context.product.not_for_distribution, } } } return_value = index.create_video(context, s3_context) mock_graphql_execute.assert_called_with( queries.save_video_single_product, expected_payload ) assert return_value == mock_response['data']['saveVideoSingleProduct'] @patch('index.graphql_gateway.execute') def test_create_video_for_awal( mock_graphql_execute, context_data): """Test create_video when there is no product.""" context = StateMachineSchema().load(context_data) context.ddex_provider = 'AWAL' s3_context = S3Schema().load(context_data) project_id = context_data['project_id'] mock_response = { 'data': { 'saveVideoSingleProduct': { 'productId': 123, }, 'productByUpc': None, } } mock_graphql_execute.return_value = mock_response expected_payload = { 'data': { 'create': { 'upc': context.product.upc, 'accountId': context.product.vendor_id, 'subaccountId': context.product.subaccount_id, 'projectId': str(project_id), 'typeOfVideo': s3_context.video.video_type, 'isrc': s3_context.video.isrc, 'notForDistribution': context.product.not_for_distribution, } } } return_value = index.create_video(context, s3_context) mock_graphql_execute.assert_called_with( queries.save_video_single_product, expected_payload ) assert return_value == mock_response['data']['saveVideoSingleProduct'] @patch('index.graphql_gateway.execute') def test_create_video_already_exists( mock_graphql_execute, context_data): """Test create_video when the product already exists.""" context = StateMachineSchema().load(context_data) s3_context = S3Schema().load(context_data) mock_response = { 'data': { 'saveVideoSingleProduct': { 'productId': 123, }, 'productByUpc': { 'productId': 123, } } } mock_graphql_execute.return_value = mock_response return_value = index.create_video(context, s3_context) mock_graphql_execute.assert_called_with( queries.check_product_upc_exists, {'upc': context.product.upc} ) assert return_value is None