82 lines
2.1 KiB
Go
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))
|
|
}
|
|
}
|