From 3e1ff7e96ee986759c8394f12a3c17904d5919be Mon Sep 17 00:00:00 2001
From: "kay.one" <kay.one@gmail.com>
Date: Thu, 19 May 2011 21:18:51 -0700
Subject: [PATCH] Basic indexer tests are working

---
 NzbDrone.Core.Test/EpisodeProviderTest.cs     | Bin 8242 -> 6888 bytes
 .../Framework/ExceptionVerification.cs        |  16 ++++
 NzbDrone.Core.Test/IndexerProviderTest.cs     |  87 ++++++------------
 NzbDrone.Core.Test/SabProviderTest.cs         |   4 +-
 4 files changed, 46 insertions(+), 61 deletions(-)

diff --git a/NzbDrone.Core.Test/EpisodeProviderTest.cs b/NzbDrone.Core.Test/EpisodeProviderTest.cs
index 80f5c3c9b6f0e31d34e37d7eb26501f2f1993353..c2faea37504c2340fe9bc77d9ec539df75d6d70f 100644
GIT binary patch
delta 1711
zcmb7EO>7fK6qcPI$LpQ=H?gz+!A?RGgX>jN1*)WJ2_#6V5(FeDLXbvIGK2-=O?THM
zDT)M_iVKR+>!n9-+z@bV5nK_d61^hS9@|5OKu8?vd$YT&<6K}@nt3ztdvCt?GxOlc
zKO_5J|Ms|UYPGfe+?HwaD`QM*T$X3F+K*%Gc3*F%NinHa)@r(GX)7k`m-a<n{Y2f;
zXLT~V)$@hBIlFwOrdj3VM&%0M(2dI<kFk+Y(??z8iJz7y4ZX(8$8>|2Pa67FZIv5%
zhQn*O{xo0LP0iActuY3DJ}u?K=C7_U&uGi#$%<7$TLyQ0*(8&$F)5GVxp{6{$F)tX
zZtz70fBF{DkQ9#oBL<a)co&@YC;Dta6Nr|oI$;=<+8SqY%RlI&F$vH8u@*Y^FaH$o
z^tbfl=##tQe9QMj8h|G)!O+4*Zt#g}b+AZUu?LaXuRVlRK3dnRtAj-Z+-N-{TrS2B
zi1~gd0q<KqIUGo$;q_<=cv}IbpW8+R?)SC{jE;U{>wd_3#bOX`KZwx#nGEPk3@)|j
zaCNi&2TYX<q#41c$qmHQq2WM3qHd=X@JG5GW&>$lT?~xoJ)7;u(?qftDH)Ff3PSI7
zq~UGgfFm95P=z!WwTwD1<!LMu8u9l!rXAFV6ovlafLIlv8YI%>=RxqWBP~djHrlhL
z9cdQVRJ=FRuLX}<Lxt_g=D1Z~XK*((g7_O@3e6`MVMz`PX#oC<1mJp4%2~aXT}fe-
z?;*BdWO;!V1tRCaMh<#GVIg?VLSnNQUdobuL96mp^-5K<wg{4I+ZLUvc8*3oenbjA
zY;<PP@|Vt=IA+2J<GTU2;kc3lJsd-XOPfO2Oa4g2X7MF#MotI>1(guAk$!l$ZwA<4
z0ecS<+Vu@Qi6vsCJYUyLeU(qwF6c$Un;KxII|%P$@#fNd9-ZQgLOe_sKA{ksi9_9<
zy`2uxj0|2U@~y)qCc&#nl1k!7@tLf^PFJL>vE#_dPSM>^20o;ez4;|qUwxJ<%nIhN
z@zRYeQ%#Ol6?T-7y_+u-s?2!qySbrZN*)n(Klg5xr_Fin{Xv79^{O@WX)yAJH<4P;
zzK`)y&pX~i_YhBVZ=<U@H?_H5)mAhMpSozKEPF`o!d)?o=u0@h%9Iiwj2x+Ig&q^N
zGYP}ll4z`@EIoXfA{_tCe%sSrA2e~El<^$hR15-Z=(2LC<Fx(oMXut5zjN~c$dr|(

literal 8242
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
C1+<g^

diff --git a/NzbDrone.Core.Test/Framework/ExceptionVerification.cs b/NzbDrone.Core.Test/Framework/ExceptionVerification.cs
index 6f6f27331..6de716867 100644
--- a/NzbDrone.Core.Test/Framework/ExceptionVerification.cs
+++ b/NzbDrone.Core.Test/Framework/ExceptionVerification.cs
@@ -69,6 +69,16 @@ namespace NzbDrone.Core.Test.Framework
             Excpected(LogLevel.Warn, count);
         }
 
+        internal static void IgnoreWarns()
+        {
+            Ignore(LogLevel.Warn);
+        }
+
+        internal static void IgnoreErrors()
+        {
+            Ignore(LogLevel.Error);
+        }
+
         private static void Excpected(LogLevel level, int count)
         {
             var levelLogs = _logs.Where(l => l.Level == level).ToList();
@@ -83,5 +93,11 @@ namespace NzbDrone.Core.Test.Framework
 
             levelLogs.ForEach(c => _logs.Remove(c));
         }
+
+        private static void Ignore(LogLevel level)
+        {
+            var levelLogs = _logs.Where(l => l.Level == level).ToList();
+            levelLogs.ForEach(c => _logs.Remove(c));
+        }
     }
 }
\ No newline at end of file
diff --git a/NzbDrone.Core.Test/IndexerProviderTest.cs b/NzbDrone.Core.Test/IndexerProviderTest.cs
index 6eeadec26..aa924a42d 100644
--- a/NzbDrone.Core.Test/IndexerProviderTest.cs
+++ b/NzbDrone.Core.Test/IndexerProviderTest.cs
@@ -7,6 +7,7 @@ using AutoMoq;
 using FizzWare.NBuilder;
 using MbUnit.Framework;
 using Moq;
+using NzbDrone.Core.Model;
 using NzbDrone.Core.Providers;
 using NzbDrone.Core.Providers.Core;
 using NzbDrone.Core.Providers.ExternalNotification;
@@ -22,11 +23,11 @@ namespace NzbDrone.Core.Test
     public class IndexerProviderTest : TestBase
     {
         [Test]
-        [Row("nzbsorg.xml")]
-        [Row("nzbsrus.xml")]
-        [Row("newzbin.xml")]
-        [Row("nzbmatrix.xml")]
-        public void parse_feed_xml(string fileName)
+        [Row("nzbsorg.xml", 0)]
+        [Row("nzbsrus.xml", 6)]
+        [Row("newzbin.xml", 1)]
+        [Row("nzbmatrix.xml", 1)]
+        public void parse_feed_xml(string fileName, int warns)
         {
             var mocker = new AutoMoqer();
 
@@ -39,21 +40,18 @@ namespace NzbDrone.Core.Test
                 .Setup(c => c.GetSettings(It.IsAny<Type>()))
                 .Returns(fakeSettings);
 
-            var exceptions = mocker.Resolve<MockIndexerProvider>().Fetch();
+            var parseResults = mocker.Resolve<MockIndexerProvider>().Fetch();
 
-            foreach (var exception in exceptions)
-            {
-                Console.WriteLine(exception.ToString());
-            }
 
-            Assert.IsEmpty(exceptions);
+            Assert.IsNotEmpty(parseResults);
+            ExceptionVerification.ExcpectedWarns(warns);
         }
 
 
 
         [Test]
         [Row("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", 3, 19, QualityTypes.DVD)]
-        public void parse_feed_test_success(string title, int season, int episode, QualityTypes quality)
+        public void custome_parser_partial_success(string title, int season, int episode, QualityTypes quality)
         {
             var mocker = new AutoMoqer();
 
@@ -64,11 +62,6 @@ namespace NzbDrone.Core.Test
                 .Setup(c => c.GetSettings(It.IsAny<Type>()))
                 .Returns(fakeSettings);
 
-            mocker.GetMock<SeriesProvider>()
-                .Setup(c => c.FindSeries(It.IsAny<String>()))
-                .Returns(Builder<Series>.CreateNew().Build());
-
-
             var fakeRssItem = Builder<SyndicationItem>.CreateNew()
                 .With(c => c.Title = new TextSyndicationContent(title))
                 .With(c => c.Summary = new TextSyndicationContent(summary))
@@ -78,31 +71,33 @@ namespace NzbDrone.Core.Test
 
             Assert.IsNotNull(result);
             Assert.AreEqual(summary, result.EpisodeTitle);
+            Assert.AreEqual(season, result.SeasonNumber);
+            Assert.AreEqual(episode, result.Episodes[0]);
+            Assert.AreEqual(quality, result.Quality);
         }
 
         [Test]
         [Row("Adventure.Inc.DVDRip.XviD-OSiTV")]
-        public void parse_feed_test_fail(string title)
+        public void custome_parser_full_parse(string title)
         {
             var mocker = new AutoMoqer();
 
-
+            const string summary = "My fake summary";
 
             var fakeSettings = Builder<IndexerSetting>.CreateNew().Build();
             mocker.GetMock<IndexerProvider>()
                 .Setup(c => c.GetSettings(It.IsAny<Type>()))
                 .Returns(fakeSettings);
 
-            mocker.GetMock<SeriesProvider>(MockBehavior.Strict);
-
-
             var fakeRssItem = Builder<SyndicationItem>.CreateNew()
                 .With(c => c.Title = new TextSyndicationContent(title))
+                .With(c => c.Summary = new TextSyndicationContent(summary))
                 .Build();
 
             var result = mocker.Resolve<CustomParserIndexer>().ParseFeed(fakeRssItem);
 
-            Assert.IsNull(result);
+            Assert.IsNotNull(result);
+            Assert.AreEqual(summary, result.EpisodeTitle);
             ExceptionVerification.ExcpectedWarns(1);
         }
 
@@ -119,6 +114,8 @@ namespace NzbDrone.Core.Test
                 .Returns(fakeSettings);
 
             mocker.Resolve<TestUrlIndexer>().Fetch();
+
+            ExceptionVerification.IgnoreWarns();
         }
 
         [Test]
@@ -146,19 +143,14 @@ namespace NzbDrone.Core.Test
                 .Returns<Series>(null);
 
             var indexer = mocker.Resolve<MockIndexerProvider>();
-            indexer.ProcessItem(new SyndicationItem { Title = new TextSyndicationContent("Adventure.Inc.S01E18.DVDRip.XviD-OSiTV") });
+            //indexer.ProcessItem(new SyndicationItem { Title = new TextSyndicationContent("Adventure.Inc.S01E18.DVDRip.XviD-OSiTV") });
         }
     }
 
     public class MockIndexerProvider : IndexerProviderBase
     {
-        public MockIndexerProvider(SeriesProvider seriesProvider, SeasonProvider seasonProvider,
-            EpisodeProvider episodeProvider, ConfigProvider configProvider,
-            HttpProvider httpProvider, IndexerProvider indexerProvider,
-            HistoryProvider historyProvider, SabProvider sabProvider, IEnumerable<ExternalNotificationProviderBase> externalNotificationProvider)
-            : base(seriesProvider, seasonProvider, episodeProvider,
-            configProvider, httpProvider, indexerProvider, historyProvider,
-            sabProvider, externalNotificationProvider)
+        public MockIndexerProvider(HttpProvider httpProvider, ConfigProvider configProvider, IndexerProvider indexerProvider)
+            : base(httpProvider, configProvider, indexerProvider)
         {
         }
 
@@ -177,10 +169,6 @@ namespace NzbDrone.Core.Test
             get { return "Mocked Indexer"; }
         }
 
-        public override bool SupportsBacklog
-        {
-            get { return false; }
-        }
 
         protected override string NzbDownloadUrl(SyndicationItem item)
         {
@@ -190,13 +178,8 @@ namespace NzbDrone.Core.Test
 
     public class TestUrlIndexer : IndexerProviderBase
     {
-        public TestUrlIndexer(SeriesProvider seriesProvider, SeasonProvider seasonProvider,
-            EpisodeProvider episodeProvider, ConfigProvider configProvider,
-            HttpProvider httpProvider, IndexerProvider indexerProvider,
-            HistoryProvider historyProvider, SabProvider sabProvider, IEnumerable<ExternalNotificationProviderBase> externalNotificationProvider)
-            : base(seriesProvider, seasonProvider, episodeProvider,
-            configProvider, httpProvider, indexerProvider, historyProvider,
-            sabProvider, externalNotificationProvider)
+        public TestUrlIndexer(HttpProvider httpProvider, ConfigProvider configProvider, IndexerProvider indexerProvider)
+            : base(httpProvider, configProvider, indexerProvider)
         {
         }
 
@@ -205,11 +188,6 @@ namespace NzbDrone.Core.Test
             get { return "All Urls"; }
         }
 
-        public override bool SupportsBacklog
-        {
-            get { return false; }
-        }
-
         protected override string[] Urls
         {
             get { return new[] { "http://rss.nzbmatrix.com/rss.php?cat=TV" }; }
@@ -223,13 +201,8 @@ namespace NzbDrone.Core.Test
 
     public class CustomParserIndexer : IndexerProviderBase
     {
-        public CustomParserIndexer(SeriesProvider seriesProvider, SeasonProvider seasonProvider,
-            EpisodeProvider episodeProvider, ConfigProvider configProvider,
-            HttpProvider httpProvider, IndexerProvider indexerProvider,
-            HistoryProvider historyProvider, SabProvider sabProvider, IEnumerable<ExternalNotificationProviderBase> externalNotificationProvider)
-            : base(seriesProvider, seasonProvider, episodeProvider,
-            configProvider, httpProvider, indexerProvider, historyProvider,
-            sabProvider, externalNotificationProvider)
+        public CustomParserIndexer(HttpProvider httpProvider, ConfigProvider configProvider, IndexerProvider indexerProvider)
+            : base(httpProvider, configProvider, indexerProvider)
         {
         }
 
@@ -238,10 +211,7 @@ namespace NzbDrone.Core.Test
             get { return "Custom parser"; }
         }
 
-        public override bool SupportsBacklog
-        {
-            get { return false; }
-        }
+
 
         protected override string[] Urls
         {
@@ -255,6 +225,7 @@ namespace NzbDrone.Core.Test
 
         protected override Model.EpisodeParseResult CustomParser(SyndicationItem item, Model.EpisodeParseResult currentResult)
         {
+            if (currentResult == null) currentResult = new EpisodeParseResult();
             currentResult.EpisodeTitle = item.Summary.Text;
             return currentResult;
         }
diff --git a/NzbDrone.Core.Test/SabProviderTest.cs b/NzbDrone.Core.Test/SabProviderTest.cs
index 229d2564e..8f4f37494 100644
--- a/NzbDrone.Core.Test/SabProviderTest.cs
+++ b/NzbDrone.Core.Test/SabProviderTest.cs
@@ -221,18 +221,16 @@ namespace NzbDrone.Core.Test
 
             var parsResult = new EpisodeParseResult()
             {
-                SeriesId = 12,
                 AirDate = DateTime.Now,
                 Episodes = episodes.ToList(),
                 Proper = proper,
                 Quality = quality,
                 SeasonNumber = seasons,
                 EpisodeTitle = title,
-                FolderName = "My Series Name"
             };
 
             //Act
-            var actual = mocker.Resolve<SabProvider>().GetSabTitle(parsResult);
+            var actual = mocker.Resolve<SabProvider>().GetSabTitle(parsResult, "My Series Name");
 
             //Assert
             Assert.AreEqual(excpected, actual);