using System; using System.Collections.Generic; using System.IO; using FizzWare.NBuilder; using FluentAssertions; using FluentValidation; using FluentValidation.Results; using Moq; using NUnit.Framework; using NzbDrone.Core.Exceptions; using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Organizer; using NzbDrone.Core.Tv; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv.Events; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.TvTests { [TestFixture] public class AddSeriesFixture : CoreTest { private Series _fakeSeries; [SetUp] public void Setup() { _fakeSeries = Builder .CreateNew() .With(s => s.Path = null) .Build(); } private void GivenValidSeries(int tvdbId) { Mocker.GetMock() .Setup(s => s.GetSeriesInfo(tvdbId)) .Returns(new Tuple>(_fakeSeries, new List())); } private void GivenValidPath() { Mocker.GetMock() .Setup(s => s.GetSeriesFolder(It.IsAny(), null)) .Returns((c, n) => c.Title); Mocker.GetMock() .Setup(s => s.Validate(It.IsAny())) .Returns(new ValidationResult()); } [Test] public void should_be_able_to_add_a_series_without_passing_in_title() { var newSeries = new Series { TvdbId = 1, RootFolderPath = @"C:\Test\TV" }; GivenValidSeries(newSeries.TvdbId); GivenValidPath(); var series = Subject.AddSeries(newSeries); series.Title.Should().Be(_fakeSeries.Title); } [Test] public void should_have_proper_path() { var newSeries = new Series { TvdbId = 1, RootFolderPath = @"C:\Test\TV" }; GivenValidSeries(newSeries.TvdbId); GivenValidPath(); var series = Subject.AddSeries(newSeries); series.Path.Should().Be(Path.Combine(newSeries.RootFolderPath, _fakeSeries.Title)); } [Test] public void should_throw_if_series_validation_fails() { var newSeries = new Series { TvdbId = 1, Path = @"C:\Test\TV\Title1" }; GivenValidSeries(newSeries.TvdbId); Mocker.GetMock() .Setup(s => s.Validate(It.IsAny())) .Returns(new ValidationResult(new List { new ValidationFailure("Path", "Test validation failure") })); Assert.Throws(() => Subject.AddSeries(newSeries)); } [Test] public void should_throw_if_series_cannot_be_found() { var newSeries = new Series { TvdbId = 1, Path = @"C:\Test\TV\Title1" }; Mocker.GetMock() .Setup(s => s.GetSeriesInfo(newSeries.TvdbId)) .Throws(new SeriesNotFoundException(newSeries.TvdbId)); Mocker.GetMock() .Setup(s => s.Validate(It.IsAny())) .Returns(new ValidationResult(new List { new ValidationFailure("Path", "Test validation failure") })); Assert.Throws(() => Subject.AddSeries(newSeries)); ExceptionVerification.ExpectedErrors(1); } } }