using System; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.Clients.Nzbget; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbgetProviderTests { public class DownloadNzbFixture : CoreTest { private const string _url = "http://www.nzbdrone.com"; private const string _title = "30.Rock.S01E01.Pilot.720p.hdtv"; private RemoteEpisode _remoteEpisode; [SetUp] public void Setup() { var fakeConfig = Mocker.GetMock(); fakeConfig.SetupGet(c => c.NzbgetHost).Returns("192.168.5.55"); fakeConfig.SetupGet(c => c.NzbgetPort).Returns(6789); fakeConfig.SetupGet(c => c.NzbgetUsername).Returns("nzbget"); fakeConfig.SetupGet(c => c.NzbgetPassword).Returns("pass"); fakeConfig.SetupGet(c => c.NzbgetTvCategory).Returns("TV"); fakeConfig.SetupGet(c => c.NzbgetRecentTvPriority).Returns(PriorityType.High); _remoteEpisode = new RemoteEpisode(); _remoteEpisode.Report = new ReportInfo(); _remoteEpisode.Report.Title = _title; _remoteEpisode.Report.NzbUrl = _url; _remoteEpisode.Episodes = Builder.CreateListOfSize(1) .All() .With(e => e.AirDate = DateTime.Today.ToString(Episode.AIR_DATE_FORMAT)) .Build() .ToList(); } private void WithFailResponse() { Mocker.GetMock() .Setup(s => s.PostCommand("192.168.5.55:6789", "nzbget", "pass", It.IsAny())) .Returns(ReadAllText("Files", "Nzbget", "JsonError.txt")); } [Test] public void should_add_item_to_queue() { Mocker.GetMock() .Setup(s => s.PostCommand("192.168.5.55:6789", "nzbget", "pass", It.Is(c => c.Equals("{\"method\":\"appendurl\",\"params\":[\"30.Rock.S01E01.Pilot.720p.hdtv.nzb\",\"TV\",50,false,\"http://www.nzbdrone.com\"]}")))) .Returns("{\"version\": \"1.1\",\"result\": true}"); Mocker.Resolve().DownloadNzb(_remoteEpisode); } [Test] public void should_throw_when_error_is_returned() { WithFailResponse(); Assert.Throws(() => Mocker.Resolve().DownloadNzb(_remoteEpisode)); } } }