"""Tests for Show Family handler.""" import json from unittest.mock import MagicMock from oto import response from oto import status from sqlalchemy.exc import SQLAlchemyError from podcast.logic import show_family def test_get_show_family_by_id(fixture_client): """Test to get show family by id.""" show_family_id = 1 result = fixture_client.get('/show-family-by-id/{}'.format(show_family_id)) assert result data = json.loads(result.data.decode()) assert data['id'] == show_family_id def test_get_show_family_by_id_not_found(fixture_client): """Test to get show family by id gives 404 with wrong id.""" show_family_id = 99 result = fixture_client.get('/show-family-by-id/{}'.format(show_family_id)) assert result.status_code == response.status.NOT_FOUND def test_get_show_families_handler(fixture_client, monkeypatch, show_family_fixture): """Test get_show_families handler.""" monkeypatch.setattr( show_family, 'get_show_families', MagicMock( return_value={'items': [show_family_fixture]})) result = fixture_client.get('/show-families') show_family.get_show_families.assert_called_once_with(0, 0, [], []) assert result.status_code == status.OK assert len(result.json['items']) == 1 def test_get_show_families_handler_with_params(fixture_client, monkeypatch, show_family_fixture): """Test get_show_families handler with paramaters.""" monkeypatch.setattr( show_family, 'get_show_families', MagicMock( return_value={'items': [[show_family_fixture]]})) params = '?limit=12&offset=0&network_ids=1&network_ids=2&ids=3&ids=4' result = fixture_client.get('/show-families' + params) show_family.get_show_families.assert_called_once_with(12, 0, [1, 2], [3, 4]) assert result.status_code == status.OK assert len(result.json['items']) == 1 def test_get_show_families_handler_unhandled_error(fixture_client, monkeypatch): """Test that get_show_families return 500 on SQLAlchemy error.""" error_message = 'critical' monkeypatch.setattr(show_family, 'get_show_families', MagicMock( side_effect=SQLAlchemyError(error_message) )) result = fixture_client.get('/show-families') assert result.status_code == status.INTERNAL_ERROR