From babe2735ee63dd4d5b51c135009fc39c899b8630 Mon Sep 17 00:00:00 2001 From: Keivan Date: Mon, 27 Sep 2010 20:04:39 -0700 Subject: [PATCH] failed attempt to write a test for Series Controller --- NzbDrone.Core.Test/MockLib.cs | 42 +++++++++++++++++++ NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 1 + NzbDrone.Core.Test/SeriesTest.cs | 25 ++++++++--- NzbDrone.Core/Controllers/DiskController.cs | 8 ---- NzbDrone.Core/Controllers/IDiskController.cs | 1 - NzbDrone.Core/Controllers/SeriesController.cs | 18 ++++++-- NzbDrone.Core/Helpers/Disk.cs | 25 +++++++++++ NzbDrone.Core/Main.cs | 5 +-- NzbDrone.Core/NzbDrone.Core.csproj | 1 + NzbDrone.Core/Repository/Series.cs | 2 +- 10 files changed, 105 insertions(+), 23 deletions(-) create mode 100644 NzbDrone.Core.Test/MockLib.cs create mode 100644 NzbDrone.Core/Helpers/Disk.cs diff --git a/NzbDrone.Core.Test/MockLib.cs b/NzbDrone.Core.Test/MockLib.cs new file mode 100644 index 000000000..5a1dad397 --- /dev/null +++ b/NzbDrone.Core.Test/MockLib.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Moq; +using NzbDrone.Core.Controllers; + +namespace NzbDrone.Core.Test +{ + /// + /// Provides the standard Mocks needed for a typical test + /// + static class MockLib + { + public static string[] StandardSeries + { + get { return new string[] { "C:\\TV\\The Simpsons", "C:\\TV\\Family Guy" }; } + } + + + public static IConfigController StandardConfig + { + get + { + var mock = new Mock(); + mock.SetupGet(c => c.SeriesRoot).Returns("C:\\"); + return mock.Object; + } + } + + public static IDiskController StandardDisk + { + get + { + var mock = new Mock(); + mock.Setup(c => c.GetDirectories(It.IsAny())).Returns(StandardSeries); + mock.Setup(c => c.Exists(It.Is(d => StandardSeries.Contains(d)))).Returns(true); + return mock.Object; + } + } + } +} diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index ed47967a3..50208906e 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -67,6 +67,7 @@ + diff --git a/NzbDrone.Core.Test/SeriesTest.cs b/NzbDrone.Core.Test/SeriesTest.cs index 246f6633e..8ac0db330 100644 --- a/NzbDrone.Core.Test/SeriesTest.cs +++ b/NzbDrone.Core.Test/SeriesTest.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.IO; using System.Text; using FizzWare.NBuilder; using Gallio.Framework; @@ -21,6 +22,7 @@ namespace NzbDrone.Core.Test public class SeriesTest { [Test] + [Ignore("Can't get it to work")] [Description("This test will confirm that a folder will be skipped if it has been resolved to a series already assigned to another folder")] public void skip_same_series_diffrent_folder() { @@ -35,21 +37,34 @@ namespace NzbDrone.Core.Test .With(f => f.TvdbId = tvDbId.ToString()) .Build(); - moqData.Setup(f => f.Single(tvDbId)). - Returns(fakeSeries); + moqData.Setup(f => f.Exists(c => c.TvdbId == tvDbId.ToString())). + Returns(true); //setup tvdb to return the same show, IList fakeSearchResult = Builder.CreateListOfSize(4).WhereTheFirst(1).Has(f => f.Id = tvDbId).Build(); - + TvdbSeries fakeTvDbSeries = Builder.CreateNew() + .With(f => f.Id = tvDbId) + .Build(); + + moqTvdb.Setup(f => f.GetSeries(It.IsAny(), It.IsAny())).Returns(fakeTvDbSeries); moqTvdb.Setup(f => f.SearchSeries(It.IsAny())). - Returns(fakeSearchResult); + Returns(fakeSearchResult); var kernel = new MockingKernel(); kernel.Bind().ToConstant(moqData.Object); kernel.Bind().ToConstant(moqTvdb.Object); + kernel.Bind().ToConstant(MockLib.StandardConfig); + kernel.Bind().ToConstant(MockLib.StandardDisk); + kernel.Bind().To(); + + //Act var seriesController = kernel.Get(); - seriesController.a + seriesController.SyncSeriesWithDisk(); + + //Assert + //Verify that the show was added to the database only once. + moqData.Verify(c => c.Add(It.IsAny()), Times.Once()); } } } diff --git a/NzbDrone.Core/Controllers/DiskController.cs b/NzbDrone.Core/Controllers/DiskController.cs index ed1622231..a715e4880 100644 --- a/NzbDrone.Core/Controllers/DiskController.cs +++ b/NzbDrone.Core/Controllers/DiskController.cs @@ -22,14 +22,6 @@ namespace NzbDrone.Core.Controllers return Directory.CreateDirectory(path).FullName; } - - public string CleanPath(string path) - { - if (string.IsNullOrEmpty(path)) throw new ArgumentException("Path can not be null or empty"); - - return path.ToLower().Trim('/', '\\', ' '); - } - #endregion } } \ No newline at end of file diff --git a/NzbDrone.Core/Controllers/IDiskController.cs b/NzbDrone.Core/Controllers/IDiskController.cs index 2040545e5..03568f638 100644 --- a/NzbDrone.Core/Controllers/IDiskController.cs +++ b/NzbDrone.Core/Controllers/IDiskController.cs @@ -7,6 +7,5 @@ namespace NzbDrone.Core.Controllers bool Exists(string path); string[] GetDirectories(string path); String CreateDirectory(string path); - string CleanPath(string path); } } \ No newline at end of file diff --git a/NzbDrone.Core/Controllers/SeriesController.cs b/NzbDrone.Core/Controllers/SeriesController.cs index d1c1d6064..06405bf8c 100644 --- a/NzbDrone.Core/Controllers/SeriesController.cs +++ b/NzbDrone.Core/Controllers/SeriesController.cs @@ -2,6 +2,7 @@ using System.IO; using System.Linq; using log4net; +using NzbDrone.Core.Helpers; using NzbDrone.Core.Repository; using SubSonic.Repository; using TvdbLib.Data; @@ -34,7 +35,7 @@ namespace NzbDrone.Core.Controllers public Series GetSeries(int tvdbId) { - return _sonioRepo.Single(s=> s.TvdbId == tvdbId.ToString()); + return _sonioRepo.Single(s => s.TvdbId == tvdbId.ToString()); } @@ -44,7 +45,7 @@ namespace NzbDrone.Core.Controllers foreach (string seriesFolder in _diskController.GetDirectories(_config.SeriesRoot)) { - var cleanPath =_diskController.CleanPath(new DirectoryInfo(seriesFolder).FullName); + var cleanPath = Disk.CleanPath(new DirectoryInfo(seriesFolder).FullName); if (!_sonioRepo.Exists(s => s.Path == cleanPath)) { _logger.InfoFormat("Folder '{0} isn't mapped to a series in the database. Trying to map it.'", cleanPath); @@ -59,7 +60,7 @@ namespace NzbDrone.Core.Controllers private void AddShow(string path) { var searchResults = _tvDb.SearchSeries(new DirectoryInfo(path).Name); - if (searchResults.Count != 0) + if (searchResults.Count != 0 && !_sonioRepo.Exists(s => s.TvdbId == searchResults[0].Id.ToString())) { AddShow(path, _tvDb.GetSeries(searchResults[0].Id, searchResults[0].Language)); } @@ -67,7 +68,16 @@ namespace NzbDrone.Core.Controllers private void AddShow(string path, TvdbSeries series) { - _sonioRepo.Add(new Series { TvdbId = series.Id.ToString(), SeriesName = series.SeriesName, AirTimes = series.AirsTime, AirsDayOfWeek = series.AirsDayOfWeek, Overview = series.Overview, Status = series.Status, Language = series.Language.Abbriviation, Path = path }); + var repoSeries = new Series(); + repoSeries.TvdbId = series.Id.ToString(); + repoSeries.SeriesName = series.SeriesName; + repoSeries.AirTimes = series.AirsTime; + repoSeries.AirsDayOfWeek = series.AirsDayOfWeek; + repoSeries.Overview = series.Overview; + repoSeries.Status = series.Status; + repoSeries.Language = series.Language != null ? series.Language.Abbriviation : string.Empty; + repoSeries.Path = path; + _sonioRepo.Add(repoSeries); } } } \ No newline at end of file diff --git a/NzbDrone.Core/Helpers/Disk.cs b/NzbDrone.Core/Helpers/Disk.cs new file mode 100644 index 000000000..4c56b58a6 --- /dev/null +++ b/NzbDrone.Core/Helpers/Disk.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NzbDrone.Core.Helpers +{ + + static class Disk + { + + /// + /// Cleans the path. making it a uniform path. + /// this will normalize all different presentations of a single folder. + /// + /// The path. + /// Cleaned Path + public static string CleanPath(string path) + { + if (string.IsNullOrEmpty(path)) throw new ArgumentException("Path can not be null or empty"); + return path.ToLower().Trim('/', '\\', ' '); + } + + } +} diff --git a/NzbDrone.Core/Main.cs b/NzbDrone.Core/Main.cs index 9150069d5..5d9aa8a57 100644 --- a/NzbDrone.Core/Main.cs +++ b/NzbDrone.Core/Main.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core public static void BindKernel(IKernel kernel) { - string connectionString = String.Format("Data Source={0};Version=3;",Path.Combine(AppPath, "nzbdrone.db")) ; + string connectionString = String.Format("Data Source={0};Version=3;", Path.Combine(AppPath, "nzbdrone.db")); var provider = ProviderFactory.GetProvider(connectionString, "System.Data.SQLite"); kernel.Bind().To(); @@ -25,9 +25,6 @@ namespace NzbDrone.Core kernel.Bind().ToMethod(c => new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations)); } - - private static string _appPath; - public static String AppPath { get { return new DirectoryInfo(HttpContext.Current.Server.MapPath("\\")).Parent.FullName; } diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 393b1637b..49faabaea 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -138,6 +138,7 @@ + diff --git a/NzbDrone.Core/Repository/Series.cs b/NzbDrone.Core/Repository/Series.cs index 185aabeef..afd886c99 100644 --- a/NzbDrone.Core/Repository/Series.cs +++ b/NzbDrone.Core/Repository/Series.cs @@ -37,7 +37,7 @@ namespace NzbDrone.Core.Repository set; } - public string AirTimes + public String AirTimes { get; set;