using System.Collections.Generic; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download; using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Music; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.Download { [TestFixture] public class RedownloadFailedDownloadServiceFixture : CoreTest { [SetUp] public void Setup() { Mocker.GetMock() .Setup(x => x.AutoRedownloadFailed) .Returns(true); Mocker.GetMock() .Setup(x => x.GetAlbumsByArtist(It.IsAny())) .Returns(Builder.CreateListOfSize(3).Build() as List); } [Test] public void should_skip_redownload_if_event_has_skipredownload_set() { var failedEvent = new DownloadFailedEvent { ArtistId = 1, AlbumIds = new List { 1 }, SkipRedownload = true }; Subject.Handle(failedEvent); Mocker.GetMock() .Verify(x => x.Push(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never()); } [Test] public void should_skip_redownload_if_redownload_failed_disabled() { var failedEvent = new DownloadFailedEvent { ArtistId = 1, AlbumIds = new List { 1 } }; Mocker.GetMock() .Setup(x => x.AutoRedownloadFailed) .Returns(false); Subject.Handle(failedEvent); Mocker.GetMock() .Verify(x => x.Push(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never()); } [Test] public void should_redownload_album_on_failure() { var failedEvent = new DownloadFailedEvent { ArtistId = 1, AlbumIds = new List { 2 } }; Subject.Handle(failedEvent); Mocker.GetMock() .Verify(x => x.Push(It.Is(c => c.AlbumIds.Count == 1 && c.AlbumIds[0] == 2), It.IsAny(), It.IsAny()), Times.Once()); Mocker.GetMock() .Verify(x => x.Push(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never()); } [Test] public void should_redownload_multiple_albums_on_failure() { var failedEvent = new DownloadFailedEvent { ArtistId = 1, AlbumIds = new List { 2, 3 } }; Subject.Handle(failedEvent); Mocker.GetMock() .Verify(x => x.Push(It.Is(c => c.AlbumIds.Count == 2 && c.AlbumIds[0] == 2 && c.AlbumIds[1] == 3), It.IsAny(), It.IsAny()), Times.Once()); Mocker.GetMock() .Verify(x => x.Push(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never()); } [Test] public void should_redownload_artist_on_failure() { // note that artist is set to have 3 albums in setup var failedEvent = new DownloadFailedEvent { ArtistId = 2, AlbumIds = new List { 1, 2, 3 } }; Subject.Handle(failedEvent); Mocker.GetMock() .Verify(x => x.Push(It.Is(c => c.ArtistId == failedEvent.ArtistId), It.IsAny(), It.IsAny()), Times.Once()); Mocker.GetMock() .Verify(x => x.Push(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never()); } } }