using System.Collections.Generic; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.Download; using NzbDrone.Core.Download.TrackedDownloads; using NzbDrone.Core.History; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.Download.FailedDownloadServiceTests { [TestFixture] public class ProcessFailedFixture : CoreTest { private TrackedDownload _trackedDownload; private List _grabHistory; [SetUp] public void Setup() { var completed = Builder.CreateNew() .With(h => h.Status = DownloadItemStatus.Completed) .With(h => h.OutputPath = new OsPath(@"C:\DropFolder\MyDownload".AsOsAgnostic())) .With(h => h.Title = "Drone.S01E01.HDTV") .Build(); _grabHistory = Builder.CreateListOfSize(2).BuildList(); var remoteAlbum = new RemoteAlbum { Artist = new Artist(), Albums = new List { new Album { Id = 1 } } }; _trackedDownload = Builder.CreateNew() .With(c => c.State = TrackedDownloadState.DownloadFailedPending) .With(c => c.DownloadItem = completed) .With(c => c.RemoteAlbum = remoteAlbum) .Build(); Mocker.GetMock() .Setup(s => s.Find(_trackedDownload.DownloadItem.DownloadId, EntityHistoryEventType.Grabbed)) .Returns(_grabHistory); } [Test] public void should_mark_failed_if_encrypted() { _trackedDownload.DownloadItem.IsEncrypted = true; Subject.ProcessFailed(_trackedDownload); AssertDownloadFailed(); } [Test] public void should_mark_failed_if_download_item_is_failed() { _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; Subject.ProcessFailed(_trackedDownload); AssertDownloadFailed(); } [Test] public void should_include_tracked_download_in_message() { _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; Subject.ProcessFailed(_trackedDownload); Mocker.GetMock() .Verify(v => v.PublishEvent(It.Is(c => c.TrackedDownload != null)), Times.Once()); AssertDownloadFailed(); } private void AssertDownloadNotFailed() { Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); _trackedDownload.State.Should().NotBe(TrackedDownloadState.DownloadFailed); } private void AssertDownloadFailed() { Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); _trackedDownload.State.Should().Be(TrackedDownloadState.DownloadFailed); } } }