"""Test poll_audio_asset_status.""" import json from unittest.mock import patch from common.lambda_exceptions import AudioException from constants.asset import ENCODING_COMPLETED import pytest from src.index import check_audio_valid from src.index import handler @patch('src.index.config.get_current_logger') @patch('src.index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, { 'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None }, ]) @patch('src.index.graphql_gateway') def test_check_audio_valid( mock_graphql_gateway, mock_get_product_track_assets, mock_logger, loaded_json): """Test get asset status calls expected graphql function with args.""" tuid = 12345 correlation_id = 'test_correlation' output = check_audio_valid(loaded_json.product, tuid, correlation_id) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None} @patch('src.index.config.get_current_logger') @patch('src.index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': 'new', 'trackUniqueId': 12345, 'correction': None}, ]) @patch('src.index.graphql_gateway') def test_get_asset_status_raises_exception_when_status_invalid( mock_graphql_gateway, mock_get_product_track_assets, mock_logger, loaded_json): """Test get asset status raises exception when status invalid.""" tuid = 12345 correlation_id = 'test_correlation' with pytest.raises(AudioException): check_audio_valid(loaded_json.product, tuid, correlation_id) mock_get_product_track_assets.assert_called_once_with( mock_graphql_gateway, str(loaded_json.product.product_id), True ) @patch('src.index.config.get_current_logger') @patch('src.index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None}, ]) @patch('src.index.graphql_gateway') def test_get_asset_status_v2_flow( mock_graphql_gateway, mock_get_product_track_assets, mock_logger, loaded_json): """Test get_asset_status calls graphql with expected V2 args.""" tuid = 12345 correlation_id = 'test_correlation' output = check_audio_valid(loaded_json.product, tuid, correlation_id) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None} mock_get_product_track_assets.assert_called_once_with( mock_graphql_gateway, str(loaded_json.product.product_id), True ) @patch('src.index.config.get_current_logger') @patch('src.index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': 'wrong', 'trackUniqueId': 12345, 'correction': None}, ]) @patch('src.index.graphql_gateway') def test_get_asset_status_v2_flow_raises_exception_invalid_status( mock_graphql_gateway, mock_get_product_track_assets, mock_logger, loaded_json): """Test get_asset_status V2 flow raises exception when status invalid.""" tuid = 12345 correlation_id = 'test_correlation' with pytest.raises(AudioException): check_audio_valid(loaded_json.product, tuid, correlation_id) mock_get_product_track_assets.assert_called_once_with( mock_graphql_gateway, str(loaded_json.product.product_id), True ) @patch('src.index.config.get_current_logger') @patch('src.index.get_product_track_assets', return_value=[ {'status': 'missing', 'trackUniqueId': 12346, 'correction': None}, {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None}, ]) @patch('src.index.graphql_gateway') def test_get_asset_status_handles_nonexistant_subaccount_id( mock_graphql_gateway, mock_get_product_track_assets, mock_logger, loaded_json): """Test get asset status method handles a nonexistant subaccount_id.""" loaded_json.product.subaccount_id = None tuid = 12345 correlation_id = 'test_correlation' output = check_audio_valid(loaded_json.product, tuid, correlation_id) assert output == {'status': ENCODING_COMPLETED, 'trackUniqueId': 12345, 'correction': None} mock_get_product_track_assets.assert_called_once_with( mock_graphql_gateway, str(loaded_json.product.product_id), True ) @patch('src.index.log_catalog_action') @patch('src.index.config.get_current_logger') @patch('src.index.check_audio_valid') def test_handler(mock_check_audio_valid, mock_logger, mock_catalog_session, context_json_audio): """Test handler.""" handler(json.loads(context_json_audio), None) mock_check_audio_valid.assert_called_once() mock_catalog_session.assert_called_once()