/src/NzbDrone.Core.Test/Download/TrackedDownloads/TrackedDownloadServiceFixture.cs
https://github.com/NzbDrone/NzbDrone · C# · 329 lines · 280 code · 49 blank · 0 comment · 8 complexity · ea63afb96f0e1b15086e77fc992236a0 MD5 · raw file
- using System.Collections.Generic;
- using FluentAssertions;
- using Moq;
- using NUnit.Framework;
- using NzbDrone.Core.Download;
- using NzbDrone.Core.Download.TrackedDownloads;
- using NzbDrone.Core.History;
- using NzbDrone.Core.Parser;
- using NzbDrone.Core.Parser.Model;
- using NzbDrone.Core.Test.Framework;
- using NzbDrone.Core.Tv;
- using NzbDrone.Core.Indexers;
- using System.Linq;
- using NzbDrone.Core.Tv.Events;
- namespace NzbDrone.Core.Test.Download.TrackedDownloads
- {
- [TestFixture]
- public class TrackedDownloadServiceFixture : CoreTest<TrackedDownloadService>
- {
- private void GivenDownloadHistory()
- {
- Mocker.GetMock<IHistoryService>()
- .Setup(s => s.FindByDownloadId(It.Is<string>(sr => sr == "35238")))
- .Returns(new List<EpisodeHistory>(){
- new EpisodeHistory(){
- DownloadId = "35238",
- SourceTitle = "TV Series S01",
- SeriesId = 5,
- EpisodeId = 4
- }
- });
- }
- [Test]
- public void should_track_downloads_using_the_source_title_if_it_cannot_be_found_using_the_download_title()
- {
- GivenDownloadHistory();
- var remoteEpisode = new RemoteEpisode
- {
- Series = new Series() { Id = 5 },
- Episodes = new List<Episode> { new Episode { Id = 4 } },
- ParsedEpisodeInfo = new ParsedEpisodeInfo()
- {
- SeriesTitle = "TV Series",
- SeasonNumber = 1
- },
- MappedSeasonNumber = 1
- };
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.Is<ParsedEpisodeInfo>(i => i.SeasonNumber == 1 && i.SeriesTitle == "TV Series"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
- .Returns(remoteEpisode);
- var client = new DownloadClientDefinition()
- {
- Id = 1,
- Protocol = DownloadProtocol.Torrent
- };
- var item = new DownloadClientItem()
- {
- Title = "The torrent release folder",
- DownloadId = "35238",
- DownloadClientInfo = new DownloadClientItemClientInfo
- {
- Protocol = client.Protocol,
- Id = client.Id,
- Name = client.Name
- }
- };
- var trackedDownload = Subject.TrackDownload(client, item);
- trackedDownload.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Series.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Series.Id.Should().Be(5);
- trackedDownload.RemoteEpisode.Episodes.First().Id.Should().Be(4);
- trackedDownload.RemoteEpisode.ParsedEpisodeInfo.SeasonNumber.Should().Be(1);
- trackedDownload.RemoteEpisode.MappedSeasonNumber.Should().Be(1);
- }
- [Test]
- public void should_parse_as_special_when_source_title_parsing_fails()
- {
- var remoteEpisode = new RemoteEpisode
- {
- Series = new Series() { Id = 5 },
- Episodes = new List<Episode> { new Episode { Id = 4 } },
- ParsedEpisodeInfo = new ParsedEpisodeInfo()
- {
- SeriesTitle = "TV Series",
- SeasonNumber = 0,
- EpisodeNumbers = new []{ 1 }
- },
- MappedSeasonNumber = 0
- };
- Mocker.GetMock<IHistoryService>()
- .Setup(s => s.FindByDownloadId(It.Is<string>(sr => sr == "35238")))
- .Returns(new List<EpisodeHistory>(){
- new EpisodeHistory(){
- DownloadId = "35238",
- SourceTitle = "TV Series Special",
- SeriesId = 5,
- EpisodeId = 4
- }
- });
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.Is<ParsedEpisodeInfo>(i => i.SeasonNumber == 0 && i.SeriesTitle == "TV Series"), It.IsAny<int>(), It.IsAny<IEnumerable<int>>()))
- .Returns(remoteEpisode);
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.ParseSpecialEpisodeTitle(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(remoteEpisode.ParsedEpisodeInfo);
- var client = new DownloadClientDefinition()
- {
- Id = 1,
- Protocol = DownloadProtocol.Torrent
- };
- var item = new DownloadClientItem()
- {
- Title = "The torrent release folder",
- DownloadId = "35238",
- DownloadClientInfo = new DownloadClientItemClientInfo
- {
- Protocol = client.Protocol,
- Id = client.Id,
- Name = client.Name
- }
- };
- var trackedDownload = Subject.TrackDownload(client, item);
- trackedDownload.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Series.Should().NotBeNull();
- trackedDownload.RemoteEpisode.Series.Id.Should().Be(5);
- trackedDownload.RemoteEpisode.Episodes.First().Id.Should().Be(4);
- trackedDownload.RemoteEpisode.ParsedEpisodeInfo.SeasonNumber.Should().Be(0);
- trackedDownload.RemoteEpisode.MappedSeasonNumber.Should().Be(0);
- }
- [Test]
- public void should_unmap_tracked_download_if_episode_deleted()
- {
- GivenDownloadHistory();
- var remoteEpisode = new RemoteEpisode
- {
- Series = new Series() { Id = 5 },
- Episodes = new List<Episode> { new Episode { Id = 4 } },
- ParsedEpisodeInfo = new ParsedEpisodeInfo()
- {
- SeriesTitle = "TV Series",
- SeasonNumber = 1,
- EpisodeNumbers = new[] { 1 }
- },
- MappedSeasonNumber = 0
- };
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(remoteEpisode);
- Mocker.GetMock<IHistoryService>()
- .Setup(s => s.FindByDownloadId(It.IsAny<string>()))
- .Returns(new List<EpisodeHistory>());
- var client = new DownloadClientDefinition()
- {
- Id = 1,
- Protocol = DownloadProtocol.Torrent
- };
- var item = new DownloadClientItem()
- {
- Title = "TV Series - S01E01",
- DownloadId = "12345",
- DownloadClientInfo = new DownloadClientItemClientInfo
- {
- Id = 1,
- Type = "Blackhole",
- Name = "Blackhole Client",
- Protocol = DownloadProtocol.Torrent
- }
- };
- Subject.TrackDownload(client, item);
- Subject.GetTrackedDownloads().Should().HaveCount(1);
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(default(RemoteEpisode));
- Subject.Handle(new EpisodeInfoRefreshedEvent(remoteEpisode.Series, new List<Episode>(), new List<Episode>(), remoteEpisode.Episodes));
- var trackedDownloads = Subject.GetTrackedDownloads();
- trackedDownloads.Should().HaveCount(1);
- trackedDownloads.First().RemoteEpisode.Should().BeNull();
- }
- [Test]
- public void should_not_throw_when_processing_deleted_episodes()
- {
- GivenDownloadHistory();
- var remoteEpisode = new RemoteEpisode
- {
- Series = new Series() { Id = 5 },
- Episodes = new List<Episode> { new Episode { Id = 4 } },
- ParsedEpisodeInfo = new ParsedEpisodeInfo()
- {
- SeriesTitle = "TV Series",
- SeasonNumber = 1,
- EpisodeNumbers = new[] { 1 }
- },
- MappedSeasonNumber = 0
- };
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(default(RemoteEpisode));
- Mocker.GetMock<IHistoryService>()
- .Setup(s => s.FindByDownloadId(It.IsAny<string>()))
- .Returns(new List<EpisodeHistory>());
- var client = new DownloadClientDefinition()
- {
- Id = 1,
- Protocol = DownloadProtocol.Torrent
- };
- var item = new DownloadClientItem()
- {
- Title = "TV Series - S01E01",
- DownloadId = "12345",
- DownloadClientInfo = new DownloadClientItemClientInfo
- {
- Id = 1,
- Type = "Blackhole",
- Name = "Blackhole Client",
- Protocol = DownloadProtocol.Torrent
- }
- };
- Subject.TrackDownload(client, item);
- Subject.GetTrackedDownloads().Should().HaveCount(1);
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(default(RemoteEpisode));
- Subject.Handle(new EpisodeInfoRefreshedEvent(remoteEpisode.Series, new List<Episode>(), new List<Episode>(), remoteEpisode.Episodes));
- var trackedDownloads = Subject.GetTrackedDownloads();
- trackedDownloads.Should().HaveCount(1);
- trackedDownloads.First().RemoteEpisode.Should().BeNull();
- }
- [Test]
- public void should_not_throw_when_processing_deleted_series()
- {
- GivenDownloadHistory();
- var remoteEpisode = new RemoteEpisode
- {
- Series = new Series() { Id = 5 },
- Episodes = new List<Episode> { new Episode { Id = 4 } },
- ParsedEpisodeInfo = new ParsedEpisodeInfo()
- {
- SeriesTitle = "TV Series",
- SeasonNumber = 1,
- EpisodeNumbers = new[] { 1 }
- },
- MappedSeasonNumber = 0
- };
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(default(RemoteEpisode));
- Mocker.GetMock<IHistoryService>()
- .Setup(s => s.FindByDownloadId(It.IsAny<string>()))
- .Returns(new List<EpisodeHistory>());
- var client = new DownloadClientDefinition()
- {
- Id = 1,
- Protocol = DownloadProtocol.Torrent
- };
- var item = new DownloadClientItem()
- {
- Title = "TV Series - S01E01",
- DownloadId = "12345",
- DownloadClientInfo = new DownloadClientItemClientInfo
- {
- Id = 1,
- Type = "Blackhole",
- Name = "Blackhole Client",
- Protocol = DownloadProtocol.Torrent
- }
- };
- Subject.TrackDownload(client, item);
- Subject.GetTrackedDownloads().Should().HaveCount(1);
- Mocker.GetMock<IParsingService>()
- .Setup(s => s.Map(It.IsAny<ParsedEpisodeInfo>(), It.IsAny<int>(), It.IsAny<int>(), null))
- .Returns(default(RemoteEpisode));
- Subject.Handle(new SeriesDeletedEvent(remoteEpisode.Series, true, true));
- var trackedDownloads = Subject.GetTrackedDownloads();
- trackedDownloads.Should().HaveCount(1);
- trackedDownloads.First().RemoteEpisode.Should().BeNull();
- }
- }
- }