using System.Linq; using System.Net; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Core.Download; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.Download { [TestFixture] public class DownloadServiceFixture : CoreTest<DownloadService> { private RemoteEpisode _parseResult; [SetUp] public void Setup() { Mocker.GetMock<IProvideDownloadClient>() .Setup(c => c.GetDownloadClient()).Returns(Mocker.GetMock<IDownloadClient>().Object); var episodes = Builder<Episode>.CreateListOfSize(2) .TheFirst(1).With(s => s.Id = 12) .TheNext(1).With(s => s.Id = 99) .All().With(s => s.SeriesId = 5) .Build().ToList(); _parseResult = Builder<RemoteEpisode>.CreateNew() .With(c => c.Series = Builder<Series>.CreateNew().Build()) .With(c => c.Release = Builder<ReleaseInfo>.CreateNew().Build()) .With(c => c.Episodes = episodes) .Build(); Mocker.GetMock<IDownloadClient>().Setup(c => c.IsConfigured).Returns(true); } private void WithSuccessfulAdd() { Mocker.GetMock<IDownloadClient>() .Setup(s => s.DownloadNzb(It.IsAny<RemoteEpisode>())); } private void WithFailedAdd() { Mocker.GetMock<IDownloadClient>() .Setup(s => s.DownloadNzb(It.IsAny<RemoteEpisode>())) .Throws(new WebException()); } [Test] public void Download_report_should_publish_on_grab_event() { WithSuccessfulAdd(); Subject.DownloadReport(_parseResult); VerifyEventPublished<EpisodeGrabbedEvent>(); } [Test] public void Download_report_should_grab_using_client() { WithSuccessfulAdd(); Subject.DownloadReport(_parseResult); Mocker.GetMock<IDownloadClient>() .Verify(s => s.DownloadNzb(It.IsAny<RemoteEpisode>()), Times.Once()); } [Test] public void Download_report_should_not_publish_on_failed_grab_event() { WithFailedAdd(); Assert.Throws<WebException>(() => Subject.DownloadReport(_parseResult)); VerifyEventNotPublished<EpisodeGrabbedEvent>(); } [Test] public void should_not_attempt_download_if_client_isnt_configure() { Mocker.GetMock<IDownloadClient>().Setup(c => c.IsConfigured).Returns(false); Subject.DownloadReport(_parseResult); Mocker.GetMock<IDownloadClient>().Verify(c => c.DownloadNzb(It.IsAny<RemoteEpisode>()), Times.Never()); VerifyEventNotPublished<EpisodeGrabbedEvent>(); ExceptionVerification.ExpectedWarns(1); } } }