using System; using System.Collections.Generic; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; using NzbDrone.Core.Books; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.RemotePathMappings; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.Download.DownloadClientTests { public abstract class DownloadClientFixtureBase : CoreTest where TSubject : class, IDownloadClient { protected readonly string _title = "Droned.S01E01.Pilot.1080p.WEB-DL-DRONE"; protected readonly string _downloadUrl = "http://somewhere.com/Droned.S01E01.Pilot.1080p.WEB-DL-DRONE.ext"; [SetUp] public void SetupBase() { Mocker.GetMock() .SetupGet(s => s.DownloadClientHistoryLimit) .Returns(30); Mocker.GetMock() .Setup(s => s.Map(It.IsAny(), null)) .Returns(() => CreateRemoteBook()); Mocker.GetMock() .Setup(s => s.Get(It.IsAny())) .Returns(r => new HttpResponse(r, new HttpHeader(), new byte[0])); Mocker.GetMock() .Setup(v => v.RemapRemoteToLocal(It.IsAny(), It.IsAny())) .Returns((h, r) => r); } protected virtual RemoteBook CreateRemoteBook() { var remoteBook = new RemoteBook(); remoteBook.Release = new ReleaseInfo(); remoteBook.Release.Title = _title; remoteBook.Release.DownloadUrl = _downloadUrl; remoteBook.Release.DownloadProtocol = Subject.Protocol; remoteBook.ParsedBookInfo = new ParsedBookInfo(); remoteBook.Books = new List(); remoteBook.Author = new Author(); return remoteBook; } protected void VerifyIdentifiable(DownloadClientItem downloadClientItem) { downloadClientItem.DownloadClientInfo.Protocol.Should().Be(Subject.Protocol); downloadClientItem.DownloadClientInfo.Id.Should().Be(Subject.Definition.Id); downloadClientItem.DownloadClientInfo.Name.Should().Be(Subject.Definition.Name); downloadClientItem.DownloadId.Should().NotBeNullOrEmpty(); downloadClientItem.Title.Should().NotBeNullOrEmpty(); } protected void VerifyQueued(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.RemainingSize.Should().NotBe(0); //downloadClientItem.RemainingTime.Should().NotBe(TimeSpan.Zero); //downloadClientItem.OutputPath.Should().NotBeNullOrEmpty(); downloadClientItem.Status.Should().Be(DownloadItemStatus.Queued); } protected void VerifyPaused(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.RemainingSize.Should().NotBe(0); //downloadClientItem.RemainingTime.Should().NotBe(TimeSpan.Zero); //downloadClientItem.OutputPath.Should().NotBeNullOrEmpty(); downloadClientItem.Status.Should().Be(DownloadItemStatus.Paused); } protected void VerifyDownloading(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.RemainingSize.Should().NotBe(0); //downloadClientItem.RemainingTime.Should().NotBe(TimeSpan.Zero); //downloadClientItem.OutputPath.Should().NotBeNullOrEmpty(); downloadClientItem.Status.Should().Be(DownloadItemStatus.Downloading); } protected void VerifyPostprocessing(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); //downloadClientItem.RemainingTime.Should().NotBe(TimeSpan.Zero); //downloadClientItem.OutputPath.Should().NotBeNullOrEmpty(); downloadClientItem.Status.Should().Be(DownloadItemStatus.Downloading); } protected void VerifyCompleted(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.Title.Should().NotBeNullOrEmpty(); downloadClientItem.RemainingSize.Should().Be(0); downloadClientItem.RemainingTime.Should().Be(TimeSpan.Zero); //downloadClientItem.OutputPath.Should().NotBeNullOrEmpty(); downloadClientItem.Status.Should().Be(DownloadItemStatus.Completed); } protected void VerifyWarning(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.Status.Should().Be(DownloadItemStatus.Warning); } protected void VerifyFailed(DownloadClientItem downloadClientItem) { VerifyIdentifiable(downloadClientItem); downloadClientItem.Status.Should().Be(DownloadItemStatus.Failed); } } }