"""Tests for exception handler.""" from unittest.mock import MagicMock from oto import status from sqlalchemy.exc import SQLAlchemyError from podcast.constants import error from podcast.logic import feed from podcast.utils import exc def test_create_feed_handler(fixture_client, monkeypatch): """Test create feed handler.""" data = dict( podcast_id=1, show_family_id=1, title='test_feed_title', description='feed_summary', feed_type='public_rss', channel_id='test_channel_id', artwork_filename='testartwork.jpg' ) monkeypatch.setattr( feed, 'create_feed', MagicMock( return_value=data)) result = fixture_client.post('/feed', json=data) assert result.status_code == status.OK def test_create_feed_handler_bad_params(fixture_client, monkeypatch): """Test create feed handler with bad params.""" data = dict() monkeypatch.setattr( feed, 'create_feed', MagicMock( side_effect=exc.OwsError.bad_request(error.ERROR_MESSAGE_EMPTY_BODY))) result = fixture_client.post('/feed', data=data) assert result.status_code == status.BAD_REQUEST def test_get_feeds_by_show_family_handler(fixture_client, monkeypatch): """Test get podcasts by ids handler.""" show_family_id = 1 handler_url = '/feeds-by-show-family-id/{show_family_id}'.format(show_family_id=show_family_id) monkeypatch.setattr( feed, 'get_feeds_by_show_family_id', MagicMock()) result = fixture_client.get(handler_url) assert result.status_code == status.OK def test_get_earliest_feeds_by_show_family_ids(fixture_client, monkeypatch, podcast_fixture, podcast_fixture_2): """Test get_earliest_feeds_by_show_family_ids handler.""" monkeypatch.setattr( feed, 'get_earliest_feeds_by_show_family_ids', MagicMock( return_value={'items': [podcast_fixture, podcast_fixture_2]})) params = '?show_family_ids=1,2' result = fixture_client.get('/earliest-feeds-by-show-family-ids' + params) feed.get_earliest_feeds_by_show_family_ids.assert_called_once_with(['1', '2']) assert result.status_code == status.OK assert len(result.json['items']) == 2 def test_get_earliest_feeds_by_show_family_ids_unhandled_error(fixture_client, monkeypatch): """Test that get_earliest_feeds_by_show_family_ids return 500 on SQLAlchemy error.""" error_message = 'critical' monkeypatch.setattr(feed, 'get_earliest_feeds_by_show_family_ids', MagicMock( side_effect=SQLAlchemyError(error_message) )) result = fixture_client.get('/earliest-feeds-by-show-family-ids') assert result.status_code == status.INTERNAL_ERROR