Sonarr/NzbDrone.Core.Test/IndexerTests.cs

385 lines
13 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.ServiceModel.Syndication;
using FizzWare.NBuilder;
2011-06-02 21:06:46 +00:00
using FluentAssertions;
using Moq;
2011-06-02 21:06:46 +00:00
using NUnit.Framework;
2011-05-28 19:23:35 +00:00
using NzbDrone.Core.Model;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Providers.Indexer;
using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Test.ProviderTests;
2011-10-24 05:54:09 +00:00
using NzbDrone.Test.Common;
using NzbDrone.Test.Common.AutoMoq;
namespace NzbDrone.Core.Test
{
[TestFixture]
// ReSharper disable InconsistentNaming
2011-11-13 07:27:16 +00:00
public class IndexerTests : CoreTest
{
2011-12-17 03:25:30 +00:00
[TestCase("nzbsorg.xml", 1)]
[TestCase("nzbsrus.xml", 6)]
2011-06-02 21:06:46 +00:00
[TestCase("newzbin.xml", 1)]
[TestCase("nzbmatrix.xml", 2)]
public void parse_feed_xml(string fileName, int warns)
{
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\" + fileName));
2011-07-08 03:27:11 +00:00
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetSettings(It.IsAny<Type>()))
.Returns(fakeSettings);
2011-12-15 04:15:53 +00:00
var mockIndexer = Mocker.Resolve<MockIndexer>();
var parseResults = mockIndexer.FetchRss();
foreach (var episodeParseResult in parseResults)
{
var Uri = new Uri(episodeParseResult.NzbUrl);
2011-06-02 21:06:46 +00:00
Uri.PathAndQuery.Should().NotContain("//");
}
2011-06-02 21:06:46 +00:00
parseResults.Should().NotBeEmpty();
parseResults.Should().OnlyContain(s => s.Indexer == mockIndexer.Name);
parseResults.Should().OnlyContain(s => !String.IsNullOrEmpty(s.NzbTitle));
ExceptionVerification.ExpectedWarns(warns);
}
[Test]
public void newzbin_parses_languae()
{
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\newbin_none_english.xml"));
2011-12-15 04:15:53 +00:00
var newzbin = Mocker.Resolve<Newzbin>();
var parseResults = newzbin.FetchRss();
foreach (var episodeParseResult in parseResults)
{
var Uri = new Uri(episodeParseResult.NzbUrl);
Uri.PathAndQuery.Should().NotContain("//");
}
parseResults.Should().NotBeEmpty();
parseResults.Should().NotContain(e => e.Language == LanguageType.English);
}
[Test]
2011-06-03 01:15:19 +00:00
public void newzbin_rss_fetch()
{
2011-12-15 04:15:53 +00:00
Mocker.Resolve<HttpProvider>();
2011-07-08 03:27:11 +00:00
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetSettings(It.IsAny<Type>()))
.Returns(fakeSettings);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NewzbinUsername)
.Returns("nzbdrone");
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NewzbinPassword)
.Returns("smartar39865");
2011-12-15 04:15:53 +00:00
var newzbinProvider = Mocker.Resolve<Newzbin>();
var parseResults = newzbinProvider.FetchRss();
foreach (var episodeParseResult in parseResults)
{
var Uri = new Uri(episodeParseResult.NzbUrl);
2011-06-02 21:06:46 +00:00
Uri.PathAndQuery.Should().NotContain("//");
}
2011-06-02 21:06:46 +00:00
parseResults.Should().NotBeEmpty();
parseResults.Should().OnlyContain(s => s.Indexer == newzbinProvider.Name);
parseResults.Should().OnlyContain(s => !String.IsNullOrEmpty(s.NzbTitle));
ExceptionVerification.MarkInconclusive(typeof(WebException));
ExceptionVerification.IgnoreWarns();
}
2011-06-02 21:06:46 +00:00
[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)
{
2011-12-15 04:15:53 +00:00
const string summary = "My fake summary";
2011-07-08 03:27:11 +00:00
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetSettings(It.IsAny<Type>()))
.Returns(fakeSettings);
var fakeRssItem = Builder<SyndicationItem>.CreateNew()
.With(c => c.Title = new TextSyndicationContent(title))
.With(c => c.Summary = new TextSyndicationContent(summary))
.Build();
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<CustomParserIndexer>().ParseFeed(fakeRssItem);
Assert.IsNotNull(result);
2011-05-28 19:23:35 +00:00
Assert.AreEqual(LanguageType.Finnish, result.Language);
Assert.AreEqual(season, result.SeasonNumber);
Assert.AreEqual(episode, result.EpisodeNumbers[0]);
2011-05-28 19:23:35 +00:00
Assert.AreEqual(quality, result.Quality.QualityType);
}
2011-06-13 04:20:29 +00:00
2011-06-02 21:06:46 +00:00
[TestCase("Adventure.Inc.DVDRip.XviD-OSiTV")]
public void custome_parser_full_parse(string title)
{
2011-12-15 04:15:53 +00:00
const string summary = "My fake summary";
2011-07-08 03:27:11 +00:00
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetSettings(It.IsAny<Type>()))
.Returns(fakeSettings);
var fakeRssItem = Builder<SyndicationItem>.CreateNew()
.With(c => c.Title = new TextSyndicationContent(title))
.With(c => c.Summary = new TextSyndicationContent(summary))
.Build();
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<CustomParserIndexer>().ParseFeed(fakeRssItem);
Assert.IsNotNull(result);
2011-05-28 19:23:35 +00:00
Assert.AreEqual(LanguageType.Finnish, result.Language);
ExceptionVerification.ExpectedWarns(1);
}
[Test]
public void downloadFeed()
{
2011-12-15 04:15:53 +00:00
Mocker.SetConstant(new HttpProvider());
2011-07-08 03:27:11 +00:00
var fakeSettings = Builder<IndexerDefinition>.CreateNew().Build();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<IndexerProvider>()
.Setup(c => c.GetSettings(It.IsAny<Type>()))
.Returns(fakeSettings);
2011-12-15 04:15:53 +00:00
Mocker.Resolve<TestUrlIndexer>().FetchRss();
ExceptionVerification.IgnoreWarns();
}
[TestCase("simpsons", 21, 23)]
[TestCase("Hawaii Five-0 (2010)", 1, 5)]
[TestCase("In plain Sight", 1, 4)]
public void nzbsorg_search_returns_valid_results(string title, int season, int episode)
{
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbsOrgUId)
.Returns("43516");
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbsOrgHash)
.Returns("bc8edb4cc49d4ae440775adec5ac001f");
2011-12-15 04:15:53 +00:00
Mocker.Resolve<HttpProvider>();
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<NzbsOrg>().FetchEpisode(title, season, episode);
ExceptionVerification.MarkInconclusive(typeof(WebException));
2011-06-02 21:06:46 +00:00
result.Should().NotBeEmpty();
result.Should().OnlyContain(r => r.CleanTitle == Parser.NormalizeTitle(title));
result.Should().OnlyContain(r => r.SeasonNumber == season);
result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(episode));
2011-06-03 01:15:19 +00:00
}
[TestCase("simpsons", 21, 23)]
[TestCase("Hawaii Five-0 (2010)", 1, 1)]
[TestCase("In plain Sight", 1, 11, Ignore = true)]
public void newzbin_search_returns_valid_results(string title, int season, int episode)
2011-06-03 01:15:19 +00:00
{
2011-12-15 04:15:53 +00:00
2011-06-03 01:15:19 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
2011-06-03 01:15:19 +00:00
.SetupGet(c => c.NewzbinUsername)
.Returns("nzbdrone");
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
2011-06-03 01:15:19 +00:00
.SetupGet(c => c.NewzbinPassword)
.Returns("smartar39865");
2011-12-15 04:15:53 +00:00
Mocker.Resolve<HttpProvider>();
2011-06-03 01:15:19 +00:00
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<Newzbin>().FetchEpisode(title, season, episode);
2011-06-03 01:15:19 +00:00
ExceptionVerification.MarkInconclusive(typeof(WebException));
2011-11-01 01:47:39 +00:00
ExceptionVerification.IgnoreWarns();
2011-06-03 01:15:19 +00:00
result.Should().NotBeEmpty();
result.Should().OnlyContain(r => r.CleanTitle == Parser.NormalizeTitle(title));
result.Should().OnlyContain(r => r.SeasonNumber == season);
result.Should().OnlyContain(r => r.EpisodeNumbers.Contains(episode));
2011-11-01 01:47:39 +00:00
2011-05-27 06:03:57 +00:00
}
[Test]
public void nzbmatrix_search_returns_valid_results()
{
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbMatrixUsername)
.Returns("");
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbMatrixApiKey)
.Returns("");
2011-12-15 04:15:53 +00:00
Mocker.Resolve<HttpProvider>();
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<NzbMatrix>().FetchEpisode("Simpsons", 21, 23);
ExceptionVerification.MarkInconclusive(typeof(WebException));
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));
}
2011-05-27 06:03:57 +00:00
[Test]
public void nzbmatrix_multi_word_search_returns_valid_results()
{
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbMatrixUsername)
.Returns("");
2011-12-15 04:15:53 +00:00
Mocker.GetMock<ConfigProvider>()
.SetupGet(c => c.NzbMatrixApiKey)
.Returns("");
2011-12-15 04:15:53 +00:00
Mocker.Resolve<HttpProvider>();
2011-12-15 04:15:53 +00:00
var result = Mocker.Resolve<NzbMatrix>().FetchEpisode("Blue Bloods", 1, 19);
ExceptionVerification.MarkInconclusive(typeof(WebException));
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));
}
[TestCase("hawaii five-0 (2010)", "hawaii+five+0+2010")]
[TestCase("this& that", "this+that")]
[TestCase("this& that", "this+that")]
public void get_query_title(string raw, string clean)
{
var result = IndexerBase.GetQueryTitle(raw);
result.Should().Be(clean);
}
[Test]
public void size_newzbin()
{
//Setup
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\newzbin.xml"));
//Act
2011-12-15 04:15:53 +00:00
var parseResults = Mocker.Resolve<Newzbin>().FetchRss();
parseResults.Should().HaveCount(1);
parseResults[0].Size.Should().Be(1295620506);
}
[Test]
public void size_nzbmatrix()
{
//Setup
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbmatrix.xml"));
//Act
2011-12-15 04:15:53 +00:00
var parseResults = Mocker.Resolve<NzbMatrix>().FetchRss();
parseResults.Should().HaveCount(1);
parseResults[0].Size.Should().Be(1331439862);
}
[Test]
public void size_nzbsorg()
{
//Setup
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbsorg.xml"));
//Act
2011-12-15 04:15:53 +00:00
var parseResults = Mocker.Resolve<NzbsOrg>().FetchRss();
parseResults.Should().HaveCount(1);
parseResults[0].Size.Should().Be(1793148846);
}
[Test]
public void size_nzbsrus()
{
//Setup
2011-12-15 04:15:53 +00:00
2011-12-15 04:15:53 +00:00
Mocker.GetMock<HttpProvider>()
.Setup(h => h.DownloadStream(It.IsAny<String>(), It.IsAny<NetworkCredential>()))
.Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbsrus.xml"));
//Act
2011-12-15 04:15:53 +00:00
var parseResults = Mocker.Resolve<NzbsRUs>().FetchRss();
parseResults.Should().HaveCount(1);
parseResults[0].Size.Should().Be(1793148846);
}
[TearDown]
public void TearDown()
{
ExceptionVerification.MarkInconclusive(typeof(WebException));
}
}
}