diff --git a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemovePendingFixture.cs b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemovePendingFixture.cs index cdb1e45bf..e16be9cbc 100644 --- a/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemovePendingFixture.cs +++ b/src/NzbDrone.Core.Test/Download/Pending/PendingReleaseServiceTests/RemovePendingFixture.cs @@ -1,31 +1,47 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; +using FizzWare.NBuilder; using Moq; using NUnit.Framework; +using NzbDrone.Common.Crypto; using NzbDrone.Core.Download.Pending; +using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests { [TestFixture] public class RemovePendingFixture : CoreTest { - private List _pending; + private Episode _episode; [SetUp] public void Setup() { _pending = new List(); + _episode = Builder.CreateNew() + .Build(); + Mocker.GetMock() .Setup(s => s.AllBySeriesId(It.IsAny())) .Returns(_pending); Mocker.GetMock() - .Setup(s => s.Get(It.IsAny())) - .Returns(r => _pending.Single(c => c.Id == r)); + .Setup(s => s.All()) + .Returns( _pending); + + Mocker.GetMock() + .Setup(s => s.GetSeries(It.IsAny())) + .Returns(new Series()); + + Mocker.GetMock() + .Setup(s => s.GetEpisodes(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns(new List{ _episode }); } private void AddPending(int id, int seasonNumber, int[] episodes) @@ -42,12 +58,13 @@ public void should_remove_same_release() { AddPending(id: 1, seasonNumber: 2, episodes: new[] { 3 }); - Subject.RemovePendingQueueItems(1); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 1, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(1); } - - + [Test] public void should_remove_multiple_releases_release() { @@ -56,7 +73,9 @@ public void should_remove_multiple_releases_release() AddPending(id: 3, seasonNumber: 2, episodes: new[] { 3 }); AddPending(id: 4, seasonNumber: 2, episodes: new[] { 3 }); - Subject.RemovePendingQueueItems(3); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 3, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(3, 4); } @@ -69,7 +88,9 @@ public void should_not_remove_diffrent_season() AddPending(id: 3, seasonNumber: 3, episodes: new[] { 1 }); AddPending(id: 4, seasonNumber: 3, episodes: new[] { 1 }); - Subject.RemovePendingQueueItems(1); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 1, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(1, 2); } @@ -82,7 +103,9 @@ public void should_not_remove_diffrent_episodes() AddPending(id: 3, seasonNumber: 2, episodes: new[] { 2 }); AddPending(id: 4, seasonNumber: 2, episodes: new[] { 3 }); - Subject.RemovePendingQueueItems(1); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 1, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(1, 2); } @@ -93,7 +116,9 @@ public void should_not_remove_multiepisodes() AddPending(id: 1, seasonNumber: 2, episodes: new[] { 1 }); AddPending(id: 2, seasonNumber: 2, episodes: new[] { 1, 2 }); - Subject.RemovePendingQueueItems(1); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 1, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(1); } @@ -104,12 +129,13 @@ public void should_not_remove_singleepisodes() AddPending(id: 1, seasonNumber: 2, episodes: new[] { 1 }); AddPending(id: 2, seasonNumber: 2, episodes: new[] { 1, 2 }); - Subject.RemovePendingQueueItems(2); + var queueId = HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", 2, _episode.Id)); + + Subject.RemovePendingQueueItems(queueId); AssertRemoved(2); } - - + private void AssertRemoved(params int[] ids) { Mocker.GetMock().Verify(c => c.DeleteMany(It.Is>(s => s.SequenceEqual(ids)))); diff --git a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs index 40cba94fc..c4b4cec0b 100644 --- a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs +++ b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs @@ -26,7 +26,7 @@ public interface IPendingReleaseService List GetPendingRemoteEpisodes(int seriesId); List GetPendingQueue(); Queue.Queue FindPendingQueueItem(int queueId); - void RemovePendingQueueItems(int episodeId); + void RemovePendingQueueItems(int queueId); RemoteEpisode OldestPendingRelease(int seriesId, IEnumerable episodeIds); } @@ -154,10 +154,9 @@ public Queue.Queue FindPendingQueueItem(int queueId) public void RemovePendingQueueItems(int queueId) { - var targetItem = _repository.Get(queueId); + var targetItem = FindPendingRelease(queueId); var seriesReleases = _repository.AllBySeriesId(targetItem.SeriesId); - var releasesToRemove = seriesReleases.Where( c => c.ParsedEpisodeInfo.SeasonNumber == targetItem.ParsedEpisodeInfo.SeasonNumber && c.ParsedEpisodeInfo.EpisodeNumbers.SequenceEqual(targetItem.ParsedEpisodeInfo.EpisodeNumbers)); @@ -167,10 +166,9 @@ public void RemovePendingQueueItems(int queueId) public RemoteEpisode OldestPendingRelease(int seriesId, IEnumerable episodeIds) { - return GetPendingRemoteEpisodes(seriesId) - .Where(r => r.Episodes.Select(e => e.Id).Intersect(episodeIds).Any()) - .OrderByDescending(p => p.Release.AgeHours) - .FirstOrDefault(); + return GetPendingRemoteEpisodes(seriesId).Where(r => r.Episodes.Select(e => e.Id).Intersect(episodeIds).Any()) + .OrderByDescending(p => p.Release.AgeHours) + .FirstOrDefault(); } private List GetPendingReleases() @@ -294,9 +292,9 @@ private void RemoveRejected(List rejected) } } - private int FindPendingReleaseId(int queueId) + private PendingRelease FindPendingRelease(int queueId) { - return GetPendingReleases().First(p => p.RemoteEpisode.Episodes.Any(e => queueId == GetQueueId(p, e))).Id; + return GetPendingReleases().First(p => p.RemoteEpisode.Episodes.Any(e => queueId == GetQueueId(p, e))); } private int GetQueueId(PendingRelease pendingRelease, Episode episode)