using System; using System.Collections.Generic; using Moq; using NUnit.Framework; using NzbDrone.Common.Http; using NzbDrone.Core.Download; using NzbDrone.Core.Download.Clients.Transmission; using NzbDrone.Core.MediaFiles.TorrentInfo; namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests { public abstract class TransmissionFixtureBase : DownloadClientFixtureBase where TClient : class, IDownloadClient { protected TransmissionSettings _settings; protected TransmissionTorrent _queued; protected TransmissionTorrent _downloading; protected TransmissionTorrent _failed; protected TransmissionTorrent _completed; protected TransmissionTorrent _magnet; protected Dictionary _transmissionConfigItems; [SetUp] public void Setup() { _settings = new TransmissionSettings { Host = "127.0.0.1", Port = 2222, Username = "admin", Password = "pass" }; Subject.Definition = new DownloadClientDefinition(); Subject.Definition.Settings = _settings; _queued = new TransmissionTorrent { HashString = "HASH", IsFinished = false, Status = TransmissionTorrentStatus.Queued, Name = _title, TotalSize = 1000, LeftUntilDone = 1000, DownloadDir = "somepath" }; _downloading = new TransmissionTorrent { HashString = "HASH", IsFinished = false, Status = TransmissionTorrentStatus.Downloading, Name = _title, TotalSize = 1000, LeftUntilDone = 100, DownloadDir = "somepath" }; _failed = new TransmissionTorrent { HashString = "HASH", IsFinished = false, Status = TransmissionTorrentStatus.Stopped, Name = _title, TotalSize = 1000, LeftUntilDone = 100, ErrorString = "Error", DownloadDir = "somepath" }; _completed = new TransmissionTorrent { HashString = "HASH", IsFinished = true, Status = TransmissionTorrentStatus.Stopped, Name = _title, TotalSize = 1000, LeftUntilDone = 0, DownloadDir = "somepath" }; _magnet = new TransmissionTorrent { HashString = "HASH", IsFinished = false, Status = TransmissionTorrentStatus.Downloading, Name = _title, TotalSize = 0, LeftUntilDone = 100, DownloadDir = "somepath" }; Mocker.GetMock() .Setup(s => s.GetHashFromTorrentFile(It.IsAny())) .Returns("CBC2F069FE8BB2F544EAE707D75BCD3DE9DCF951"); Mocker.GetMock() .Setup(s => s.Get(It.IsAny())) .Returns(r => new HttpResponse(r, new HttpHeader(), new byte[0])); _transmissionConfigItems = new Dictionary(); _transmissionConfigItems.Add("download-dir", @"C:/Downloads/Finished/transmission"); _transmissionConfigItems.Add("incomplete-dir", null); _transmissionConfigItems.Add("incomplete-dir-enabled", false); Mocker.GetMock() .Setup(v => v.GetConfig(It.IsAny())) .Returns(_transmissionConfigItems); } protected void GivenTvCategory() { _settings.TvCategory = "Lidarr"; } protected void GivenTvDirectory() { _settings.TvDirectory = @"C:/Downloads/Finished/Lidarr"; } protected void GivenFailedDownload() { Mocker.GetMock() .Setup(s => s.AddTorrentFromUrl(It.IsAny(), It.IsAny(), It.IsAny())) .Throws(); } protected void GivenSuccessfulDownload() { Mocker.GetMock() .Setup(s => s.Get(It.IsAny())) .Returns(r => new HttpResponse(r, new HttpHeader(), new byte[1000])); Mocker.GetMock() .Setup(s => s.AddTorrentFromUrl(It.IsAny(), It.IsAny(), It.IsAny())) .Callback(PrepareClientToReturnQueuedItem); Mocker.GetMock() .Setup(s => s.AddTorrentFromData(It.IsAny(), It.IsAny(), It.IsAny())) .Callback(PrepareClientToReturnQueuedItem); } protected virtual void GivenTorrents(List torrents) { if (torrents == null) { torrents = new List(); } Mocker.GetMock() .Setup(s => s.GetTorrents(It.IsAny())) .Returns(torrents); } protected void PrepareClientToReturnQueuedItem() { GivenTorrents(new List { _queued }); } protected void PrepareClientToReturnDownloadingItem() { GivenTorrents(new List { _downloading }); } protected void PrepareClientToReturnFailedItem() { GivenTorrents(new List { _failed }); } protected void PrepareClientToReturnCompletedItem() { GivenTorrents(new List { _completed }); } protected void PrepareClientToReturnMagnetItem() { GivenTorrents(new List { _magnet }); } } }