"""Test write_mezz_video_locations_to_video_asset_table.""" import json from unittest.mock import call import pytest from video.constants import job_io_fields from video.logic.activities import ( write_mezz_video_locations_to_video_asset_table as activity) @pytest.mark.parametrize(( 'test_description', 'test_input', 'expected_assert_calls', 'expected_output' ), [ ( 'For SD Resolution', { job_io_fields.WRITE_MEZZ_VIDEO_LOCATIONS_TO_VIDEO_ASSET_TABLE_JOB_ID: 123, # noqa job_io_fields.PRODUCT_ID: 1, job_io_fields.TUID: 123, job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: '/prores', job_io_fields.H264_MEZZANINE_OUTPUT_S3_KEY: '/h264', job_io_fields.PRORES_MEZZANINE_METADATA: json.dumps({ job_io_fields.VIDEO_STREAM_WIDTH_PIXELS: 720, job_io_fields.VIDEO_STREAM_HEIGHT_PIXELS: 480, job_io_fields.VIDEO_STREAM_DURATION_SECONDS: 12, job_io_fields.AUDIO_STREAM_DURATION_SECONDS: 12.22, }) }, [ call({ 'product_id': 1, 'asset_type': job_io_fields.VIDEO_MASTER, 'asset_path': '/prores', 'tuid': 123, 'duration': 12.22, }), call({ 'product_id': 1, 'asset_type': job_io_fields.H264_SD, 'asset_path': '/h264', 'tuid': 123, 'duration': 12.22, }) ], { job_io_fields.VIDEO_MASTER: '/prores', job_io_fields.H264_SD: '/h264', } ), ( 'For 720HD Resolution', { job_io_fields.WRITE_MEZZ_VIDEO_LOCATIONS_TO_VIDEO_ASSET_TABLE_JOB_ID: 123, # noqa job_io_fields.PRODUCT_ID: 1, job_io_fields.TUID: 123, job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: '/prores', job_io_fields.H264_MEZZANINE_OUTPUT_S3_KEY: '/h264', job_io_fields.PRORES_MEZZANINE_METADATA: json.dumps({ job_io_fields.VIDEO_STREAM_WIDTH_PIXELS: 1280, job_io_fields.VIDEO_STREAM_HEIGHT_PIXELS: 720, job_io_fields.VIDEO_STREAM_DURATION_SECONDS: 12, job_io_fields.AUDIO_STREAM_DURATION_SECONDS: 12.22, }) }, [ call({ 'product_id': 1, 'asset_type': job_io_fields.VIDEO_MASTER, 'asset_path': '/prores', 'tuid': 123, 'duration': 12.22, }), call({ 'product_id': 1, 'asset_type': job_io_fields.H264_HD, 'asset_path': '/h264', 'tuid': 123, 'duration': 12.22, }) ], { job_io_fields.VIDEO_MASTER: '/prores', job_io_fields.H264_HD: '/h264', } ), ( 'For 1080HD Resolution', { job_io_fields.WRITE_MEZZ_VIDEO_LOCATIONS_TO_VIDEO_ASSET_TABLE_JOB_ID: 123, # noqa job_io_fields.PRODUCT_ID: 1, job_io_fields.TUID: 123, job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: '/prores', job_io_fields.H264_MEZZANINE_OUTPUT_S3_KEY: '/h264', job_io_fields.PRORES_MEZZANINE_METADATA: json.dumps({ job_io_fields.VIDEO_STREAM_WIDTH_PIXELS: 1920, job_io_fields.VIDEO_STREAM_HEIGHT_PIXELS: 1080, job_io_fields.VIDEO_STREAM_DURATION_SECONDS: 12, job_io_fields.AUDIO_STREAM_DURATION_SECONDS: 12.22, }) }, [ call({ 'product_id': 1, 'asset_type': job_io_fields.VIDEO_MASTER, 'asset_path': '/prores', 'tuid': 123, 'duration': 12.22, }), call({ 'product_id': 1, 'asset_type': job_io_fields.H264_HD, 'asset_path': '/h264', 'tuid': 123, 'duration': 12.22, }) ], { job_io_fields.VIDEO_MASTER: '/prores', job_io_fields.H264_HD: '/h264', } ), ( 'For 4K Resolution', { job_io_fields.WRITE_MEZZ_VIDEO_LOCATIONS_TO_VIDEO_ASSET_TABLE_JOB_ID: 123, # noqa job_io_fields.PRODUCT_ID: 1, job_io_fields.TUID: 123, job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: '/prores', job_io_fields.H264_MEZZANINE_OUTPUT_S3_KEY: '/h264', job_io_fields.PRORES_MEZZANINE_METADATA: json.dumps({ job_io_fields.VIDEO_STREAM_WIDTH_PIXELS: 3840, job_io_fields.VIDEO_STREAM_HEIGHT_PIXELS: 2160, job_io_fields.VIDEO_STREAM_DURATION_SECONDS: 12, job_io_fields.AUDIO_STREAM_DURATION_SECONDS: 12.22, }) }, [ call({ 'product_id': 1, 'asset_type': job_io_fields.VIDEO_MASTER, 'asset_path': '/prores', 'tuid': 123, 'duration': 12.22, }), call({ 'product_id': 1, 'asset_type': job_io_fields.H264_HD, 'asset_path': '/h264', 'tuid': 123, 'duration': 12.22, }) ], { job_io_fields.VIDEO_MASTER: '/prores', job_io_fields.H264_HD: '/h264', } ), ]) def test_write_mezz_video_locations_to_video_asset_table( mocker, test_description, test_input, expected_assert_calls, expected_output): """Test write_mezz_video_locations_to_video_asset_table.""" mocker.patch.object(activity, 'upsert_video_asset', autospec=True) outputs = activity.write_mezz_video_locations_to_video_asset_table( test_input) activity.upsert_video_asset.assert_has_calls(expected_assert_calls) assert outputs == expected_output