"""Test for Show Family logic tier.""" from unittest.mock import call from unittest.mock import MagicMock import pytest from podcast.logic import show_family as show_family_logic from podcast.models import show_family as show_family_model from podcast.utils.exc import OwsError def test_get_show_family_success_producer(monkeypatch, mock_current_producer_user): """Test get show_family for producer user.""" show_family_data = {'id': 2, 'title': 'title 2', 'network_id': 2} monkeypatch.setattr(show_family_model, 'get_show_family_by_id', MagicMock(return_value=show_family_data)) result = show_family_logic.get_show_family_by_id(2) show_family_model.get_show_family_by_id.assert_has_calls([call(2), call(2)]) assert result == show_family_data def test_get_show_family_success_show_level_user(monkeypatch, mock_current_podcast_level_user): """Test get show_family for show level user.""" show_family_data = {'id': 1, 'title': 'title', 'network_id': 1} monkeypatch.setattr(show_family_model, 'get_show_family_by_id', MagicMock(return_value=show_family_data)) result = show_family_logic.get_show_family_by_id(1) show_family_model.get_show_family_by_id.assert_has_calls([call(1), call(1)]) assert result == show_family_data def test_get_show_family_failure(monkeypatch, mock_current_user): """Test get show_family failure.""" show_family_data = {'id': 2, 'title': 'title', 'network_id': 2} monkeypatch.setattr(show_family_model, 'get_show_family_by_id', MagicMock(return_value=show_family_data)) with pytest.raises(OwsError) as err: show_family_logic.get_show_family_by_id(2) assert err.value.status == 403 def test_get_show_families_admin_user( monkeypatch, show_family_fixture, second_show_family_fixture, third_show_family_fixture, mock_current_admin_user ): """Test get_show_families for org admin user.""" expected_data = [show_family_fixture, second_show_family_fixture, third_show_family_fixture] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families() show_family_model.get_show_families.assert_called_with(0, 0, [1, 2, 4]) assert result['items'] == expected_data assert result['items'][0]['feeds_count'] == 2 assert result['items'][1]['feeds_count'] == 2 assert result['items'][2]['feeds_count'] == 0 def test_get_show_families_network_admin_user( monkeypatch, show_family_fixture, third_show_family_fixture, mock_current_network_admin_user): """Test get_show_families for network admin user.""" expected_data = [show_family_fixture, third_show_family_fixture] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families(10, 20) show_family_model.get_show_families.assert_called_with(10, 20, [1, 4]) assert result['items'] == expected_data assert result['items'][0]['feeds_count'] == 2 assert result['items'][1]['feeds_count'] == 0 def test_get_show_families_network_admin_user_no_access(monkeypatch, mock_current_network_admin_user_second): """Test get_show_families for network admin user with no access.""" expected_data = [] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families(1, 5) show_family_model.get_show_families.assert_called_with(1, 5, []) assert result['items'] == expected_data def test_get_show_families_producer_user( monkeypatch, show_family_fixture, third_show_family_fixture, mock_current_producer_user): """Test get_show_families for producer user.""" expected_data = [show_family_fixture, third_show_family_fixture] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families() show_family_model.get_show_families.assert_called_with(0, 0, [1, 2, 4]) assert result['items'] == expected_data assert result['items'][0]['feeds_count'] == 2 assert result['items'][1]['feeds_count'] == 0 def test_get_show_families_show_level_user(monkeypatch, show_family_fixture, mock_current_podcast_level_user): """Test get_show_families for show level user.""" expected_data = [show_family_fixture] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families() show_family_model.get_show_families.assert_called_with(0, 0, [1]) assert result['items'] == expected_data assert result['items'][0]['feeds_count'] == 2 def test_get_show_families_show_level_user_no_access(monkeypatch, mock_current_show_level_user): """Test get_show_families for show level user with no access.""" expected_data = [] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families(1, 5) show_family_model.get_show_families.assert_called_with(1, 5, []) assert result['items'] == expected_data def test_get_show_families_with_network_ids(monkeypatch, show_family_fixture, mock_current_admin_user): """Test get show families with network ids.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, network_ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1, 4]) assert expected == result def test_get_show_families_with_network_ids_network_admin_user( monkeypatch, show_family_fixture, third_show_family_fixture, mock_current_network_admin_user): """Test get show families with network ids network admin user.""" expected_data = [show_family_fixture, third_show_family_fixture] monkeypatch.setattr( show_family_model, 'get_show_families', MagicMock( return_value={'items': expected_data})) result = show_family_logic.get_show_families(1, 1, network_ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1, 4]) assert expected_data == result['items'] def test_get_show_families_with_network_ids_network_admin_user_no_access(mock_current_network_admin_user_second): """Test get_show_families with network_ids for network admin user with no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 5, network_ids=[2]) assert err.value.status == 403 def test_get_show_families_with_network_ids_producer_user(mock_current_producer_user): """Test get_show_families with network_ids for producer user.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 5, [3]) assert err.value.status == 403 def test_get_show_families_with_network_ids_show_level_user(mock_current_show_level_user): """Test get_show_families with network_ids for show level user.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 5, [3]) assert err.value.status == 403 def test_get_show_families_with_invalid_network_ids(mock_current_user): """Test get show families with invalid network ids.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, [5]) assert err.value.status == 403 def test_get_show_families_with_network_ids_and_ids_admin_user( monkeypatch, show_family_fixture, second_show_family_fixture, mock_current_admin_user): """Test get show families with network ids and ids for admin user.""" expected = {'items': [show_family_fixture, second_show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, [1], [4]) show_family_model.get_show_families.assert_called_once_with(1, 1, [4, 1, 4]) assert expected == result def test_get_show_families_with_network_ids_and_ids_network_admin_user( monkeypatch, show_family_fixture, second_show_family_fixture, mock_current_network_admin_user): """Test get show families with network ids and ids for network admin user.""" expected = {'items': [show_family_fixture, second_show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, [1], [4]) show_family_model.get_show_families.assert_called_once_with(1, 1, [4, 1, 4]) assert expected == result def test_get_show_families_with_network_ids_and_ids_network_admin_user_no_access( mock_current_network_admin_user_second): """Test get show families with network ids and ids for network admin user no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, [1], [4]) assert err.value.status == 403 def test_get_show_families_with_network_ids_and_ids_network_producer_user_no_access(mock_current_producer_user): """Test get show families with network ids and ids for producer user.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, [1], [3]) assert err.value.status == 403 def test_get_show_families_with_network_ids_and_ids_producer_user_success( monkeypatch, show_family_fixture, second_show_family_fixture, mock_current_producer_user): """Test get show families with network ids and ids for producer user success.""" expected = {'items': [show_family_fixture, second_show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, [1], [4]) show_family_model.get_show_families.assert_called_once_with(1, 1, [4, 1, 4]) assert expected == result def test_get_show_families_with_network_ids_and_ids_show_level_user_no_access(mock_current_show_level_user): """Test get show families with network ids and ids for show level user no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, [1], [4]) assert err.value.status == 403 def test_get_show_families_with_ids_admin_user(monkeypatch, show_family_fixture, mock_current_admin_user): """Test get show families with ids for admin user.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1]) assert expected == result def test_get_show_families_with_ids_network_admin_user( monkeypatch, show_family_fixture, mock_current_network_admin_user): """Test get show families with ids for network admin user.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1]) assert expected == result def test_get_show_families_with_ids_network_admin_user_no_access(mock_current_network_admin_user_second): """Test get show families with ids for network admin user no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, ids=[1]) assert err.value.status == 403 def test_get_show_families_with_ids_producer_user_no_access(mock_current_producer_user): """Test get show families with ids for producer user no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, ids=[3]) assert err.value.status == 403 def test_get_show_families_with_ids_producer_user_success( monkeypatch, show_family_fixture, mock_current_producer_user): """Test get show families with ids for producer user success.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1]) assert expected == result def test_get_show_families_with_ids_show_level_user_no_access(mock_current_show_level_user): """Test get show families with ids for show level user no access.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, ids=[3]) assert err.value.status == 403 def test_get_show_families_with_ids_show_level_user_success( monkeypatch, show_family_fixture, mock_current_producer_user): """Test get show families with ids for show level user success.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1, ids=[1]) show_family_model.get_show_families.assert_called_once_with(1, 1, [1]) assert expected == result def test_get_show_families_with_invalid_ids(mock_current_user): """Test get show families with invalid ids.""" with pytest.raises(OwsError) as err: show_family_logic.get_show_families(1, 1, ids=[1, 2]) assert err.value.status == 403 def test_get_show_families_show_level(monkeypatch, show_family_fixture, mock_current_podcast_level_user): """Test get show families with network ids for show level user.""" expected = {'items': [show_family_fixture]} monkeypatch.setattr(show_family_model, 'get_show_families', MagicMock(return_value=expected)) result = show_family_logic.get_show_families(1, 1) show_family_model.get_show_families.assert_called_once_with(1, 1, [1]) assert expected == result