"""Test poll_audio_asset_status.""" from unittest.mock import patch import pytest from ddex_ingester_common.lambda_exceptions import AudioException from ddex_ingester_common.schemas.state_machine_schema import \ StateMachineSchema from constants.asset import ENCODING_COMPLETED from index import get_asset_status, handler @patch('index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345}, ]) @patch('index.graphql_gateway') def test_get_asset_status_for_release_corrected_asset( mock_graphql_gateway, mock_get_asset_status, product): """Test get asset status calls expected graphql function with args.""" tuid = 12345 output = get_asset_status(product, tuid) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345} mock_get_asset_status.assert_called_once_with( mock_graphql_gateway, product.product_id, True ) @patch('index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None}, ]) @patch('index.graphql_gateway') def test_get_asset_status_v2_flow( mock_graphql_gateway, mock_get_asset_status, product): """Test get asset status v2 calls expected graphql function with args.""" tuid = 12345 output = get_asset_status(product, tuid) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None} mock_get_asset_status.assert_called_once_with( mock_graphql_gateway, product.product_id, True ) @patch('index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': 'wrong', 'trackUniqueId': 12345, 'correction': None}, ]) @patch('index.graphql_gateway') def test_get_asset_status_v2_flow_raises_exception_invalid_status( mock_graphql_gateway, mock_get_asset_status, product): """Test get asset status v2 flow raises exception when status invalid.""" tuid = 12345 with pytest.raises(AudioException): get_asset_status(product, tuid) mock_get_asset_status.assert_called_once_with( mock_graphql_gateway, product.product_id, True ) @patch('index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None}, ]) @patch('index.graphql_gateway') def test_get_asset_status_handles_nonexistant_subaccount_id( mock_graphql_gateway, mock_get_asset_status, product): """Test get asset status method handles a nonexistant subaccount_id.""" product.subaccount_id = None tuid = 12345 output = get_asset_status(product, tuid) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None} mock_get_asset_status.assert_called_once_with( mock_graphql_gateway, product.product_id, True ) @patch('index.StateMachineSchema.load', wrap=StateMachineSchema.load) @patch('index.StateMachineSchema.dump', wrap=StateMachineSchema.dump) @patch('index.logger') @patch('index.get_asset_status') def test_handler(mock_get_asset_status, mock_logger, mock_context_schema_dump, mock_context_schema_load, lambda_input): """Test handler.""" handler(lambda_input, None) mock_get_asset_status.assert_called_once() mock_context_schema_load.assert_called_once() mock_context_schema_dump.assert_called_once()