"""Create job functional tests.""" import json from http.client import OK from typing import Any import boto3 import pytest from video.constants import job_io_fields, job_types from video.constants.product import MUSIC_VIDEO_DISTRIBUTION_FORMAT_ID from video.models.sql.classes import release from tests.unit import db_utils from tests.unit.factories.ows import product as product_factory @pytest.mark.parametrize( ( "ows_product_status_code", "product_a", "expected_status_code", "expected_message", ), [ ( OK, product_factory.ProductFactory( product_id=123456, distribution_format_id=MUSIC_VIDEO_DISTRIBUTION_FORMAT_ID, ), OK, { "type": job_types.TRANSFER_PRORES_FROM_S3_TO_RIPPER, "inputs": { job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: "xxxxx", job_io_fields.UPC: 999999876543, }, "context": { "product_id": 123456, }, }, ), ], ) @db_utils.test_schema def test_create_job( mocker: Any, client: Any, ows_product_status_code: int, product_a: Any, expected_status_code: int, expected_message: dict[str, Any], ) -> None: """Test jobs.""" mocker.patch.object( release, "get_by_id_with_vendor", return_value=product_a.to_dict(), autospec=True, ) with client as c: create_job_response = c.post( "/job", data=json.dumps(expected_message), headers={ "Content-Type": "application/json", }, ) assert expected_status_code == create_job_response.status_code data = json.loads(create_job_response.get_data().decode()) assert job_types.TRANSFER_PRORES_FROM_S3_TO_RIPPER == data["type"] assert { job_io_fields.PRORES_MEZZANINE_OUTPUT_S3_KEY: "xxxxx", job_io_fields.UPC: 999999876543, } == data["inputs"] assert product_a.product_id == data["context"]["product_id"] def test_get_cloud_transfer_progress(mocker: Any, client: Any) -> None: """Test get cloud transfer progress.""" mock_client = mocker.patch.object(boto3, "client", autospec=True) ( mock_client.return_value.get_object.return_value["Body"].read.return_value ) = json.dumps({"a": "b"}) with client as c: get_cloud_transfer_progress_response = c.get( "/workflow/12321/transfer/tester.mov/progress" ) assert json.loads(get_cloud_transfer_progress_response.get_data().decode()) == { "a": "b" } assert get_cloud_transfer_progress_response.status_code == 200