Files
gonic/podcast/podcast_test.go
2023-10-04 20:52:06 +01:00

82 lines
2.1 KiB
Go

package podcast
import (
"bytes"
_ "embed"
"path/filepath"
"testing"
"time"
"github.com/mmcdole/gofeed"
"github.com/stretchr/testify/require"
"go.senan.xyz/gonic/db"
"go.senan.xyz/gonic/mockfs"
)
//go:embed testdata/rss.new
var testRSS []byte
func TestPodcastsAndEpisodesWithSameName(t *testing.T) {
t.Parallel()
t.Skip("requires network access")
m := mockfs.New(t)
base := t.TempDir()
podcasts := New(m.DB(), base, m.TagReader())
fp := gofeed.NewParser()
newFeed, err := fp.Parse(bytes.NewReader(testRSS))
if err != nil {
t.Fatalf("parse test data: %v", err)
}
podcast, err := podcasts.AddNewPodcast("file://testdata/rss.new", newFeed)
require.NoError(t, err)
require.Equal(t, podcast.RootDir, filepath.Join(base, "InternetBox"))
podcast, err = podcasts.AddNewPodcast("file://testdata/rss.new", newFeed)
require.NoError(t, err)
// check we made a unique podcast name
require.Equal(t, podcast.RootDir, filepath.Join(base, "InternetBox (1)"))
podcastEpisodes, err := podcasts.GetNewestPodcastEpisodes(10)
require.NoError(t, err)
require.Greater(t, len(podcastEpisodes), 0)
var pe []*db.PodcastEpisode
require.NoError(t, m.DB().Order("id").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
require.Len(t, pe, 2)
require.NoError(t, podcasts.DownloadEpisode(pe[0].ID))
require.NoError(t, podcasts.DownloadEpisode(pe[1].ID))
require.NoError(t, m.DB().Order("id").Preload("Podcast").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
require.Len(t, pe, 2)
// check we made a unique podcast episode names
require.Equal(t, "InternetBoxEpisode126.mp3", pe[0].Filename)
require.Equal(t, "InternetBoxEpisode126 (1).mp3", pe[1].Filename)
}
func TestGetMoreRecentEpisodes(t *testing.T) {
t.Parallel()
fp := gofeed.NewParser()
newFeed, err := fp.Parse(bytes.NewReader(testRSS))
if err != nil {
t.Fatalf("parse test data: %v", err)
}
after, err := time.Parse(time.RFC1123, "Mon, 27 Jun 2016 06:33:43 +0000")
if err != nil {
t.Fatalf("parse time: %v", err)
}
entries := getEntriesAfterDate(newFeed.Items, after)
if len(entries) != 2 {
t.Errorf("expected 2 entries, got %d", len(entries))
}
}