using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using FizzWare.NBuilder; using Gallio.Framework; using MbUnit.Framework; using MbUnit.Framework.ContractVerifiers; using Moq; using Ninject; using Ninject.Moq; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Repository; using NzbDrone.Core.Repository.Quality; using SubSonic.Repository; namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming public class MediaFileProviderTests { [Test] [Description("Verifies that a new file imported properly")] public void import_new_file() { //Arrange ///////////////////////////////////////// //Constants const string fileName = @"WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; const int seasonNumber = 3; const int episodeNumner = 01; const int size = 12345; //Fakes var fakeSeries = Builder.CreateNew().Build(); var fakeEpisode = Builder.CreateNew().With(c => c.SeriesId = fakeSeries.SeriesId).Build(); //Mocks var repository = new Mock(); repository.Setup(r => r.Exists(It.IsAny>>())).Returns(false).Verifiable(); var episodeProvider = new Mock(); episodeProvider.Setup(e => e.GetEpisode(fakeSeries.SeriesId, seasonNumber, episodeNumner)).Returns(fakeEpisode).Verifiable(); var diskProvider = new Mock(); diskProvider.Setup(e => e.GetSize(fileName)).Returns(12345).Verifiable(); var kernel = new MockingKernel(); kernel.Bind().ToConstant(repository.Object); kernel.Bind().ToConstant(episodeProvider.Object); kernel.Bind().ToConstant(diskProvider.Object); kernel.Bind().To(); //Act var result = kernel.Get().ImportFile(fakeSeries, fileName); //Assert repository.VerifyAll(); episodeProvider.VerifyAll(); diskProvider.VerifyAll(); Assert.IsNotNull(result); repository.Verify(r => r.Add(result), Times.Once()); Assert.AreEqual(fakeEpisode, result.Episodes[0]); Assert.AreEqual(fakeEpisode.SeriesId, result.SeriesId); Assert.AreEqual(QualityTypes.DVD, result.Quality); Assert.AreEqual(Parser.NormalizePath(fileName), result.Path); Assert.AreEqual(size, result.Size); Assert.AreEqual(false, result.Proper); Assert.AreNotEqual(new DateTime(), result.DateAdded); } [Test] [Description("Verifies that an existing file will skip import")] public void import_existing_file() { //Arrange ///////////////////////////////////////// //Constants const string fileName = "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; //Fakes var fakeSeries = Builder.CreateNew().Build(); var fakeEpisode = Builder.CreateNew().With(c => c.SeriesId = fakeSeries.SeriesId).Build(); //Mocks var repository = new Mock(MockBehavior.Strict); repository.Setup(r => r.Exists(It.IsAny>>())).Returns(true).Verifiable(); var episodeProvider = new Mock(MockBehavior.Strict); var diskProvider = new Mock(MockBehavior.Strict); var kernel = new MockingKernel(); kernel.Bind().ToConstant(repository.Object); kernel.Bind().ToConstant(episodeProvider.Object); kernel.Bind().ToConstant(diskProvider.Object); kernel.Bind().To(); //Act var result = kernel.Get().ImportFile(fakeSeries, fileName); //Assert repository.VerifyAll(); episodeProvider.VerifyAll(); diskProvider.VerifyAll(); Assert.IsNull(result); repository.Verify(r => r.Add(result), Times.Never()); } [Test] [Description("Verifies that a file with no episode is skipped")] public void import_file_with_no_episode() { //Arrange ///////////////////////////////////////// //Constants const string fileName = "WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi"; const int seasonNumber = 3; const int episodeNumner = 01; //Fakes var fakeSeries = Builder.CreateNew().Build(); //Mocks var repository = new Mock(MockBehavior.Strict); repository.Setup(r => r.Exists(It.IsAny>>())).Returns(false).Verifiable(); var episodeProvider = new Mock(MockBehavior.Strict); episodeProvider.Setup(e => e.GetEpisode(fakeSeries.SeriesId, seasonNumber, episodeNumner)).Returns(null).Verifiable(); var diskProvider = new Mock(MockBehavior.Strict); var kernel = new MockingKernel(); kernel.Bind().ToConstant(repository.Object); kernel.Bind().ToConstant(episodeProvider.Object); kernel.Bind().ToConstant(diskProvider.Object); kernel.Bind().To(); //Act var result = kernel.Get().ImportFile(fakeSeries, fileName); //Assert repository.VerifyAll(); episodeProvider.VerifyAll(); diskProvider.VerifyAll(); Assert.IsNull(result); repository.Verify(r => r.Add(result), Times.Never()); } [Test] [Row("Season {season}\\S{season:00}E{episode:00} - {title} - {quality}", "Season 6\\S06E08 - Lethal Inspection - hdtv")] [Row("Season {season}\\{series} - {season:##}{episode:00} - {title} - {quality}", "Season 6\\Futurama - 608 - Lethal Inspection - hdtv")] [Row("Season {season}\\{series} - {season:##}{episode:00} - {title}", "Season 6\\Futurama - 608 - Lethal Inspection")] public void test_file_path_generation(string patern, string path) { var fakeConfig = new Mock(); fakeConfig.Setup(c => c.EpisodeNameFormat).Returns(patern); var kernel = new MockingKernel(); kernel.Bind().ToConstant(fakeConfig.Object); kernel.Bind().To(); var fakeEpisode = new EpisodeModel { SeasonNumber = 6, EpisodeNumber = 8, EpisodeTitle = "Lethal Inspection", Quality = QualityTypes.HDTV, SeriesTitle = "Futurama" }; //Act var result = kernel.Get().GenerateEpisodePath(fakeEpisode); //Assert Assert.AreEqual(path.ToLowerInvariant(), result.ToLowerInvariant()); } } }