"""Tests for handlers.""" from unittest.mock import MagicMock from oto import status from sqlalchemy.exc import SQLAlchemyError from asset_transcoder import config from asset_transcoder.constants import urls from asset_transcoder.logic import asset_upload from asset_transcoder.models import asset_upload as asset_upload_model from asset_transcoder.utils.exceptions import OwsError def test_assets_by_ids_and_type_bad_type(fixture_client, monkeypatch): """Test assets_by_ids_and_type bad type.""" monkeypatch.setattr(urls, 'IP_ADDR_HEADER', 'HTTP_X_FORWARDED_FOR') monkeypatch.setattr(config, 'LOCAL_CLIENT_IP', '0.0.0.0') result = fixture_client.get('/assets/cow?object_ids=1', headers={ 'X-Forwarded-For': '0.0.0.0' }) assert result.status_code == 400 assert result.json == {'message': 'Invalid object type: cow'} def test_assets_by_id_and_type_success(fixture_client, monkeypatch, asset_upload_wav_fixture): """Test assets by id and type success.""" query_string = { 'object_id': 4, 'object_type': 'episode', 'asset_type': 'WAV' } monkeypatch.setattr( asset_upload, 'get_asset_by_id_and_type', MagicMock( return_value=asset_upload_wav_fixture)) result = fixture_client.get('/asset-by-id-and-type', query_string=query_string) assert result.status_code == 200 assert result.json['filename'] == 'bucket_filename_8' def test_replicate_episodes_audio_assets(fixture_client, monkeypatch, episode_replication_fixture): """Test post replicate episodes audio assets endpoint.""" url = '/replicate-episodes-audio-assets' return_data = {'items': []} monkeypatch.setattr( asset_upload, 'replicate_episodes_audio_assets', MagicMock(return_value=return_data) ) result = fixture_client.post(url, json=episode_replication_fixture) assert result.status_code == status.OK assert result.json == return_data def test_replicate_episodes_audio_assets_bad_request(fixture_client, monkeypatch, episode_replication_fixture): """Test post replicate episodes audio assets endpoint with bad request.""" url = '/replicate-episodes-audio-assets' monkeypatch.setattr( asset_upload, 'replicate_episodes_audio_assets', MagicMock( side_effect=OwsError.bad_request('error'))) result = fixture_client.post(url, json=episode_replication_fixture) assert result.status_code == status.BAD_REQUEST def test_replicate_episodes_audio_assets_unhandled_error(fixture_client, monkeypatch, episode_replication_fixture): """Test post replicate episodes audio assets endpoint with unhandled error.""" url = '/replicate-episodes-audio-assets' monkeypatch.setattr(asset_upload_model, 'get_episodes_audio_assets', MagicMock( side_effect=SQLAlchemyError('error_message') )) result = fixture_client.post(url, json=episode_replication_fixture) assert result.status_code == status.INTERNAL_ERROR def test_replicate_podcast_artwork_asset(fixture_client, monkeypatch): """Test post replicate podcast artwork asset.""" url = '/replicate-podcast-artwork-asset' return_data = {'items': []} payload = { 'original_podcast_id': 1, 'podcast_id': 1 } monkeypatch.setattr( asset_upload, 'replicate_podcast_artwork_asset', MagicMock(return_value=return_data) ) result = fixture_client.post(url, json=payload) assert result.status_code == status.OK assert result.json == return_data