Merge branch 'master' of git://github.com/kayone/NzbDrone

pull/7/merge
Mark McDowall 13 years ago
commit 4f16615e8b

Binary file not shown.

@ -0,0 +1,15 @@
<Configuration>
<SnapshotDialog>
<InitialDirectory>D:\My Dropbox\Git\NzbDrone</InitialDirectory>
</SnapshotDialog>
<CoverageFilters>
<AllowFilters>
<Filter>
<ClassFilter>*</ClassFilter>
<FunctionFilter>*</FunctionFilter>
<ModuleFilter>*</ModuleFilter>
</Filter>
</AllowFilters>
<DenyFilters />
</CoverageFilters>
</Configuration>

@ -5,8 +5,8 @@ using System.Collections.Generic;
using System.Threading;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Jobs;

@ -3,10 +3,8 @@ using System.Collections.Generic;
using System.Text;
using AutoMoq;
using FizzWare.NBuilder;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Repository;

@ -2,12 +2,12 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq.Expressions;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Repository;
@ -53,9 +53,9 @@ namespace NzbDrone.Core.Test
mocker.Resolve<EpisodeProvider>().RefreshEpisodeInfo(fakeSeries);
//Assert
var actualCount = mocker.Resolve<EpisodeProvider>().GetEpisodeBySeries(seriesId);
var actualCount = mocker.Resolve<EpisodeProvider>().GetEpisodeBySeries(seriesId).Count;
mocker.GetMock<TvDbProvider>().VerifyAll();
Assert.Count(episodeCount, actualCount);
actualCount.Should().Be(episodeCount);
mocker.VerifyAllMocks();
}
@ -190,7 +190,7 @@ namespace NzbDrone.Core.Test
//Assert
mocker.VerifyAllMocks();
Assert.Count(1, repo.All<Episode>());
repo.All<Episode>().Should().HaveCount(1);
}
[Test]
@ -214,7 +214,7 @@ namespace NzbDrone.Core.Test
.With(c => c.SeasonNumber = 4)
.With(c => c.EpisodeNumber = 15)
.Build();
var fakeSeries = Builder<Series>.CreateNew().With(c => c.SeriesId = seriesId).Build();
@ -234,7 +234,7 @@ namespace NzbDrone.Core.Test
//Assert
mocker.VerifyAllMocks();
Assert.Count(1, repo.All<Episode>());
repo.All<Episode>().Should().HaveCount(1);
}
@ -283,9 +283,10 @@ namespace NzbDrone.Core.Test
e => e.Where(g => g.EpisodeFileId == 69).Count() == faketvDbResponse.Episodes.Count)),
Times.Once());
Assert.Count(faketvDbResponse.Episodes.Count, updatedEpisodes);
Assert.ForAll(updatedEpisodes, c => Assert.AreEqual(99, c.EpisodeId));
Assert.ForAll(updatedEpisodes, c => Assert.AreEqual(69, c.EpisodeFileId));
updatedEpisodes.Should().HaveSameCount(faketvDbResponse.Episodes);
updatedEpisodes.Should().OnlyContain(c => c.EpisodeId == 99);
updatedEpisodes.Should().OnlyContain(c => c.EpisodeFileId == 69);
}
@ -307,7 +308,7 @@ namespace NzbDrone.Core.Test
//assert
var episodes = episodeProvider.GetEpisodeBySeries(tvDbSeriesId);
Assert.IsNotEmpty(episodes);
episodes.Should().NotBeEmpty();
}
}
}

@ -3,8 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
@ -94,7 +95,7 @@ namespace NzbDrone.Core.Test
.WhereRandom(1).Has(c => c.Quality = new Quality(QualityTypes.DVD, true))
.Build();
Assert.Count(1, parseResults.Where(c => c.Quality.Proper));
parseResults.Where(c => c.Quality.Proper).Should().HaveCount(1);
var episode = Builder<Episode>.CreateNew().Build();
@ -199,9 +200,9 @@ namespace NzbDrone.Core.Test
[Test]
[Row(0)]
[Row(-1)]
[Row(-100)]
[TestCase(0)]
[TestCase(-1)]
[TestCase(-100)]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void start_target_id_less_than_0_throws_exception(int target)
{
@ -227,6 +228,7 @@ namespace NzbDrone.Core.Test
.Setup(c => c.GetEpisode(episode.EpisodeId))
.Returns(episode);
var indexer1 = new Mock<IndexerBase>();
indexer1.Setup(c => c.FetchEpisode(episode.Series.Title, episode.SeasonNumber, episode.EpisodeNumber))
.Returns(parseResults).Verifiable();
@ -258,6 +260,54 @@ namespace NzbDrone.Core.Test
indexer2.VerifyAll();
}
[Test]
public void start_should_use_scene_name_to_search()
{
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(4)
.Build();
var episode = Builder<Episode>.CreateNew()
.With(c => c.Series = Builder<Series>.CreateNew().With(s => s.SeriesId = 71256).Build())
.With(c => c.SeasonNumber = 12)
.Build();
var mocker = new AutoMoqer(MockBehavior.Strict);
mocker.GetMock<EpisodeProvider>()
.Setup(c => c.GetEpisode(episode.EpisodeId))
.Returns(episode);
var indexer1 = new Mock<IndexerBase>();
indexer1.Setup(c => c.FetchEpisode("The Daily Show", episode.SeasonNumber, episode.EpisodeNumber))
.Returns(parseResults).Verifiable();
var indexer2 = new Mock<IndexerBase>();
indexer2.Setup(c => c.FetchEpisode("The Daily Show", episode.SeasonNumber, episode.EpisodeNumber))
.Returns(parseResults).Verifiable();
var indexers = new List<IndexerBase> { indexer1.Object, indexer2.Object };
mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetEnabledIndexers())
.Returns(indexers);
mocker.GetMock<InventoryProvider>()
.Setup(c => c.IsQualityNeeded(It.Is<EpisodeParseResult>(d => d.Series != null && d.Episodes.Count != 0))).Returns(false);
//Act
mocker.Resolve<EpisodeSearchJob>().Start(new ProgressNotification("Test"), episode.EpisodeId);
//Assert
mocker.VerifyAllMocks();
mocker.GetMock<InventoryProvider>().Verify(c => c.IsQualityNeeded(It.IsAny<EpisodeParseResult>()),
Times.Exactly(8));
ExceptionVerification.ExcpectedWarns(1);
indexer1.VerifyAll();
indexer2.VerifyAll();
}
[Test]
public void start_failed_indexer_should_not_break_job()

@ -2,7 +2,7 @@
// ReSharper disable RedundantUsingDirective
using System;
using FizzWare.NBuilder;
using MbUnit.Framework;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework;
@ -14,10 +14,10 @@ namespace NzbDrone.Core.Test
public class EpisodeStatusTest : TestBase
{
[Test]
[Row(1, false, false, EpisodeStatusType.NotAired)]
[Row(-2, false, false, EpisodeStatusType.Missing)]
[Row(1, true, false, EpisodeStatusType.Ready)]
[Row(1, false, true, EpisodeStatusType.Ignored)]
[TestCase(1, false, false, EpisodeStatusType.NotAired)]
[TestCase(-2, false, false, EpisodeStatusType.Missing)]
[TestCase(1, true, false, EpisodeStatusType.Ready)]
[TestCase(1, false, true, EpisodeStatusType.Ignored)]
public void no_grab_date(int offsetDays, bool hasEpisodes, bool ignored, EpisodeStatusType status)
{
Episode episode = Builder<Episode>.CreateNew()
@ -39,10 +39,10 @@ namespace NzbDrone.Core.Test
[Test]
[Row(1, false, false, EpisodeStatusType.NotAired)]
[Row(-2, false, false, EpisodeStatusType.Missing)]
[Row(1, true, false, EpisodeStatusType.Ready)]
[Row(1, false, true, EpisodeStatusType.Ignored)]
[TestCase(1, false, false, EpisodeStatusType.NotAired)]
[TestCase(-2, false, false, EpisodeStatusType.Missing)]
[TestCase(1, true, false, EpisodeStatusType.Ready)]
[TestCase(1, false, true, EpisodeStatusType.Ignored)]
public void old_grab_date(int offsetDays, bool hasEpisodes, bool ignored,
EpisodeStatusType status)
{
@ -65,11 +65,11 @@ namespace NzbDrone.Core.Test
[Test]
[Row(1, false, false, EpisodeStatusType.Downloading)]
[Row(-2, false, false, EpisodeStatusType.Downloading)]
[Row(1, true, false, EpisodeStatusType.Downloading)]
[Row(1, true, true, EpisodeStatusType.Downloading)]
[Row(1, false, true, EpisodeStatusType.Downloading)]
[TestCase(1, false, false, EpisodeStatusType.Downloading)]
[TestCase(-2, false, false, EpisodeStatusType.Downloading)]
[TestCase(1, true, false, EpisodeStatusType.Downloading)]
[TestCase(1, true, true, EpisodeStatusType.Downloading)]
[TestCase(1, false, true, EpisodeStatusType.Downloading)]
public void recent_grab_date(int offsetDays, bool hasEpisodes, bool ignored,
EpisodeStatusType status)
{
@ -91,9 +91,9 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row(1, false, false, EpisodeStatusType.Ignored)]
[Row(-2, false, false, EpisodeStatusType.Ignored)]
[Row(1, false, true, EpisodeStatusType.Ignored)]
[TestCase(1, false, false, EpisodeStatusType.Ignored)]
[TestCase(-2, false, false, EpisodeStatusType.Ignored)]
[TestCase(1, false, true, EpisodeStatusType.Ignored)]
public void skipped_season(int offsetDays, bool hasEpisodes, bool ignored, EpisodeStatusType status)
{
Episode episode = Builder<Episode>.CreateNew()

@ -1,8 +1,8 @@
// ReSharper disable RedundantUsingDirective
using AutoMoq;
using MbUnit.Framework;
using Moq;
using System;
using NUnit.Framework;
namespace NzbDrone.Core.Test
{

@ -4,7 +4,7 @@ using System.Linq;
using System.Collections.Generic;
using NLog;
using NLog.Targets;
using MbUnit.Framework;
using NUnit.Framework;
namespace NzbDrone.Core.Test.Framework
{
@ -25,7 +25,7 @@ namespace NzbDrone.Core.Test.Framework
_logs = new List<LogEventInfo>();
}
internal static void AssertNoError()
internal static void AssertNoUnexcpectedLogs()
{
ExcpectedFatals(0);
ExcpectedErrors(0);

@ -1,46 +1,26 @@
// ReSharper disable RedundantUsingDirective
using System;
using System.IO;
using MbUnit.Framework;
using NLog;
using NLog.Config;
using NUnit.Framework;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test
{
[AssemblyFixture]
[SetUpFixture]
public class Fixtures
{
[TearDown]
public void TearDown()
{
foreach (
var file in Directory.GetFiles(Directory.GetCurrentDirectory(), "*.db", SearchOption.AllDirectories))
var filesToDelete = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.db", SearchOption.AllDirectories);
foreach (var file in filesToDelete)
{
try
{
File.Delete(file);
}
catch
{
}
}
}
[FixtureTearDown]
public void FixtureTearDown()
{
foreach (var file in Directory.GetFiles(Directory.GetCurrentDirectory(), "*.db", SearchOption.AllDirectories)
)
{
try
{
File.Delete(file);
}
catch
{
}
catch{}
}
}

@ -1,4 +1,5 @@
using MbUnit.Framework;
using NUnit;
using NUnit.Framework;
namespace NzbDrone.Core.Test.Framework
{
@ -15,7 +16,7 @@ namespace NzbDrone.Core.Test.Framework
[TearDown]
public void TearDown()
{
if (!Assert.IsFailurePending) ExceptionVerification.AssertNoError();
ExceptionVerification.AssertNoUnexcpectedLogs();
}
}

@ -1,23 +0,0 @@
using NUnit;
using NUnit.Framework;
namespace NzbDrone.Core.Test.Framework
{
public class TestBaseNunit
// ReSharper disable InconsistentNaming
{
[SetUp]
public void Setup()
{
ExceptionVerification.Reset();
}
[TearDown]
public void TearDown()
{
ExceptionVerification.AssertNoError();
}
}
}

@ -4,8 +4,9 @@ using System.Collections.Generic;
using System.Linq;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
@ -121,7 +122,7 @@ namespace NzbDrone.Core.Test
var storedHistory = repo.All<History>();
var newHistiory = repo.All<History>().First();
Assert.Count(1, storedHistory);
storedHistory.Should().HaveCount(1);
Assert.AreEqual(history.Date, newHistiory.Date);
Assert.AreEqual(history.EpisodeId, newHistiory.EpisodeId);
Assert.AreEqual(history.NzbTitle, newHistiory.NzbTitle);

@ -4,8 +4,8 @@ using System.Collections.Generic;
using System.Threading;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Jobs;
@ -79,7 +79,7 @@ namespace NzbDrone.Core.Test
[Test]
[Timeout(3)]
[Timeout(3000)]
public void failed_import_should_not_be_stuck_in_loop()
{
var series = Builder<Series>.CreateListOfSize(2)

@ -6,8 +6,8 @@ using System.Net;
using System.ServiceModel.Syndication;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
@ -16,6 +16,7 @@ using NzbDrone.Core.Providers.Indexer;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
using FluentAssertions;
namespace NzbDrone.Core.Test
{
@ -38,8 +39,11 @@ namespace NzbDrone.Core.Test
indexerProvider.SaveSettings(settings);
//Assert
Assert.Count(1, indexerProvider.GetAllISettings());
Assert.Count(1, indexerProvider.GetEnabledIndexers());
indexerProvider.GetAllISettings();
indexerProvider.GetAllISettings().Should().HaveCount(1);
indexerProvider.GetEnabledIndexers().Should().HaveCount(1);
}
[Test]
@ -57,8 +61,9 @@ namespace NzbDrone.Core.Test
indexerProvider.SaveSettings(settings);
//Assert
Assert.Count(1, indexerProvider.GetAllISettings());
Assert.IsEmpty(indexerProvider.GetEnabledIndexers());
indexerProvider.GetAllISettings().Should().HaveCount(1);
indexerProvider.GetEnabledIndexers().Should().BeEmpty();
}
}

@ -6,10 +6,9 @@ using System.ServiceModel.Syndication;
using System.Text;
using AutoMoq;
using FizzWare.NBuilder;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
@ -25,10 +24,10 @@ namespace NzbDrone.Core.Test
public class IndexerTests : TestBase
{
[Test]
[Row("nzbsorg.xml", 0)]
[Row("nzbsrus.xml", 6)]
[Row("newzbin.xml", 1)]
[Row("nzbmatrix.xml", 1)]
[TestCase("nzbsorg.xml", 0)]
[TestCase("nzbsrus.xml", 6)]
[TestCase("newzbin.xml", 1)]
[TestCase("nzbmatrix.xml", 1)]
public void parse_feed_xml(string fileName, int warns)
{
var mocker = new AutoMoqer();
@ -48,21 +47,19 @@ namespace NzbDrone.Core.Test
foreach (var episodeParseResult in parseResults)
{
var Uri = new Uri(episodeParseResult.NzbUrl);
Assert.DoesNotContain(Uri.PathAndQuery, "//");
Uri.PathAndQuery.Should().NotContain("//");
}
Assert.IsNotEmpty(parseResults);
Assert.ForAll(parseResults, s => Assert.AreEqual(mockIndexer.Name, s.Indexer));
Assert.ForAll(parseResults, s => Assert.AreNotEqual("", s.NzbTitle));
Assert.ForAll(parseResults, s => Assert.AreNotEqual(null, s.NzbTitle));
parseResults.Should().NotBeEmpty();
parseResults.Should().OnlyContain(s => s.Indexer == mockIndexer.Name);
parseResults.Should().OnlyContain(s => !String.IsNullOrEmpty(s.NzbTitle));
ExceptionVerification.ExcpectedWarns(warns);
}
[Test]
public void newzbin()
public void newzbin_rss_fetch()
{
var mocker = new AutoMoqer();
@ -81,21 +78,20 @@ namespace NzbDrone.Core.Test
foreach (var episodeParseResult in parseResults)
{
var Uri = new Uri(episodeParseResult.NzbUrl);
Assert.DoesNotContain(Uri.PathAndQuery, "//");
Uri.PathAndQuery.Should().NotContain("//");
}
Assert.IsNotEmpty(parseResults);
Assert.ForAll(parseResults, s => Assert.AreEqual(newzbinProvider.Name, s.Indexer));
Assert.ForAll(parseResults, s => Assert.AreNotEqual("", s.NzbTitle));
Assert.ForAll(parseResults, s => Assert.AreNotEqual(null, s.NzbTitle));
parseResults.Should().NotBeEmpty();
parseResults.Should().OnlyContain(s => s.Indexer == newzbinProvider.Name);
parseResults.Should().OnlyContain(s => !String.IsNullOrEmpty(s.NzbTitle));
ExceptionVerification.ExcpectedWarns(1);
}
[Test]
[Row("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", 3, 19, QualityTypes.DVD)]
[TestCase("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", 3, 19, QualityTypes.DVD)]
public void custome_parser_partial_success(string title, int season, int episode, QualityTypes quality)
{
var mocker = new AutoMoqer();
@ -123,7 +119,7 @@ namespace NzbDrone.Core.Test
[Test]
[Row("Adventure.Inc.DVDRip.XviD-OSiTV")]
[TestCase("Adventure.Inc.DVDRip.XviD-OSiTV")]
public void custome_parser_full_parse(string title)
{
var mocker = new AutoMoqer();
@ -184,10 +180,35 @@ namespace NzbDrone.Core.Test
var result = mocker.Resolve<NzbsOrg>().FetchEpisode("Simpsons", 21, 23);
Assert.IsNotEmpty(result);
Assert.ForAll(result, r => r.CleanTitle == "simpsons");
Assert.ForAll(result, r => r.SeasonNumber == 21);
Assert.ForAll(result, r => r.EpisodeNumbers.Contains(23));
result.Should().NotBeEmpty();
result.Should().OnlyContain(r => r.CleanTitle == "simpsons");
result.Should().OnlyContain(r => r.SeasonNumber == 21);
result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(23));
}
[Test]
public void newzbin_search_returns_valid_results()
{
var mocker = new AutoMoqer();
mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NewzbinUsername)
.Returns("nzbdrone");
mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NewzbinPassword)
.Returns("smartar39865");
mocker.Resolve<HttpProvider>();
var result = mocker.Resolve<Newzbin>().FetchEpisode("Simpsons", 21, 23);
result.Should().NotBeEmpty();
result.Should().OnlyContain(r => r.CleanTitle == "simpsons");
result.Should().OnlyContain(r => r.SeasonNumber == 21);
result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(23));
}
@ -209,10 +230,11 @@ namespace NzbDrone.Core.Test
var result = mocker.Resolve<NzbsOrg>().FetchEpisode("Blue Bloods", 1, 19);
Assert.IsNotEmpty(result);
Assert.ForAll(result, r => r.CleanTitle == "bluebloods");
Assert.ForAll(result, r => r.SeasonNumber == 1);
Assert.ForAll(result, r => r.EpisodeNumbers.Contains(19));
result.Should().NotBeEmpty();
result.Should().OnlyContain(r => r.CleanTitle == "bluebloods");
result.Should().OnlyContain(r => r.SeasonNumber == 1);
result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(19));
}
}
}

@ -6,8 +6,9 @@ using System.Net;
using System.ServiceModel.Syndication;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
@ -199,7 +200,7 @@ namespace NzbDrone.Core.Test
//Assert
Assert.IsTrue(result);
Assert.AreSame(series, parseResultSingle.Series);
Assert.Count(1, parseResultSingle.Episodes);
parseResultSingle.Episodes.Should().HaveCount(1);
Assert.AreEqual("TBD", parseResultSingle.Episodes[0].Title);
mocker.VerifyAllMocks();
}

@ -3,8 +3,8 @@ using System;
using System.Collections.Generic;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Repository;
@ -206,17 +206,17 @@ namespace NzbDrone.Core.Test
//Should Download
[Test]
[Row(QualityTypes.SDTV, true, QualityTypes.HDTV, false, true)]
[Row(QualityTypes.DVD, true, QualityTypes.Bluray720p, true, true)]
[Row(QualityTypes.HDTV, false, QualityTypes.HDTV, true, true)]
[Row(QualityTypes.HDTV, false, QualityTypes.HDTV, false, false)]
[Row(QualityTypes.Bluray720p, true, QualityTypes.Bluray1080p, false, false)]
[Row(QualityTypes.HDTV, true, QualityTypes.Bluray720p, true, true)]
[Row(QualityTypes.Bluray1080p, true, QualityTypes.Bluray720p, true, false)]
[Row(QualityTypes.Bluray1080p, true, QualityTypes.Bluray720p, false, false)]
[Row(QualityTypes.Bluray1080p, false, QualityTypes.Bluray720p, true, false)]
[Row(QualityTypes.HDTV, false, QualityTypes.Bluray720p, true, true)]
[Row(QualityTypes.HDTV, true, QualityTypes.HDTV, false, false)]
[TestCase(QualityTypes.SDTV, true, QualityTypes.HDTV, false, true)]
[TestCase(QualityTypes.DVD, true, QualityTypes.Bluray720p, true, true)]
[TestCase(QualityTypes.HDTV, false, QualityTypes.HDTV, true, true)]
[TestCase(QualityTypes.HDTV, false, QualityTypes.HDTV, false, false)]
[TestCase(QualityTypes.Bluray720p, true, QualityTypes.Bluray1080p, false, false)]
[TestCase(QualityTypes.HDTV, true, QualityTypes.Bluray720p, true, true)]
[TestCase(QualityTypes.Bluray1080p, true, QualityTypes.Bluray720p, true, false)]
[TestCase(QualityTypes.Bluray1080p, true, QualityTypes.Bluray720p, false, false)]
[TestCase(QualityTypes.Bluray1080p, false, QualityTypes.Bluray720p, true, false)]
[TestCase(QualityTypes.HDTV, false, QualityTypes.Bluray720p, true, true)]
[TestCase(QualityTypes.HDTV, true, QualityTypes.HDTV, false, false)]
public void Is_upgrade(QualityTypes fileQuality, bool isFileProper, QualityTypes reportQuality,
bool isReportProper, bool excpected)
{

@ -3,7 +3,8 @@ using System;
using System.Collections.Generic;
using System.Threading;
using AutoMoq;
using MbUnit.Framework;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers.Jobs;
using NzbDrone.Core.Test.Framework;
@ -227,7 +228,8 @@ namespace NzbDrone.Core.Test
//Assert
Assert.Count(1, timers);
timers.Should().HaveCount(1);
Assert.AreEqual(fakeTimer.DefaultInterval, timers[0].Interval);
Assert.AreEqual(fakeTimer.Name, timers[0].Name);
Assert.AreEqual(fakeTimer.GetType().ToString(), timers[0].TypeName);
@ -264,7 +266,7 @@ namespace NzbDrone.Core.Test
//Assert
Assert.Count(1, timers);
timers.Should().HaveCount(1);
Assert.IsTrue(timers[0].Enable);
}
@ -295,7 +297,7 @@ namespace NzbDrone.Core.Test
//Assert
Assert.Count(1, timers);
timers.Should().HaveCount(1);
Assert.IsFalse(timers[0].Enable);
}

@ -5,8 +5,9 @@ using System.Linq.Expressions;
using System.Linq;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
@ -358,8 +359,9 @@ namespace NzbDrone.Core.Test
var result = mocker.Resolve<MediaFileProvider>().GetSeasonFiles(12);
Assert.Count(8, result);
Assert.DoesNotContain(result, null);
result.Should().HaveCount(8);
result.Should().NotContainNulls();
mocker.VerifyAllMocks();

@ -40,10 +40,8 @@
<HintPath>..\packages\NBuilder.2.3.0.0\lib\FizzWare.NBuilder.dll</HintPath>
</Reference>
<Reference Include="FluentAssertions">
<HintPath>..\packages\FluentAssertions.1.4.0.0\Lib\.NetFramework 4.0\FluentAssertions.dll</HintPath>
<HintPath>..\Libraries\FluentAssertions.dll</HintPath>
</Reference>
<Reference Include="Gallio, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
<Reference Include="MbUnit, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
</Reference>
@ -93,7 +91,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="dbBenchmark.cs" />
<Compile Include="Framework\TestBaseNunit.cs" />
<Compile Include="Framework\TestBase.cs" />
<Compile Include="InventoryProvider_IsMonitoredTest.cs" />
<Compile Include="DownloadProviderTest.cs" />
<Compile Include="EpisodeSearchJobTest.cs" />
@ -111,7 +109,6 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Framework\ExceptionVerification.cs" />
<Compile Include="Framework\TestBase.cs" />
<Compile Include="JobProviderTest.cs" />
<Compile Include="QualityTest.cs" />
<Compile Include="RepositoryProviderTest.cs" />
@ -121,13 +118,14 @@
<Compile Include="MediaFileProviderTests.cs" />
<Compile Include="ConfigProviderTest.cs" />
<Compile Include="EpisodeProviderTest.cs" />
<Compile Include="Fixtures.cs" />
<Compile Include="Framework\Fixtures.cs" />
<Compile Include="Framework\MockLib.cs" />
<Compile Include="ParserTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="QualityProfileTest.cs" />
<Compile Include="RepoTest.cs" />
<Compile Include="SabProviderTest.cs" />
<Compile Include="SceneNameHelperTest.cs" />
<Compile Include="SeriesProviderTest.cs" />
<Compile Include="TvDbProviderTest.cs" />
</ItemGroup>

@ -1,6 +1,7 @@
// ReSharper disable RedundantUsingDirective
using System;
using MbUnit.Framework;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
@ -21,27 +22,27 @@ namespace NzbDrone.Core.Test
[Test]
[Row("Sonny.With.a.Chance.S02E15", "Sonny.With.a.Chance", 2, 15)]
[Row("Two.and.a.Half.Me.103.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 1, 3)]
[Row("Two.and.a.Half.Me.113.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 1, 13)]
[Row("Two.and.a.Half.Me.1013.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 10, 13)]
[Row("Chuck.4x05.HDTV.XviD-LOL", "Chuck", 4, 5)]
[Row("The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", "The.Girls.Next.Door", 3, 6)]
[Row("Degrassi.S10E27.WS.DSR.XviD-2HD", "Degrassi", 10, 27)]
[Row("Parenthood.2010.S02E14.HDTV.XviD-LOL", "Parenthood 2010", 2, 14)]
[Row("Hawaii Five 0 S01E19 720p WEB DL DD5 1 H 264 NT", "Hawaii Five", 1, 19)]
[Row("The Event S01E14 A Message Back 720p WEB DL DD5 1 H264 SURFER", "The Event", 1, 14)]
[Row("Adam Hills In Gordon St Tonight S01E07 WS PDTV XviD FUtV", "Adam Hills In Gordon St Tonight", 1, 7)]
[Row("Adam Hills In Gordon St Tonight S01E07 WS PDTV XviD FUtV", "Adam Hills In Gordon St Tonight", 1, 7)]
[Row("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", "Adventure.Inc", 3, 19)]
[Row("S03E09 WS PDTV XviD FUtV", "", 3, 9)]
[Row("5x10 WS PDTV XviD FUtV", "", 5, 10)]
[Row("Castle.2009.S01E14.HDTV.XviD-LOL", "Castle 2009", 1, 14)]
[Row("Pride.and.Prejudice.1995.S03E20.HDTV.XviD-LOL", "Pride and Prejudice 1995", 3, 20)]
[TestCase("Sonny.With.a.Chance.S02E15", "Sonny.With.a.Chance", 2, 15)]
[TestCase("Two.and.a.Half.Me.103.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 1, 3)]
[TestCase("Two.and.a.Half.Me.113.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 1, 13)]
[TestCase("Two.and.a.Half.Me.1013.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Me", 10, 13)]
[TestCase("Chuck.4x05.HDTV.XviD-LOL", "Chuck", 4, 5)]
[TestCase("The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", "The.Girls.Next.Door", 3, 6)]
[TestCase("Degrassi.S10E27.WS.DSR.XviD-2HD", "Degrassi", 10, 27)]
[TestCase("Parenthood.2010.S02E14.HDTV.XviD-LOL", "Parenthood 2010", 2, 14)]
[TestCase("Hawaii Five 0 S01E19 720p WEB DL DD5 1 H 264 NT", "Hawaii Five", 1, 19)]
[TestCase("The Event S01E14 A Message Back 720p WEB DL DD5 1 H264 SURFER", "The Event", 1, 14)]
[TestCase("Adam Hills In Gordon St Tonight S01E07 WS PDTV XviD FUtV", "Adam Hills In Gordon St Tonight", 1, 7)]
[TestCase("Adam Hills In Gordon St Tonight S01E07 WS PDTV XviD FUtV", "Adam Hills In Gordon St Tonight", 1, 7)]
[TestCase("Adventure.Inc.S03E19.DVDRip.XviD-OSiTV", "Adventure.Inc", 3, 19)]
[TestCase("S03E09 WS PDTV XviD FUtV", "", 3, 9)]
[TestCase("5x10 WS PDTV XviD FUtV", "", 5, 10)]
[TestCase("Castle.2009.S01E14.HDTV.XviD-LOL", "Castle 2009", 1, 14)]
[TestCase("Pride.and.Prejudice.1995.S03E20.HDTV.XviD-LOL", "Pride and Prejudice 1995", 3, 20)]
//[Row(@"Season 4\07 WS PDTV XviD FUtV", "", 4, 7)]
[Row("The.Office.S03E115.DVDRip.XviD-OSiTV", "The.Office", 3, 115)]
[Row(@"Parks and Recreation - S02E21 - 94 Meetings - 720p TV.mkv", "Parks and Recreation", 2, 21)]
[Row(@"24-7 Penguins-Capitals- Road to the NHL Winter Classic - S01E03 - Episode 3.mkv", "24-7 Penguins-Capitals- Road to the NHL Winter Classic", 1, 3)]
[TestCase("The.Office.S03E115.DVDRip.XviD-OSiTV", "The.Office", 3, 115)]
[TestCase(@"Parks and Recreation - S02E21 - 94 Meetings - 720p TV.mkv", "Parks and Recreation", 2, 21)]
[TestCase(@"24-7 Penguins-Capitals- Road to the NHL Winter Classic - S01E03 - Episode 3.mkv", "24-7 Penguins-Capitals- Road to the NHL Winter Classic", 1, 3)]
public void episode_parse(string postTitle, string title, int season, int episode)
{
var result = Parser.ParseEpisodeInfo(postTitle);
@ -52,51 +53,51 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row(@"z:\tv shows\battlestar galactica (2003)\Season 3\S03E05 - Collaborators.mkv", 3, 5)]
[Row(@"z:\tv shows\modern marvels\Season 16\S16E03 - The Potato.mkv", 16, 3)]
[Row(@"z:\tv shows\robot chicken\Specials\S00E16 - Dear Consumer - SD TV.avi", 0, 16)]
[Row(@"D:\shares\TV Shows\Parks And Recreation\Season 2\S02E21 - 94 Meetings - 720p TV.mkv", 2, 21)]
[Row(@"D:\shares\TV Shows\Battlestar Galactica (2003)\Season 2\S02E21.avi", 2, 21)]
[TestCase(@"z:\tv shows\battlestar galactica (2003)\Season 3\S03E05 - Collaborators.mkv", 3, 5)]
[TestCase(@"z:\tv shows\modern marvels\Season 16\S16E03 - The Potato.mkv", 16, 3)]
[TestCase(@"z:\tv shows\robot chicken\Specials\S00E16 - Dear Consumer - SD TV.avi", 0, 16)]
[TestCase(@"D:\shares\TV Shows\Parks And Recreation\Season 2\S02E21 - 94 Meetings - 720p TV.mkv", 2, 21)]
[TestCase(@"D:\shares\TV Shows\Battlestar Galactica (2003)\Season 2\S02E21.avi", 2, 21)]
public void file_path_parse(string path, int season, int episode)
{
var result = Parser.ParseEpisodeInfo(path);
Assert.Count(1, result.EpisodeNumbers);
result.EpisodeNumbers.Should().HaveCount(1);
Assert.AreEqual(season, result.SeasonNumber);
Assert.AreEqual(episode, result.EpisodeNumbers[0]);
}
[Test]
[Row("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", QualityTypes.DVD)]
[Row("WEEDS.S03E01-06.DUAL.BDRip.X-viD.AC3.-HELLYWOOD", QualityTypes.DVD)]
[Row("WEEDS.S03E01-06.DUAL.BDRip.AC3.-HELLYWOOD", QualityTypes.DVD)]
[Row("Two.and.a.Half.Men.S08E05.720p.HDTV.X264-DIMENSION", QualityTypes.HDTV)]
[Row("this has no extention or periods HDTV", QualityTypes.SDTV)]
[Row("Chuck.S04E05.HDTV.XviD-LOL", QualityTypes.SDTV)]
[Row("The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", QualityTypes.DVD)]
[Row("The.Girls.Next.Door.S03E06.DVD.Rip.XviD-WiDE", QualityTypes.DVD)]
[Row("The.Girls.Next.Door.S03E06.HDTV-WiDE", QualityTypes.SDTV)]
[Row("Degrassi.S10E27.WS.DSR.XviD-2HD", QualityTypes.SDTV)]
[Row("Sonny.With.a.Chance.S02E15.720p.WEB-DL.DD5.1.H.264-SURFER", QualityTypes.WEBDL)]
[Row("Sonny.With.a.Chance.S02E15.720p", QualityTypes.HDTV)]
[Row("Sonny.With.a.Chance.S02E15.mkv", QualityTypes.HDTV)]
[Row("Sonny.With.a.Chance.S02E15.avi", QualityTypes.SDTV)]
[Row("Sonny.With.a.Chance.S02E15.xvid", QualityTypes.SDTV)]
[Row("Sonny.With.a.Chance.S02E15.divx", QualityTypes.SDTV)]
[Row("Sonny.With.a.Chance.S02E15", QualityTypes.Unknown)]
[Row("Chuck - S01E04 - So Old - Playdate - 720p TV.mkv", QualityTypes.HDTV)]
[Row("Chuck - S22E03 - MoneyBART - HD TV.mkv", QualityTypes.HDTV)]
[Row("Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", QualityTypes.Bluray720p)]
[Row("Chuck - S01E03 - Come Fly With Me - 1080p BluRay.mkv", QualityTypes.Bluray1080p)]
[Row("Chuck - S11E06 - D-Yikes! - 720p WEB-DL.mkv", QualityTypes.WEBDL)]
[Row("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD)]
[Row("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD)]
[Row("Law & Order: Special Victims Unit - 11x11 - Quickie", QualityTypes.Unknown)]
[Row("(<a href=\"http://www.newzbin.com/browse/post/6076286/nzb/\">NZB</a>)", QualityTypes.Unknown)]
[Row("S07E23 - [HDTV].mkv ", QualityTypes.HDTV)]
[Row("S07E23 - [WEBDL].mkv ", QualityTypes.WEBDL)]
[Row("S07E23.mkv ", QualityTypes.HDTV)]
[Row("S07E23 .avi ", QualityTypes.SDTV)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", QualityTypes.DVD)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.X-viD.AC3.-HELLYWOOD", QualityTypes.DVD)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.AC3.-HELLYWOOD", QualityTypes.DVD)]
[TestCase("Two.and.a.Half.Men.S08E05.720p.HDTV.X264-DIMENSION", QualityTypes.HDTV)]
[TestCase("this has no extention or periods HDTV", QualityTypes.SDTV)]
[TestCase("Chuck.S04E05.HDTV.XviD-LOL", QualityTypes.SDTV)]
[TestCase("The.Girls.Next.Door.S03E06.DVDRip.XviD-WiDE", QualityTypes.DVD)]
[TestCase("The.Girls.Next.Door.S03E06.DVD.Rip.XviD-WiDE", QualityTypes.DVD)]
[TestCase("The.Girls.Next.Door.S03E06.HDTV-WiDE", QualityTypes.SDTV)]
[TestCase("Degrassi.S10E27.WS.DSR.XviD-2HD", QualityTypes.SDTV)]
[TestCase("Sonny.With.a.Chance.S02E15.720p.WEB-DL.DD5.1.H.264-SURFER", QualityTypes.WEBDL)]
[TestCase("Sonny.With.a.Chance.S02E15.720p", QualityTypes.HDTV)]
[TestCase("Sonny.With.a.Chance.S02E15.mkv", QualityTypes.HDTV)]
[TestCase("Sonny.With.a.Chance.S02E15.avi", QualityTypes.SDTV)]
[TestCase("Sonny.With.a.Chance.S02E15.xvid", QualityTypes.SDTV)]
[TestCase("Sonny.With.a.Chance.S02E15.divx", QualityTypes.SDTV)]
[TestCase("Sonny.With.a.Chance.S02E15", QualityTypes.Unknown)]
[TestCase("Chuck - S01E04 - So Old - Playdate - 720p TV.mkv", QualityTypes.HDTV)]
[TestCase("Chuck - S22E03 - MoneyBART - HD TV.mkv", QualityTypes.HDTV)]
[TestCase("Chuck - S01E03 - Come Fly With Me - 720p BluRay.mkv", QualityTypes.Bluray720p)]
[TestCase("Chuck - S01E03 - Come Fly With Me - 1080p BluRay.mkv", QualityTypes.Bluray1080p)]
[TestCase("Chuck - S11E06 - D-Yikes! - 720p WEB-DL.mkv", QualityTypes.WEBDL)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD.avi", QualityTypes.DVD)]
[TestCase("Law & Order: Special Victims Unit - 11x11 - Quickie", QualityTypes.Unknown)]
[TestCase("(<a href=\"http://www.newzbin.com/browse/post/6076286/nzb/\">NZB</a>)", QualityTypes.Unknown)]
[TestCase("S07E23 - [HDTV].mkv ", QualityTypes.HDTV)]
[TestCase("S07E23 - [WEBDL].mkv ", QualityTypes.WEBDL)]
[TestCase("S07E23.mkv ", QualityTypes.HDTV)]
[TestCase("S07E23 .avi ", QualityTypes.SDTV)]
public void quality_parse(string postTitle, object quality)
{
var result = Parser.ParseQuality(postTitle);
@ -127,31 +128,31 @@ namespace NzbDrone.Core.Test
}
[Test]
[Timeout(1)]
[Row("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", "WEEDS", 3, new[] { 1, 2, 3, 4, 5, 6 }, 6)]
[Row("Two.and.a.Half.Men.103.104.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Men", 1, new[] { 3, 4 }, 2)]
[Row("Weeds.S03E01.S03E02.720p.HDTV.X264-DIMENSION", "Weeds", 3, new[] { 1, 2 }, 2)]
[Row("The Borgias S01e01 e02 ShoHD On Demand 1080i DD5 1 ALANiS", "The Borgias", 1, new[] { 1, 2 }, 2)]
[Row("Big Time Rush 1x01 to 10 480i DD2 0 Sianto", "Big Time Rush", 1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 10)]
[Row("White.Collar.2x04.2x05.720p.BluRay-FUTV", "White.Collar", 2, new[] { 4, 5 }, 2)]
[Timeout(1000)]
[TestCase("WEEDS.S03E01-06.DUAL.BDRip.XviD.AC3.-HELLYWOOD", "WEEDS", 3, new[] { 1, 2, 3, 4, 5, 6 }, 6)]
[TestCase("Two.and.a.Half.Men.103.104.720p.HDTV.X264-DIMENSION", "Two.and.a.Half.Men", 1, new[] { 3, 4 }, 2)]
[TestCase("Weeds.S03E01.S03E02.720p.HDTV.X264-DIMENSION", "Weeds", 3, new[] { 1, 2 }, 2)]
[TestCase("The Borgias S01e01 e02 ShoHD On Demand 1080i DD5 1 ALANiS", "The Borgias", 1, new[] { 1, 2 }, 2)]
[TestCase("Big Time Rush 1x01 to 10 480i DD2 0 Sianto", "Big Time Rush", 1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 10)]
[TestCase("White.Collar.2x04.2x05.720p.BluRay-FUTV", "White.Collar", 2, new[] { 4, 5 }, 2)]
//[Row("The.Kennedys.Part.1.and.Part.2.DSR.XviD-SYS", 1, new[] { 1, 2 })]
public void episode_multipart_parse(string postTitle, string title, int season, int[] episodes, int count)
{
var result = Parser.ParseEpisodeInfo(postTitle);
Assert.AreEqual(season, result.SeasonNumber);
Assert.Count(episodes.Length, result.EpisodeNumbers);
Assert.AreElementsEqualIgnoringOrder(episodes, result.EpisodeNumbers);
result.EpisodeNumbers.Should().HaveSameCount(episodes);
result.EpisodeNumbers.Should().BeEquivalentTo(result.EpisodeNumbers);
Assert.AreEqual(Parser.NormalizeTitle(title), result.CleanTitle);
Assert.AreEqual(count, result.EpisodeNumbers.Count);
}
[Test]
[Row("Conan 2011 04 18 Emma Roberts HDTV XviD BFF", "Conan", 2011, 04, 18)]
[Row("The Tonight Show With Jay Leno 2011 04 15 1080i HDTV DD5 1 MPEG2 TrollHD", "The Tonight Show With Jay Leno", 2011, 04, 15)]
[Row("The.Daily.Show.2010.10.11.Johnny.Knoxville.iTouch-MW", "The.Daily.Show", 2010, 10, 11)]
[Row("The Daily Show - 2011-04-12 - Gov. Deval Patrick", "The.Daily.Show", 2011, 04, 12)]
[Row("2011.01.10 - Denis Leary - HD TV.mkv", "", 2011, 1, 10)]
[Row("2011.03.13 - Denis Leary - HD TV.mkv", "", 2011, 3, 13)]
[TestCase("Conan 2011 04 18 Emma Roberts HDTV XviD BFF", "Conan", 2011, 04, 18)]
[TestCase("The Tonight Show With Jay Leno 2011 04 15 1080i HDTV DD5 1 MPEG2 TrollHD", "The Tonight Show With Jay Leno", 2011, 04, 15)]
[TestCase("The.Daily.Show.2010.10.11.Johnny.Knoxville.iTouch-MW", "The.Daily.Show", 2010, 10, 11)]
[TestCase("The Daily Show - 2011-04-12 - Gov. Deval Patrick", "The.Daily.Show", 2011, 04, 12)]
[TestCase("2011.01.10 - Denis Leary - HD TV.mkv", "", 2011, 1, 10)]
[TestCase("2011.03.13 - Denis Leary - HD TV.mkv", "", 2011, 3, 13)]
public void episode_daily_parse(string postTitle, string title, int year, int month, int day)
{
var result = Parser.ParseEpisodeInfo(postTitle);
@ -163,9 +164,9 @@ namespace NzbDrone.Core.Test
[Test]
[Row("30.Rock.Season.04.HDTV.XviD-DIMENSION", "30.Rock", 4)]
[Row("Parks.and.Recreation.S02.720p.x264-DIMENSION", "Parks.and.Recreation", 2)]
[Row("The.Office.US.S03.720p.x264-DIMENSION", "The.Office.US", 3)]
[TestCase("30.Rock.Season.04.HDTV.XviD-DIMENSION", "30.Rock", 4)]
[TestCase("Parks.and.Recreation.S02.720p.x264-DIMENSION", "Parks.and.Recreation", 2)]
[TestCase("The.Office.US.S03.720p.x264-DIMENSION", "The.Office.US", 3)]
public void full_season_release_parse(string postTitle, string title, int season)
{
var result = Parser.ParseEpisodeInfo(postTitle);
@ -175,11 +176,11 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row("Conan", "conan")]
[Row("The Tonight Show With Jay Leno", "tonightshowwithjayleno")]
[Row("The.Daily.Show", "dailyshow")]
[Row("Castle (2009)", "castle2009")]
[Row("Parenthood.2010", "parenthood2010")]
[TestCase("Conan", "conan")]
[TestCase("The Tonight Show With Jay Leno", "tonightshowwithjayleno")]
[TestCase("The.Daily.Show", "dailyshow")]
[TestCase("Castle (2009)", "castle2009")]
[TestCase("Parenthood.2010", "parenthood2010")]
public void series_name_normalize(string parsedSeriesName, string seriesName)
{
var result = Parser.NormalizeTitle(parsedSeriesName);
@ -187,11 +188,11 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row(@"c:\test\", @"c:\test")]
[Row(@"c:\\test\\", @"c:\test")]
[Row(@"C:\\Test\\", @"C:\Test")]
[Row(@"C:\\Test\\Test\", @"C:\Test\Test")]
[Row(@"\\Testserver\Test\", @"\\Testserver\Test")]
[TestCase(@"c:\test\", @"c:\test")]
[TestCase(@"c:\\test\\", @"c:\test")]
[TestCase(@"C:\\Test\\", @"C:\Test")]
[TestCase(@"C:\\Test\\Test\", @"C:\Test\Test")]
[TestCase(@"\\Testserver\Test\", @"\\Testserver\Test")]
public void Normalize_Path(string dirty, string clean)
{
var result = Parser.NormalizePath(dirty);
@ -199,9 +200,9 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row("CaPitAl", "capital")]
[Row("peri.od", "period")]
[Row("this.^&%^**$%@#$!That", "thisthat")]
[TestCase("CaPitAl", "capital")]
[TestCase("peri.od", "period")]
[TestCase("this.^&%^**$%@#$!That", "thisthat")]
public void Normalize_Title(string dirty, string clean)
{
var result = Parser.NormalizeTitle(dirty);
@ -209,12 +210,12 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row("the")]
[Row("and")]
[Row("or")]
[Row("a")]
[Row("an")]
[Row("of")]
[TestCase("the")]
[TestCase("and")]
[TestCase("or")]
[TestCase("a")]
[TestCase("an")]
[TestCase("of")]
public void Normalize_removed_common_words(string word)
{
var dirtyFormat = new[]
@ -239,12 +240,12 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row("the")]
[Row("and")]
[Row("or")]
[Row("a")]
[Row("an")]
[Row("of")]
[TestCase("the")]
[TestCase("and")]
[TestCase("or")]
[TestCase("a")]
[TestCase("an")]
[TestCase("of")]
public void Normalize_not_removed_common_words_in_the_middle(string word)
{
var dirtyFormat = new[]

@ -3,7 +3,8 @@ using System;
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
@ -64,7 +65,8 @@ namespace NzbDrone.Core.Test
var result = repo.All<Series>();
Assert.Count(1, result);
result.Should().HaveCount(1);
Assert.AreEqual(result.ToList()[0].QualityProfile.Name, testProfile.Name);
//Act

@ -1,9 +1,8 @@
using System;
using System.Collections.Generic;
using System.Text;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Repository.Quality;
@ -14,39 +13,43 @@ namespace NzbDrone.Core.Test
public class QualityTest
{
[Test]
[Ignore("No supported asserts are available")]
public void Icomparer_greater_test()
{
var first = new Quality(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true);
Assert.GreaterThan(second, first);
//Assert.GreaterThan(second, first);
}
[Test]
[Ignore("No supported asserts are available")]
public void Icomparer_greater_proper()
{
var first = new Quality(QualityTypes.Bluray1080p, false);
var second = new Quality(QualityTypes.Bluray1080p, true);
Assert.GreaterThan(second, first);
//Assert.GreaterThan(second, first);
}
[Test]
[Ignore("No supported asserts are available")]
public void Icomparer_lesser()
{
var first = new Quality(QualityTypes.DVD, true);
var second = new Quality(QualityTypes.Bluray1080p, true);
Assert.LessThan(first, second);
//Assert.LessThan(first, second);
}
[Test]
[Ignore("No supported asserts are available")]
public void Icomparer_lesser_proper()
{
var first = new Quality(QualityTypes.DVD, false);
var second = new Quality(QualityTypes.DVD, true);
Assert.LessThan(first, second);
//Assert.LessThan(first, second);
}
[Test]

@ -2,9 +2,10 @@
using System;
using System.Linq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using FluentAssertions;
using NLog;
using NLog.Config;
using NUnit.Framework;
using NzbDrone.Core.Instrumentation;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework;
@ -33,7 +34,8 @@ namespace NzbDrone.Core.Test
Assert.AreEqual(fakeSeries.SeriesId, fetchedSeries.SeriesId);
Assert.AreEqual(fakeSeries.Title, fetchedSeries.Title);
Assert.IsNotEmpty(fetchedSeries.Episodes);
fetchedSeries.Episodes.Should().HaveCount(1);
Assert.AreEqual(fetchedSeries.Episodes[0].EpisodeId, fakeEpisode.EpisodeId);
Assert.AreEqual(fetchedSeries.Episodes[0].SeriesId, fakeEpisode.SeriesId);
Assert.AreEqual(fetchedSeries.Episodes[0].Title, fakeEpisode.Title);
@ -60,9 +62,9 @@ namespace NzbDrone.Core.Test
Assert.AreEqual(fakeEpisode.Title, fetchedEpisode.Title);
Console.WriteLine("=======================");
var ttt= fetchedEpisode.Series;
var ttt = fetchedEpisode.Series;
Console.WriteLine("=======================");
var tttd= fetchedEpisode.Series;
var tttd = fetchedEpisode.Series;
Console.WriteLine("=======================");
//Assert.Contains(fetchedEpisode.ToString(), fakeSeries.Title);
@ -73,20 +75,20 @@ namespace NzbDrone.Core.Test
[Description(
"This test confirms that the tvdb id stored in the db is preserved rather than being replaced by an auto incrementing value"
)]
public void tvdbid_is_preserved([RandomNumbers(Minimum = 100, Maximum = 999, Count = 1)] int tvdbId)
public void tvdbid_is_preserved()
{
//Arrange
var sonicRepo = MockLib.GetEmptyRepository();
var series = Builder<Series>.CreateNew().With(c => c.SeriesId = tvdbId).Build();
var series = Builder<Series>.CreateNew().With(c => c.SeriesId = 18).Build();
//Act
var addId = sonicRepo.Add(series);
//Assert
Assert.AreEqual(tvdbId, addId);
Assert.AreEqual(18, addId);
var allSeries = sonicRepo.All<Series>();
Assert.IsNotEmpty(allSeries);
Assert.AreEqual(tvdbId, allSeries.First().SeriesId);
allSeries.Should().HaveCount(1);
Assert.AreEqual(18, allSeries.First().SeriesId);
}
[Test]
@ -118,8 +120,7 @@ namespace NzbDrone.Core.Test
Logger.Info(message);
//Assert
Assert.IsNotEmpty(sonicRepo.All<Log>());
Assert.Count(1, sonicRepo.All<Log>());
sonicRepo.All<Log>().Should().HaveCount(1);
var logItem = sonicRepo.All<Log>().First();
Assert.AreNotEqual(new DateTime(), logItem.Time);
@ -153,8 +154,7 @@ namespace NzbDrone.Core.Test
Logger.ErrorException(message, ex);
//Assert
Assert.IsNotEmpty(sonicRepo.All<Log>());
Assert.Count(1, sonicRepo.All<Log>());
sonicRepo.All<Log>().Should().HaveCount(1);
var logItem = sonicRepo.All<Log>().First();
Assert.AreNotEqual(new DateTime(), logItem.Time);
@ -187,8 +187,7 @@ namespace NzbDrone.Core.Test
Logger.ErrorException(message, ex);
//Assert
Assert.IsNotEmpty(sonicRepo.All<Log>());
Assert.Count(1, sonicRepo.All<Log>());
sonicRepo.All<Log>().Should().HaveCount(1);
var logItem = sonicRepo.All<Log>().First();
Assert.AreNotEqual(new DateTime(), logItem.Time);

@ -2,11 +2,10 @@
using System.Collections.Generic;
using System.Data;
using System.Text;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using FluentAssertions;
using Migrator.Framework;
using Migrator.Providers.SQLite;
using NUnit.Framework;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Instrumentation;
using NzbDrone.Core.Repository;
@ -29,21 +28,22 @@ namespace NzbDrone.Core.Test
var provider = new RepositoryProvider();
var types = provider.GetRepositoryTypes();
Assert.IsNotEmpty(types);
Assert.Contains(types, typeof(Config));
Assert.Contains(types, typeof(Episode));
Assert.Contains(types, typeof(EpisodeFile));
Assert.Contains(types, typeof(ExternalNotificationSetting));
Assert.Contains(types, typeof(History));
Assert.Contains(types, typeof(IndexerSetting));
Assert.Contains(types, typeof(JobSetting));
Assert.Contains(types, typeof(RootDir));
Assert.Contains(types, typeof(Season));
Assert.Contains(types, typeof(Series));
Assert.Contains(types, typeof(QualityProfile));
Assert.DoesNotContain(types, typeof(QualityTypes));
types.Should().Contain(typeof(Config));
types.Should().Contain(typeof(Episode));
types.Should().Contain(typeof(EpisodeFile));
types.Should().Contain(typeof(ExternalNotificationSetting));
types.Should().Contain(typeof(History));
types.Should().Contain(typeof(IndexerSetting));
types.Should().Contain(typeof(JobSetting));
types.Should().Contain(typeof(RootDir));
types.Should().Contain(typeof(Season));
types.Should().Contain(typeof(Season));
types.Should().Contain(typeof(Series));
types.Should().Contain(typeof(QualityProfile));
types.Should().NotContain(typeof(QualityTypes));
}
@ -57,7 +57,8 @@ namespace NzbDrone.Core.Test
var typeTable = provider.GetSchemaFromType(typeof(TestRepoType));
Assert.IsNotNull(typeTable.Columns);
Assert.Count(3, typeTable.Columns);
typeTable.Columns.Should().HaveCount(3);
Assert.AreEqual("TestRepoTypes", typeTable.Name);
}
@ -89,12 +90,12 @@ namespace NzbDrone.Core.Test
var repo = new SimpleRepository(dbProvider, SimpleRepositoryOptions.RunMigrations);
var sqliteDatabase = new SQLiteTransformationProvider(new SQLiteDialect(), connectionString);
repo.Add(new TestRepoType(){Value = "Dummy"});
repo.Add(new TestRepoType() { Value = "Dummy" });
var repositoryProvider = new RepositoryProvider();
var columns = repositoryProvider.GetColumnsFromDatabase(sqliteDatabase, "TestRepoTypes");
Assert.Count(3, columns);
columns.Should().HaveCount(3);
}
@ -107,7 +108,7 @@ namespace NzbDrone.Core.Test
var sqliteDatabase = new SQLiteTransformationProvider(new SQLiteDialect(), connectionString);
var repo = new SimpleRepository(dbProvider, SimpleRepositoryOptions.RunMigrations);
repo.Add(new TestRepoType(){Value = "Dummy"});
repo.Add(new TestRepoType() { Value = "Dummy" });
var repositoryProvider = new RepositoryProvider();
var typeSchema = repositoryProvider.GetSchemaFromType(typeof(TestRepoType2));
@ -117,7 +118,7 @@ namespace NzbDrone.Core.Test
var deletedColumns = repositoryProvider.GetDeletedColumns(typeSchema, columns);
Assert.Count(1, deletedColumns);
deletedColumns.Should().HaveCount(1);
Assert.AreEqual("NewName", deletedColumns[0].Name.Trim('[', ']'));
}
@ -135,12 +136,12 @@ namespace NzbDrone.Core.Test
var repositoryProvider = new RepositoryProvider();
var typeSchema = repositoryProvider.GetSchemaFromType(typeof(TestRepoType));
var columns = repositoryProvider.GetColumnsFromDatabase(sqliteDatabase, "TestRepoType2s");
var deletedColumns = repositoryProvider.GetNewColumns(typeSchema, columns);
Assert.Count(1, deletedColumns);
deletedColumns.Should().HaveCount(1);
Assert.AreEqual("NewName", deletedColumns[0].Name.Trim('[', ']'));
}

@ -2,8 +2,9 @@
using System;
using System.Linq;
using AutoMoq;
using MbUnit.Framework;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
@ -16,15 +17,15 @@ namespace NzbDrone.Core.Test
// ReSharper disable InconsistentNaming
public class RootDirProviderTest : TestBase
{
[Test]
public void GetRootDirs()
{
//Setup
var sonicRepo = MockLib.GetEmptyRepository();
sonicRepo.Add(new RootDir {Path = @"C:\TV"});
sonicRepo.Add(new RootDir {Path = @"C:\TV2"});
sonicRepo.Add(new RootDir { Path = @"C:\TV" });
sonicRepo.Add(new RootDir { Path = @"C:\TV2" });
var mocker = new AutoMoqer();
@ -50,13 +51,14 @@ namespace NzbDrone.Core.Test
//Act
var rootDirProvider = mocker.Resolve<RootDirProvider>();
rootDirProvider.Add(new RootDir {Path = path});
rootDirProvider.Add(new RootDir { Path = path });
//Assert
var rootDirs = rootDirProvider.GetAll();
Assert.IsNotEmpty(rootDirs);
Assert.Count(1, rootDirs);
rootDirs.Should().HaveCount(1);
Assert.AreEqual(path, rootDirs.First().Path);
}
@ -71,13 +73,13 @@ namespace NzbDrone.Core.Test
//Act
var rootDirProvider = mocker.Resolve<RootDirProvider>();
rootDirProvider.Add(new RootDir {Path = @"C:\TV"});
rootDirProvider.Update(new RootDir {Id = 1, Path = path});
rootDirProvider.Add(new RootDir { Path = @"C:\TV" });
rootDirProvider.Update(new RootDir { Id = 1, Path = path });
//Assert
var rootDirs = rootDirProvider.GetAll();
Assert.IsNotEmpty(rootDirs);
Assert.Count(1, rootDirs);
rootDirs.Should().HaveCount(1);
Assert.AreEqual(path, rootDirs.First().Path);
}
@ -90,12 +92,12 @@ namespace NzbDrone.Core.Test
//Act
var rootDirProvider = mocker.Resolve<RootDirProvider>();
rootDirProvider.Add(new RootDir {Path = @"C:\TV"});
rootDirProvider.Add(new RootDir { Path = @"C:\TV" });
rootDirProvider.Remove(1);
//Assert
var rootDirs = rootDirProvider.GetAll();
Assert.Count(0, rootDirs);
rootDirs.Should().BeEmpty();
}
[Test]
@ -110,7 +112,7 @@ namespace NzbDrone.Core.Test
//Act
var rootDirProvider = mocker.Resolve<RootDirProvider>();
rootDirProvider.Add(new RootDir {Id = id, Path = path});
rootDirProvider.Add(new RootDir { Id = id, Path = path });
//Assert
var rootDir = rootDirProvider.GetRootDir(id);

@ -5,8 +5,8 @@ using System.IO;
using System.Linq;
using AutoMoq;
using FizzWare.NBuilder;
using MbUnit.Framework;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test
}
[Test]
[ExpectedException(typeof(ApplicationException), Message = "API Key Incorrect")]
[ExpectedException(typeof(ApplicationException), ExpectedMessage= "API Key Incorrect")]
public void IsInQueue_False_Error()
{
//Setup
@ -213,12 +213,12 @@ namespace NzbDrone.Core.Test
}
[Test]
[Row(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, false, "My Series Name - 1x2 - My Episode Title [DVD]")]
[Row(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, true, "My Series Name - 1x2 - My Episode Title [DVD] [Proper]")]
[Row(1, new[] { 2 }, "", QualityTypes.DVD, true, "My Series Name - 1x2 - [DVD] [Proper]")]
[Row(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, false, "My Series Name - 1x2-1x4 - My Episode Title [HDTV]")]
[Row(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, true, "My Series Name - 1x2-1x4 - My Episode Title [HDTV] [Proper]")]
[Row(1, new[] { 2, 4 }, "", QualityTypes.HDTV, true, "My Series Name - 1x2-1x4 - [HDTV] [Proper]")]
[TestCase(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, false, "My Series Name - 1x2 - My Episode Title [DVD]")]
[TestCase(1, new[] { 2 }, "My Episode Title", QualityTypes.DVD, true, "My Series Name - 1x2 - My Episode Title [DVD] [Proper]")]
[TestCase(1, new[] { 2 }, "", QualityTypes.DVD, true, "My Series Name - 1x2 - [DVD] [Proper]")]
[TestCase(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, false, "My Series Name - 1x2-1x4 - My Episode Title [HDTV]")]
[TestCase(1, new[] { 2, 4 }, "My Episode Title", QualityTypes.HDTV, true, "My Series Name - 1x2-1x4 - My Episode Title [HDTV] [Proper]")]
[TestCase(1, new[] { 2, 4 }, "", QualityTypes.HDTV, true, "My Series Name - 1x2-1x4 - [HDTV] [Proper]")]
public void sab_title(int seasons, int[] episodes, string title, QualityTypes quality, bool proper, string excpected)
{
var mocker = new AutoMoqer();

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test
{
[TestFixture]
// ReSharper disable InconsistentNaming
public class SceneNameHelperTest : TestBase
{
[Test]
public void GetIdByName_exists()
{
var id = SceneNameHelper.GetIdByName("CSI New York");
id.Should().Be(73696);
}
[Test]
public void GetTitleById_exists()
{
var title = SceneNameHelper.GetTitleById(71256);
title.Should().Be("The Daily Show");
}
}
}

@ -1,57 +1,56 @@
// ReSharper disable RedundantUsingDirective
using System;
using System.Linq;
using MbUnit.Framework;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test
{
[TestFixture]
[NUnit.Framework.TestFixture]
// ReSharper disable InconsistentNaming
public class TvDbProviderTest : TestBase
{
[Test]
[Row("The Simpsons")]
[Row("Family Guy")]
[Row("South Park")]
[Row("clone high, usa")]
[TestCase("The Simpsons")]
[TestCase("Family Guy")]
[TestCase("South Park")]
public void successful_search(string title)
{
var tvCont = new TvDbProvider();
var result = tvCont.SearchSeries(title);
var result = new TvDbProvider().SearchSeries(title);
Assert.IsNotEmpty(result);
Assert.AreEqual(title, result[0].SeriesName, StringComparison.InvariantCultureIgnoreCase);
result.Should().NotBeEmpty();
result[0].SeriesName.Should().Be(title);
}
[Test]
[Row("The Simpsons")]
[Row("Family Guy")]
[Row("South Park")]
[TestCase("The Simpsons")]
[TestCase("Family Guy")]
[TestCase("South Park")]
public void successful_title_lookup(string title)
{
var tvCont = new TvDbProvider();
var result = tvCont.GetSeries(title);
Assert.AreEqual(title, result.SeriesName, StringComparison.InvariantCultureIgnoreCase);
result.SeriesName.Should().Be(title);
}
[Test]
[Row(new object[] { "CAPITAL", "capital", true })]
[Row(new object[] { "Something!!", "Something", true })]
[Row(new object[] { "Simpsons 2000", "Simpsons", true })]
[Row(new object[] { "Simp222sons", "Simpsons", true })]
[Row(new object[] { "Simpsons", "The Simpsons", true })]
[Row(new object[] { "Law and order", "Law & order", true })]
[Row(new object[] { "xxAndxx", "xxxx", false })]
[Row(new object[] { "Andxx", "xx", false })]
[Row(new object[] { "xxAnd", "xx", false })]
[Row(new object[] { "Thexx", "xx", false })]
[Row(new object[] { "Thexx", "xx", false })]
[Row(new object[] { "xxThexx", "xxxxx", false })]
[Row(new object[] { "Simpsons The", "Simpsons", true })]
[TestCase(new object[] { "CAPITAL", "capital", true })]
[TestCase(new object[] { "Something!!", "Something", true })]
[TestCase(new object[] { "Simpsons 2000", "Simpsons", true })]
[TestCase(new object[] { "Simp222sons", "Simpsons", true })]
[TestCase(new object[] { "Simpsons", "The Simpsons", true })]
[TestCase(new object[] { "Law and order", "Law & order", true })]
[TestCase(new object[] { "xxAndxx", "xxxx", false })]
[TestCase(new object[] { "Andxx", "xx", false })]
[TestCase(new object[] { "xxAnd", "xx", false })]
[TestCase(new object[] { "Thexx", "xx", false })]
[TestCase(new object[] { "Thexx", "xx", false })]
[TestCase(new object[] { "xxThexx", "xxxxx", false })]
[TestCase(new object[] { "Simpsons The", "Simpsons", true })]
public void Name_match_test(string a, string b, bool match)
{
bool result = TvDbProvider.IsTitleMatch(a, b);
@ -69,7 +68,7 @@ namespace NzbDrone.Core.Test
var result = tvdbProvider.SearchSeries(Guid.NewGuid().ToString());
//assert
Assert.IsEmpty(result);
result.Should().BeEmpty();
}
[Test]
@ -114,19 +113,19 @@ namespace NzbDrone.Core.Test
}
//assert
Assert.Count(7, seasons);
Assert.Count(23, seasons1);
Assert.Count(19, seasons2);
Assert.Count(16, seasons3);
Assert.Count(20, seasons4);
Assert.Count(18, seasons5);
Assert.Distinct(seasons1.Select(s => s.EpisodeNumber));
Assert.Distinct(seasons2.Select(s => s.EpisodeNumber));
Assert.Distinct(seasons3.Select(s => s.EpisodeNumber));
Assert.Distinct(seasons4.Select(s => s.EpisodeNumber));
Assert.Distinct(seasons5.Select(s => s.EpisodeNumber));
Assert.Distinct(seasons6.Select(s => s.EpisodeNumber));
seasons.Should().HaveCount(7);
seasons1.Should().HaveCount(23);
seasons2.Should().HaveCount(19);
seasons3.Should().HaveCount(16);
seasons4.Should().HaveCount(20);
seasons5.Should().HaveCount(18);
seasons1.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
seasons2.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
seasons3.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
seasons4.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
seasons5.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
seasons6.Select(s => s.EpisodeNumber).Should().OnlyHaveUniqueItems();
}
}

@ -5,9 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using FizzWare.NBuilder;
using Gallio.Framework;
using MbUnit.Framework;
using MbUnit.Framework.ContractVerifiers;
using NUnit.Framework;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Test.Framework;

@ -7,5 +7,4 @@
<package id="CommonServiceLocator" version="1.0" />
<package id="Unity" version="2.1.505.0" />
<package id="NUnit" version="2.5.10.11092" />
<package id="FluentAssertions" version="1.4.0.0" />
</packages>

@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Core.Model;
namespace NzbDrone.Core.Helpers
{
@ -9,307 +7,140 @@ namespace NzbDrone.Core.Helpers
{
//Todo: Move this to a publically available location (so updates can be applied without releasing a new version of NzbDrone)
//Todo: GoogleDocs? WCF Web Services on NzbDrone.com?
private static readonly List<SceneNameModel> SceneNameMappings = new List<SceneNameModel>
{
new SceneNameModel
{SeriesId = 72546, Name = "CSI"},
new SceneNameModel
{
SeriesId = 73696,
Name = "CSI New York"
},
new SceneNameModel
{SeriesId = 73696, Name = "CSI NY"},
new SceneNameModel
{
SeriesId = 110381,
Name = "Archer"
},
new SceneNameModel
{
SeriesId = 83897,
Name =
"Life After People The Series"
},
new SceneNameModel
{
SeriesId = 83897,
Name = "Life After People"
},
new SceneNameModel
{
SeriesId = 80552,
Name = "Kitchen Nightmares US"
},
new SceneNameModel
{
SeriesId = 71256,
Name = "The Daily Show"
},
new SceneNameModel
{
SeriesId = 71256,
Name =
"The Daily Show with Jon Stewart"
},
new SceneNameModel
{
SeriesId = 75692,
Name = "Law and Order SVU"
},
new SceneNameModel
{
SeriesId = 75692,
Name =
"Law and Order Special Victims Unit"
},
new SceneNameModel
{
SeriesId = 71489,
Name =
"Law and Order Criminal Intent"
},
new SceneNameModel
{
SeriesId = 71489,
Name = "Law and Order CI"
},
new SceneNameModel
{
SeriesId = 79590,
Name = "Dancing With The Stars US"
},
new SceneNameModel
{
SeriesId = 73387,
Name = "Craig Ferguson"
},
new SceneNameModel
{
SeriesId = 85355,
Name = "Jimmy Fallon"
},
new SceneNameModel
{
SeriesId = 75088,
Name = "David Letterman"
},
new SceneNameModel
{
SeriesId = 76706,
Name = "Big Brother US"
},
new SceneNameModel
{
SeriesId = 105521,
Name = "The Colony"
},
new SceneNameModel
{
SeriesId = 105521,
Name = "The Colony US"
},
new SceneNameModel
{
SeriesId = 76235,
Name =
"Americas Funniest Home Videos"
},
new SceneNameModel
{SeriesId = 76235, Name = "AFHV"},
new SceneNameModel
{
SeriesId = 139941,
Name = "Childrens Hospital US"
},
new SceneNameModel
{
SeriesId = 139941,
Name = "Childrens Hospital"
},
new SceneNameModel
{SeriesId = 83123, Name = "Merlin"},
new SceneNameModel
{
SeriesId = 83123,
Name = "Merlin 2008"
},
new SceneNameModel
{
SeriesId = 76779,
Name = "WWE Monday Night RAW"
},
new SceneNameModel
{
SeriesId = 164951,
Name = "Shit My Dad Says"
},
new SceneNameModel
{
SeriesId = 83714,
Name = "Genius with Dave Gorman"
},
new SceneNameModel
{
SeriesId = 168161,
Name = "Law and Order LA"
},
new SceneNameModel
{
SeriesId = 77526,
Name = "Star Trek TOS"
},
new SceneNameModel
{
SeriesId = 72073,
Name = "Star Trek DS9"
},
new SceneNameModel
{
SeriesId = 72194,
Name = "Ellen Degeneres"
},
new SceneNameModel
{
SeriesId = 72194,
Name = "Ellen Degeneres"
},
new SceneNameModel
{
SeriesId = 195831,
Name = "Drinking Made Easy"
},
new SceneNameModel
{
SeriesId = 195831,
Name =
"Zane Lampreys Drinking Made Easy"
},
new SceneNameModel
{SeriesId = 76133, Name = "Poirot"},
new SceneNameModel
{
SeriesId = 76133,
Name = "Agatha Christies Poirot"
},
new SceneNameModel
{
SeriesId = 70870,
Name =
"The Real World Road Rules Challenge"
},
new SceneNameModel
{
SeriesId = 70870,
Name = "The Challenge Cutthroat"
},
new SceneNameModel
{
SeriesId = 77444,
Name = "This Old House Program"
},
new SceneNameModel
{
SeriesId = 73290,
Name = "60 Minutes US"
},
new SceneNameModel
{SeriesId = 194751, Name = "Conan"},
new SceneNameModel
{
SeriesId = 194751,
Name = "Conan 2010"
},
new SceneNameModel
{
SeriesId = 164451,
Name = "Carlos 2010"
},
new SceneNameModel
{
SeriesId = 70726,
Name = "Babalon 5"
},
new SceneNameModel
{
SeriesId = 70726,
Name = "Babalon5"
},
new SceneNameModel
{SeriesId = 83714, Name = "Genius"},
new SceneNameModel
{
SeriesId = 83714,
Name = "Genius With Dave Gormand"
},
new SceneNameModel
{
SeriesId = 212571,
Name = "Come Fly With Me 2010"
},
new SceneNameModel
{
SeriesId = 81563,
Name = "Border Security"
},
new SceneNameModel
{
SeriesId = 81563,
Name =
"Border Security Australias Frontline"
},
new SceneNameModel
{
SeriesId = 172381,
Name = "Silent Library US"
},
new SceneNameModel
{
SeriesId = 131791,
Name = "Sci-Fi Science"
},
new SceneNameModel
{
SeriesId = 80646,
Name = "Frontline"
},
new SceneNameModel
{
SeriesId = 80646,
Name = "Frontline US"
},
new SceneNameModel
{
SeriesId = 189931,
Name = "RBT AU"
},
new SceneNameModel
{SeriesId = 73255, Name = "House"},
new SceneNameModel
{
SeriesId = 73255,
Name = "House MD"
},
new SceneNameModel
{
SeriesId = 73244,
Name = "The Office"
},
new SceneNameModel
{
SeriesId = 73244,
Name = "The Office US"
},
};
private static readonly Dictionary<String, Int32> SeriesIdLookupList = new Dictionary<string, int>();
private static readonly Dictionary<Int32, String> SceneNameLookupList = new Dictionary<Int32, String>();
public static int FindByName(string cleanSeriesName)
static SceneNameHelper()
{
//These values are used to match report titles parsed out of RSS to a series in the DB
SeriesIdLookupList.Add(Parser.NormalizeTitle("CSI"), 72546);
SeriesIdLookupList.Add(Parser.NormalizeTitle("CSI New York"), 73696);
SeriesIdLookupList.Add(Parser.NormalizeTitle("CSI NY"), 73696);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Archer"), 110381);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Life After People The Series"), 83897);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Life After People"), 83897);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Kitchen Nightmares US"), 80552);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Daily Show"), 71256);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Daily Show with Jon Stewart"), 71256);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Law and Order SVU"), 75692);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Law and Order Special Victims Unit"), 75692);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Law and Order Criminal Intent"), 71489);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Law and Order CI"), 71489);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Dancing With The Stars US"), 79590);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Craig Ferguson"), 73387);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Jimmy Fallon"), 85355);
SeriesIdLookupList.Add(Parser.NormalizeTitle("David Letterman"), 75088);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Big Brother US"), 76706);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Colony"), 105521);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Colony US"), 105521);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Americas Funniest Home Videos"), 76235);
SeriesIdLookupList.Add(Parser.NormalizeTitle("AFHV"), 76235);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Childrens Hospital US"), 139941);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Childrens Hospital"), 139941);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Merlin"), 83123);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Merlin 2008"), 83123);
SeriesIdLookupList.Add(Parser.NormalizeTitle("WWE Monday Night RAW"), 76779);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Shit My Dad Says"), 164951);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Genius with Dave Gorman"), 83714);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Law and Order LA"), 168161);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Star Trek TOS"), 77526);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Star Trek DS9"), 72073);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Ellen Degeneres"), 72194);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Drinking Made Easy"), 195831);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Zane Lampreys Drinking Made Easy"), 195831);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Poirot"), 76133);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Agatha Christies Poirot"), 76133);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Real World Road Rules Challenge"), 70870);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Challenge Cutthroat"), 70870);
SeriesIdLookupList.Add(Parser.NormalizeTitle("This Old House Program"), 77444);
SeriesIdLookupList.Add(Parser.NormalizeTitle("60 Minutes US"), 73290);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Conan"), 194751);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Conan 2010"), 194751);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Carlos 2010"), 164451);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Babalon 5"), 70726);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Babalon5"), 70726);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Genius"), 83714);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Genius With Dave Gormand"), 83714);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Come Fly With Me 2010"), 212571);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Border Security"), 81563);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Border Security Australias Frontline"), 81563);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Silent Library US"), 172381);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Sci-Fi Science"), 131791);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Frontline"), 80646);
SeriesIdLookupList.Add(Parser.NormalizeTitle("Frontline US"), 80646);
SeriesIdLookupList.Add(Parser.NormalizeTitle("RBT AU"), 189931);
SeriesIdLookupList.Add(Parser.NormalizeTitle("House"), 73255);
SeriesIdLookupList.Add(Parser.NormalizeTitle("House MD"), 73255);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Office"), 73244);
SeriesIdLookupList.Add(Parser.NormalizeTitle("The Office US"), 73244);
//These values are used when doing an indexer search.
SceneNameLookupList.Add(72546, "CSI"); //CSI
SceneNameLookupList.Add(73696, "CSI"); //CSI NY
SceneNameLookupList.Add(110381, "Archer");
SceneNameLookupList.Add(83897, "Life After People");
SceneNameLookupList.Add(80552, "Kitchen Nightmares US");
SceneNameLookupList.Add(71256, "The Daily Show"); //The Daily Show with Jon Stewart
SceneNameLookupList.Add(75692, "Law and Order"); //SVU
SceneNameLookupList.Add(71489, "Law and Order");//CI
SceneNameLookupList.Add(79590, "Dancing With The Stars US");
SceneNameLookupList.Add(73387, "Craig Ferguson");
SceneNameLookupList.Add(85355, "Jimmy Fallon");
SceneNameLookupList.Add(75088, "David Letterman");
SceneNameLookupList.Add(76706, "Big Brother US");
SceneNameLookupList.Add(105521, "The Colony");
SceneNameLookupList.Add(76235, "Americas Funniest Home Videos");
SceneNameLookupList.Add(139941, "Childrens Hospital");
SceneNameLookupList.Add(83123, "Merlin");
SceneNameLookupList.Add(76779, "WWE Monday Night RAW");
SceneNameLookupList.Add(164951, "Shit My Dad Says");
SceneNameLookupList.Add(168161, "Law and Order LA");
SceneNameLookupList.Add(77526, "Star Trek TOS");
SceneNameLookupList.Add(72073, "Star Trek DS9");
SceneNameLookupList.Add(72194, "Ellen Degeneres");
SceneNameLookupList.Add(195831, "Drinking Made Easy");//Zane Lampreys Drinking Made Easy
SceneNameLookupList.Add(76133, "Poirot"); //Agatha Christies Poirot
SceneNameLookupList.Add(70870, "The Real World Road Rules Challenge");
SceneNameLookupList.Add(77444, "This Old House Program");
SceneNameLookupList.Add(73290, "60 Minutes US");
SceneNameLookupList.Add(194751, "Conan");
SceneNameLookupList.Add(164451, "Carlos 2010");
SceneNameLookupList.Add(70726, "Babalon"); //5
SceneNameLookupList.Add(83714, "Genius"); //Genius With Dave Gormand
SceneNameLookupList.Add(212571, "Come Fly With Me 2010");
SceneNameLookupList.Add(81563, "Border Security");
SceneNameLookupList.Add(172381, "Silent Library US");
SceneNameLookupList.Add(131791, "Sci-Fi Science");
SceneNameLookupList.Add(80646, "Frontline");
SceneNameLookupList.Add(189931, "RBT AU");
SceneNameLookupList.Add(73255, "House");
SceneNameLookupList.Add(73244, "The Office");
}
public static Nullable<Int32> GetIdByName(string cleanSeriesName)
{
int id;
if (SeriesIdLookupList.TryGetValue(Parser.NormalizeTitle(cleanSeriesName), out id))
{
return id;
}
return null;
}
public static String GetTitleById(int seriesId)
{
var map = SceneNameMappings.Find(s => Parser.NormalizeTitle(s.Name) == cleanSeriesName);
string title;
if (map == null)
return 0;
if (SceneNameLookupList.TryGetValue(seriesId, out title))
{
return title;
}
return map.SeriesId;
return null;
}
}
}

@ -10,7 +10,8 @@ namespace NzbDrone.Core.Providers.Indexer
{
public class Newzbin : IndexerBase
{
public Newzbin(HttpProvider httpProvider, ConfigProvider configProvider) : base(httpProvider, configProvider)
public Newzbin(HttpProvider httpProvider, ConfigProvider configProvider)
: base(httpProvider, configProvider)
{
}
@ -35,7 +36,8 @@ namespace NzbDrone.Core.Providers.Indexer
protected override IList<string> GetSearchUrls(string seriesTitle, int seasonNumber, int episodeNumber)
{
return new List<string>();
return new List<string> { String.Format(@"http://www.newzbin.com/search/query/?q={0}+{1}x{2:00}&fpn=p&searchaction=Go&category=8&feed=rss&hauth=1", GetQueryTitle(seriesTitle), seasonNumber, episodeNumber) };
}
public override string Name
@ -54,7 +56,7 @@ namespace NzbDrone.Core.Providers.Indexer
{
var quality = Parser.ParseQuality(item.Summary.Text);
currentResult.Quality = quality;
currentResult.Quality = quality;
}
return currentResult;
}

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers.Indexer;
@ -43,15 +44,25 @@ namespace NzbDrone.Core.Providers.Jobs
throw new ArgumentOutOfRangeException("targetId");
var episode = _episodeProvider.GetEpisode(targetId);
if (episode == null)
{
Logger.Error("Unable to find an episode {0} in database", targetId);
return;
}
var series = episode.Series;
var indexers = _indexerProvider.GetEnabledIndexers();
var reports = new List<EpisodeParseResult>();
var title = SceneNameHelper.GetTitleById(series.SeriesId);
if(string.IsNullOrWhiteSpace(title))
{
title = series.Title;
}
foreach (var indexer in indexers)
{
try
@ -66,7 +77,7 @@ namespace NzbDrone.Core.Providers.Jobs
}
else
{
indexerResults = indexer.FetchEpisode(episode.Series.Title, episode.SeasonNumber, episode.EpisodeNumber);
indexerResults = indexer.FetchEpisode(title, episode.SeasonNumber, episode.EpisodeNumber);
}
reports.AddRange(indexerResults);
@ -82,7 +93,7 @@ namespace NzbDrone.Core.Providers.Jobs
reports.ForEach(c =>
{
c.Series = episode.Series;
c.Series = series;
c.Episodes = new List<Episode> { episode };
});

@ -105,10 +105,10 @@ namespace NzbDrone.Core.Providers
{
var normalizeTitle = Parser.NormalizeTitle(title);
var seriesId = SceneNameHelper.FindByName(normalizeTitle);
if (seriesId != 0)
var seriesId = SceneNameHelper.GetIdByName(normalizeTitle);
if (seriesId != null)
{
return GetSeries(seriesId);
return GetSeries(seriesId.Value);
}
return _repository.Single<Series>(s => s.CleanTitle == normalizeTitle);

Loading…
Cancel
Save