import feedparser
from django.contrib.auth.models import User
from django.test import TestCase
from .models import PodcastEpisode, PodcastFeed
from .views import FeedFetch, _apply_feed, _entry_link
def _feed(link):
item_link = f'{link}' if link is not None else ''
return feedparser.parse(
'99 ZU EINS'
'- Folge 724g724' + item_link +
'
'
''
)
class EpisodeLinkTests(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='alice', password='pw12345678')
self.client.force_login(self.user)
self.feed = PodcastFeed.objects.create(user=self.user, rss_url='https://example.org/rss', title='99 ZU EINS')
def fetch(self, link):
_apply_feed(self.feed, FeedFetch(200, _feed(link)))
return PodcastEpisode.objects.get(feed=self.feed)
def test_entry_link_takes_only_web_addresses(self):
self.assertEqual(_entry_link({'link': ' https://x.fireside.fm/724 '}), 'https://x.fireside.fm/724')
self.assertEqual(_entry_link({'link': 'javascript:alert(1)'}), '')
self.assertEqual(_entry_link({}), '')
def test_a_new_episode_gets_the_items_link(self):
self.assertEqual(self.fetch('https://99zueins.fireside.fm/724').link, 'https://99zueins.fireside.fm/724')
def test_a_refresh_fills_the_link_of_an_episode_that_has_none(self):
self.assertEqual(self.fetch(None).link, '')
self.assertEqual(self.fetch('https://99zueins.fireside.fm/724').link, 'https://99zueins.fireside.fm/724')
def test_episode_detail_returns_the_link(self):
ep = self.fetch('https://99zueins.fireside.fm/724')
r = self.client.get(f'/podcasts/episodes/{ep.id}/')
self.assertEqual(r.status_code, 200)
self.assertEqual(r.json()['link'], 'https://99zueins.fireside.fm/724')