"""Unit tests for Order model.""" import datetime from unittest.mock import MagicMock from podcast.models import order as order_model def test_get_order_by_mp_id(output_cdn_fixture, mock_current_admin_user): """Test order get by megaphone id.""" result = order_model.get_order_by_megaphone_id('mp1') assert result['name'] == 'order 1' def test_get_orders_by_episode_ids(): """Test order get by episode id.""" result = order_model.get_orders_by_episode_ids([1, 2], []) assert result['items'] == [ { 'campaign_id': '1', 'db_id': 1, 'enabled': True, 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'episode_ids': [1], 'podcast_ids': [2], 'id': 'mp1', 'is_deleted': False, 'name': 'order 1', 'network_ids': [1, 2], 'position': 1, 'campaign': { 'id': '1', 'name': 'Random Campaign title', 'advertiser_name': 'Sarahs Business', 'is_deleted': False }, 'advertisements': [ { 'id': 'mpad1', 'insertion_point': 'pre', 'pos': '0', 'audio_file': '', 'campaign_order_megaphone_id': 'mp1', 'name': 'advertisement 1' }, { 'id': 'mpad2', 'insertion_point': 'mid', 'pos': '1', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp1', 'name': 'advertisement 2' } ] }, { 'campaign_id': '1', 'db_id': 2, 'enabled': True, 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'episode_ids': [1], 'podcast_ids': [], 'id': 'mp2', 'is_deleted': False, 'name': 'order 2', 'network_ids': [2], 'position': 2, 'campaign': { 'id': '1', 'name': 'Random Campaign title', 'advertiser_name': 'Sarahs Business', 'is_deleted': False }, 'advertisements': [ { 'id': 'mpad3', 'insertion_point': 'pre', 'pos': '0', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp2', 'name': 'advertisement 3' }, { 'id': 'mpad4', 'insertion_point': 'mid', 'pos': '1', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp2', 'name': 'advertisement 4' }, { 'id': 'mpad5', 'insertion_point': 'post', 'pos': '1', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp2', 'name': 'advertisement 5' } ] } ] def test_get_orders_by_episode_ids_for_podcasts(): """Test order get by episode id.""" result = order_model.get_orders_by_episode_ids([], [2]) assert result['items'] == [ { 'campaign_id': '1', 'is_deleted': False, 'db_id': 1, 'enabled': True, 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'episode_ids': [1], 'podcast_ids': [2], 'id': 'mp1', 'name': 'order 1', 'network_ids': [1, 2], 'position': 1, 'campaign': { 'id': '1', 'name': 'Random Campaign title', 'advertiser_name': 'Sarahs Business', 'is_deleted': False }, 'advertisements': [ { 'id': 'mpad1', 'insertion_point': 'pre', 'pos': '0', 'audio_file': '', 'campaign_order_megaphone_id': 'mp1', 'name': 'advertisement 1' }, { 'id': 'mpad2', 'insertion_point': 'mid', 'pos': '1', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp1', 'name': 'advertisement 2' } ] }, { 'campaign_id': '1', 'is_deleted': False, 'db_id': 3, 'enabled': True, 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'episode_ids': [], 'podcast_ids': [2], 'id': 'mp3', 'name': 'order 3', 'network_ids': [2], 'position': 2, 'campaign': { 'id': '1', 'name': 'Random Campaign title', 'advertiser_name': 'Sarahs Business', 'is_deleted': False }, 'advertisements': [ { 'id': 'mpad6', 'insertion_point': 'mid', 'pos': '1', 'audio_file': 'yow', 'campaign_order_megaphone_id': 'mp3', 'name': 'advertisement 6' } ] } ] def test_create_or_update_orders(monkeypatch): """Test update order podcast/episode info.""" orders = [ { 'id': 'mp1', 'is_deleted': False, 'name': 'order 1', 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'campaign_id': '1', 'pos': '2', 'priority': '1', 'enabled': 1, 'network_ids': [], 'targets': [ {'type': 'episode', 'id': '6bf5bea4-a1d4-11e6-8dea-b334e2aa4880'}, ] }, { 'id': 'mp2', 'is_deleted': False, 'name': 'order 2', 'start_at': datetime.datetime(2016, 1, 1, 0, 0), 'end_at': datetime.datetime(2050, 1, 1, 0, 0), 'campaign_id': '1', 'pos': '2', 'priority': '1', 'enabled': 1, 'network_ids': [], 'targets': [ {'type': 'podcast', 'id': '6bf5bea4-a1d4-11e6-8dea-b334e2aa4720'}, ] } ] monkeypatch.setattr(order_model, '_create_orders', MagicMock(return_value={})) order = order_model.get_order_by_megaphone_id('mp1') assert order['episode_ids'] == [1] assert order['podcast_ids'] == [2] order_2 = order_model.get_order_by_megaphone_id('mp2') assert order_2['episode_ids'] == [1] assert order_2['podcast_ids'] == [] order_model.create_or_update_orders(orders, '1') updated_order = order_model.get_order_by_megaphone_id('mp1') assert updated_order['episode_ids'] == [1] assert updated_order['podcast_ids'] == [] updated_order_2 = order_model.get_order_by_megaphone_id('mp2') assert updated_order_2['episode_ids'] == [] assert updated_order_2['podcast_ids'] == [2] def test_get_orders_by_campaign_id(): """Test orders get campaign megaphone id.""" results = order_model.get_orders_by_campaign_id('1') assert len(results) == 3 assert results[0]['id'] == 'mp1' assert results[1]['id'] == 'mp2' assert results[2]['id'] == 'mp3' def test_delete_orders_by_megaphone_ids(): """Test soft delete orders by megaphone ids.""" results = order_model.delete_orders_by_megaphone_ids(['mp1', 'mp2']) assert results[0]['is_deleted'] is True assert results[1]['is_deleted'] is True