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')