diff --git a/core/podcasts/podcasts_test.go b/core/podcasts/podcasts_test.go index da4ac6ff7..7226e80a6 100644 --- a/core/podcasts/podcasts_test.go +++ b/core/podcasts/podcasts_test.go @@ -50,7 +50,7 @@ var _ = Describe("PodcastService", func() { DeferCleanup(mockServer.Close) conf.Server.DataFolder = GinkgoT().TempDir() - svc = podcasts.NewPodcastService(ds, nil) + svc = podcasts.NewPodcastService(ds, nil, nil) }) Describe("AddChannel", func() { @@ -123,6 +123,11 @@ var _ = Describe("PodcastService", func() { var episode *model.PodcastEpisode BeforeEach(func() { + channelRepo.Data["ch-1"] = &model.PodcastChannel{ + ID: "ch-1", + Title: "Test Channel", + URL: "http://example.com/feed.xml", + } episode = &model.PodcastEpisode{ ID: "ep-1", ChannelID: "ch-1", @@ -164,11 +169,11 @@ var _ = Describe("PodcastService", func() { }) Describe("DeleteEpisode", func() { - It("removes episode from DB", func() { - episodeRepo.Data["ep-1"] = &model.PodcastEpisode{ID: "ep-1", ChannelID: "ch-1"} + It("resets episode to new status", func() { + episodeRepo.Data["ep-1"] = &model.PodcastEpisode{ID: "ep-1", ChannelID: "ch-1", Status: model.PodcastStatusCompleted} err := svc.DeleteEpisode(ctx, "ep-1") Expect(err).ToNot(HaveOccurred()) - Expect(episodeRepo.Data).To(BeEmpty()) + Expect(episodeRepo.Data["ep-1"].Status).To(Equal(model.PodcastStatusNew)) }) It("deletes the downloaded file when path is set", func() { @@ -208,6 +213,9 @@ var _ = Describe("PodcastService", func() { }) Describe("DownloadEpisode error handling", func() { + BeforeEach(func() { + channelRepo.Data["ch-1"] = &model.PodcastChannel{ID: "ch-1", Title: "Test Channel"} + }) It("sets status to error when download fails", func() { episodeRepo.Data["ep-bad"] = &model.PodcastEpisode{ ID: "ep-bad", @@ -238,6 +246,9 @@ var _ = Describe("PodcastService", func() { }) Describe("DownloadEpisode with timestamp", func() { + BeforeEach(func() { + channelRepo.Data["ch-1"] = &model.PodcastChannel{ID: "ch-1", Title: "Test Channel"} + }) It("sets updated_at after status change", func() { episodeRepo.Data["ep-ts"] = &model.PodcastEpisode{ ID: "ep-ts", diff --git a/server/subsonic/e2e/e2e_suite_test.go b/server/subsonic/e2e/e2e_suite_test.go index 8998731a4..90fdaa9a4 100644 --- a/server/subsonic/e2e/e2e_suite_test.go +++ b/server/subsonic/e2e/e2e_suite_test.go @@ -24,6 +24,7 @@ import ( "github.com/navidrome/navidrome/core/metrics" "github.com/navidrome/navidrome/core/playback" "github.com/navidrome/navidrome/core/playlists" + "github.com/navidrome/navidrome/core/podcasts" "github.com/navidrome/navidrome/core/scrobbler" "github.com/navidrome/navidrome/core/storage/storagetest" "github.com/navidrome/navidrome/core/stream" @@ -426,6 +427,7 @@ func setupTestDB() { metrics.NewNoopInstance(), lyrics.NewLyrics(ds, nil), decider, + podcasts.NewPodcastService(ds, ffmpeg.New(), events.NoopBroker()), nil, ) } diff --git a/tests/mock_podcast_channel_repo.go b/tests/mock_podcast_channel_repo.go index 8096f0d4b..0e5349570 100644 --- a/tests/mock_podcast_channel_repo.go +++ b/tests/mock_podcast_channel_repo.go @@ -57,6 +57,18 @@ func (m *MockPodcastChannelRepo) UpdateChannel(channel *model.PodcastChannel) er return nil } +func (m *MockPodcastChannelRepo) ExistsByURL(url string) (bool, error) { + if m.Err { + return false, errors.New("error") + } + for _, c := range m.Data { + if c.URL == url { + return true, nil + } + } + return false, nil +} + func (m *MockPodcastChannelRepo) Delete(chanID string) error { if m.Err { return errors.New("error")