using System; using System.Collections.Generic; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download; using NzbDrone.Core.Music; 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(() => CreateRemoteAlbum()); 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 RemoteAlbum CreateRemoteAlbum() { var remoteAlbum = new RemoteAlbum(); remoteAlbum.Release = new ReleaseInfo(); remoteAlbum.Release.Title = _title; remoteAlbum.Release.DownloadUrl = _downloadUrl; remoteAlbum.Release.DownloadProtocol = Subject.Protocol; remoteAlbum.ParsedAlbumInfo = new ParsedAlbumInfo(); remoteAlbum.Albums = new List(); remoteAlbum.Artist = new Artist(); return remoteAlbum; } 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); } } }