Grundlage fürs Teilen einer Folge; Migration 0027. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
45 lines
2 KiB
Python
45 lines
2 KiB
Python
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>{link}</link>' if link is not None else ''
|
|
return feedparser.parse(
|
|
'<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>99 ZU EINS</title>'
|
|
'<item><title>Folge 724</title><guid>g724</guid>' + item_link +
|
|
'<enclosure url="https://cdn.example/724.mp3" type="audio/mpeg" length="1"/></item>'
|
|
'</channel></rss>'
|
|
)
|
|
|
|
|
|
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')
|