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 ProcessFixture : 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.DroneTheAlbum.FLAC") .Build(); _grabHistory = Builder.CreateListOfSize(2).BuildList(); var remoteAlbum = new RemoteAlbum { Artist = new Author(), Albums = new List { new Book { Id = 1 } } }; _trackedDownload = Builder.CreateNew() .With(c => c.State = TrackedDownloadState.Downloading) .With(c => c.DownloadItem = completed) .With(c => c.RemoteAlbum = remoteAlbum) .Build(); Mocker.GetMock() .Setup(s => s.Find(_trackedDownload.DownloadItem.DownloadId, HistoryEventType.Grabbed)) .Returns(_grabHistory); } private void GivenNoGrabbedHistory() { Mocker.GetMock() .Setup(s => s.Find(_trackedDownload.DownloadItem.DownloadId, HistoryEventType.Grabbed)) .Returns(new List()); } [Test] public void should_not_fail_if_matching_history_is_not_found() { GivenNoGrabbedHistory(); Subject.Check(_trackedDownload); AssertDownloadNotFailed(); } [Test] public void should_warn_if_matching_history_is_not_found() { _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; GivenNoGrabbedHistory(); Subject.Check(_trackedDownload); _trackedDownload.StatusMessages.Should().NotBeEmpty(); } [Test] public void should_not_warn_if_matching_history_is_not_found_and_not_failed() { _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; GivenNoGrabbedHistory(); Subject.Check(_trackedDownload); _trackedDownload.StatusMessages.Should().NotBeEmpty(); } 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); } } }