"""Tests for RSS ingester."""
from unittest.mock import MagicMock
from defusedxml.ElementTree import fromstring
from dev import rss_ingester
rss = b"""
New Show
aoeuaoeu
en
oaeuoaeu
Description
image.jpg
New Show
aoeuaoeu
serial
euaueoau
Description
Sony Music
podcasts@sonymusic.com
-
oaeuaeouaeo
description2
Thu, 23 Jan 2020 17:54:00 -0000
full
1
2
euaueoau
description2
description2
]]>
365
no
"""
mock_categories = [
{'id': 1, 'parent_id': None, 'name': 'Arts', 'active': True, 'children': [
{'id': 20, 'parent_id': 1, 'name': 'Books', 'active': True}
]},
{'id': 3, 'parent_id': None, 'name': 'Comedy', 'active': True}
]
def test_rss_ingester(monkeypatch):
"""Test the rss ingester."""
monkeypatch.setattr(rss_ingester, 'log', MagicMock(return_value=rss))
monkeypatch.setattr(rss_ingester, 'get_feed_content', MagicMock(return_value=rss))
monkeypatch.setattr(rss_ingester, 'create_podcast_request', MagicMock(return_value=1))
monkeypatch.setattr(rss_ingester, 'get_categories_request', MagicMock(return_value=mock_categories))
monkeypatch.setattr(rss_ingester, 'create_episode_request', MagicMock(return_value=2))
rss_ingester.process('feed_url', 'network_id', 'slug', 'localhost', 'localhost:5001', 10)
rss_ingester.log.assert_called_with(
"Feed could not be found Invalid URL 'movie.mp3': No scheme supplied. Perhaps you meant https://movie.mp3?"
)
rss_ingester.create_podcast_request.assert_called_once_with(
'localhost',
{
'title': 'New Show',
'link': 'aoeuaoeu',
'description': 'Description',
'copyright': 'oaeuoaeu',
'show_type': 'serial',
'language': 'en',
'host': 'euaueoau',
'image': 'image.jpg',
'explicit': None,
'categories': [1, 3],
'email': 'podcasts@sonymusic.com',
'owner': 'Sony Music',
'slug': 'slug',
'network_id': 'network_id',
'artwork_filename': None
}
)
rss_ingester.create_episode_request.assert_called_once_with(
'localhost',
1,
{
'title': 'oaeuaeouaeo',
'description': 'description2',
'season_number': '1',
'episode_number': '2',
'episode_type': 'full',
'content': 'clean',
'published_date': 'Thu, 23 Jan 2020 17:54:00 -0000',
'image': 'image2.jpg',
'audio': 'movie.mp3',
'draft': False,
'artwork_filename': None,
'audio_filename': None
}
)
def test_get_podcast_info():
"""Test the rss podcast parse."""
et = fromstring(rss)
channel = et[0]
result = rss_ingester.get_podcast_info(channel)
assert result == {
'categories': [
['Arts', 'Fashion & Beauty'],
['Comedy'],
['Society & Culture', 'Relationships']
],
'copyright': 'oaeuoaeu',
'description': 'Description',
'email': 'podcasts@sonymusic.com',
'explicit': None,
'host': 'euaueoau',
'image': 'image.jpg',
'language': 'en',
'link': 'aoeuaoeu',
'owner': 'Sony Music',
'show_type': 'serial',
'title': 'New Show'
}
def test_get_episode_info():
"""Test the rss episode parse."""
et = fromstring(rss)
channel = et[0]
result = rss_ingester.get_episode_info(channel.findall('item')[0])
assert result == {
'audio': 'movie.mp3',
'content': 'no',
'description': 'description2',
'episode_number': '2',
'episode_type': 'full',
'image': 'image2.jpg',
'published_date': 'Thu, 23 Jan 2020 17:54:00 -0000',
'season_number': '1',
'title': 'oaeuaeouaeo'
}