fixed nzbclub parser.

This commit is contained in:
Keivan Beigi 2013-05-02 16:06:08 -07:00
parent 16425cdab6
commit 385edbf464
14 changed files with 94 additions and 64 deletions

View File

@ -22,7 +22,7 @@ namespace NzbDrone.Api.Test.MappingTests
[TestCase(typeof(Core.Tv.Episode), typeof(EpisodeResource))] [TestCase(typeof(Core.Tv.Episode), typeof(EpisodeResource))]
[TestCase(typeof(RootFolder), typeof(RootFolderResource))] [TestCase(typeof(RootFolder), typeof(RootFolderResource))]
[TestCase(typeof(NamingConfig), typeof(NamingConfigResource))] [TestCase(typeof(NamingConfig), typeof(NamingConfigResource))]
[TestCase(typeof(IndexerDefinition), typeof(IndexerResource))] [TestCase(typeof(Indexer), typeof(IndexerResource))]
[TestCase(typeof(ReportInfo), typeof(ReleaseResource))] [TestCase(typeof(ReportInfo), typeof(ReleaseResource))]
[TestCase(typeof(ParsedEpisodeInfo), typeof(ReleaseResource))] [TestCase(typeof(ParsedEpisodeInfo), typeof(ReleaseResource))]
[TestCase(typeof(DownloadDecision), typeof(ReleaseResource))] [TestCase(typeof(DownloadDecision), typeof(ReleaseResource))]

View File

@ -9,7 +9,6 @@ namespace NzbDrone.Api.Indexers
{ {
public Boolean Enable { get; set; } public Boolean Enable { get; set; }
public String Name { get; set; } public String Name { get; set; }
public List<Field> Fields { get; set; } public List<Field> Fields { get; set; }
} }
} }

View File

@ -6,6 +6,6 @@ namespace NzbDrone.Api.RootFolders
public class RootFolderResource : RestResource public class RootFolderResource : RestResource
{ {
public String Path { get; set; } public String Path { get; set; }
public UInt64 FreeSpace { get; set; } public Int64 FreeSpace { get; set; }
} }
} }

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using FluentAssertions; using FluentAssertions;
using Moq; using Moq;
@ -17,21 +18,21 @@ namespace NzbDrone.Core.Test.IndexerTests
{ {
public class IndexerServiceFixture : DbTest<IndexerService, IndexerDefinition> public class IndexerServiceFixture : DbTest<IndexerService, IndexerDefinition>
{ {
private List<IIndexer> _indexers; private List<Func<IIndexer>> _indexers;
[SetUp] [SetUp]
public void Setup() public void Setup()
{ {
_indexers = new List<IIndexer>(); _indexers = new List<Func<IIndexer>>();
_indexers.Add(new Newznab()); _indexers.Add(() => new Newznab());
_indexers.Add(new Nzbsrus()); _indexers.Add(() => new Nzbsrus());
_indexers.Add(new NzbClub()); _indexers.Add(() => new NzbClub());
_indexers.Add(new NzbIndex()); _indexers.Add(() => new NzbIndex());
_indexers.Add(new Omgwtfnzbs()); _indexers.Add(() => new Omgwtfnzbs());
_indexers.Add(new Wombles()); _indexers.Add(() => new Wombles());
Mocker.SetConstant<IEnumerable<IIndexer>>(_indexers); Mocker.SetConstant<IEnumerable<Func<IIndexer>>>(_indexers);
} }
@ -66,7 +67,6 @@ namespace NzbDrone.Core.Test.IndexerTests
indexers.Should().NotContain(c => c.Name == null); indexers.Should().NotContain(c => c.Name == null);
indexers.Select(c => c.Name).Should().OnlyHaveUniqueItems(); indexers.Select(c => c.Name).Should().OnlyHaveUniqueItems();
indexers.Select(c => c.Instance).Should().OnlyHaveUniqueItems(); indexers.Select(c => c.Instance).Should().OnlyHaveUniqueItems();
} }
} }

View File

@ -0,0 +1,28 @@
using FluentAssertions;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Indexers.NzbClub;
using NzbDrone.Core.Test.Framework;
using NUnit.Framework;
namespace NzbDrone.Core.Test.IndexerTests.IntegrationTests
{
public class NzbClubIntegrationTests : CoreTest<FetchFeedService>
{
[Test]
public void should_be_able_to_fetch_rss()
{
UseRealHttp();
var indexer = new NzbClub();
var result = Subject.FetchRss(indexer);
result.Should().NotBeEmpty();
result.Should().OnlyContain(c => !string.IsNullOrWhiteSpace(c.Title));
result.Should().OnlyContain(c => !string.IsNullOrWhiteSpace(c.NzbInfoUrl));
result.Should().OnlyContain(c => !string.IsNullOrWhiteSpace(c.NzbUrl));
result.Should().OnlyContain(c => c.Size > 0);
}
}
}

View File

@ -133,7 +133,8 @@
<Compile Include="IndexerSearchTests\SearchDefinitionFixture.cs" /> <Compile Include="IndexerSearchTests\SearchDefinitionFixture.cs" />
<Compile Include="IndexerTests\BasicRssParserFixture.cs" /> <Compile Include="IndexerTests\BasicRssParserFixture.cs" />
<Compile Include="IndexerTests\IndexerServiceFixture.cs" /> <Compile Include="IndexerTests\IndexerServiceFixture.cs" />
<Compile Include="IndexerTests\IntegrationTests\NzbxIntegerationTests.cs" /> <Compile Include="IndexerTests\IntegrationTests\NzbxIntegrationTests.cs" />
<Compile Include="IndexerTests\IntegrationTests\NzbClubIntegrationTests.cs" />
<Compile Include="IndexerTests\ParserTests\NzbxParserFixture.cs" /> <Compile Include="IndexerTests\ParserTests\NzbxParserFixture.cs" />
<Compile Include="JobTests\JobRepositoryFixture.cs" /> <Compile Include="JobTests\JobRepositoryFixture.cs" />
<Compile Include="JobTests\RenameSeasonJobFixture.cs" /> <Compile Include="JobTests\RenameSeasonJobFixture.cs" />

View File

@ -5,8 +5,6 @@ using System.IO;
using System.ServiceModel.Syndication; using System.ServiceModel.Syndication;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using NLog; using NLog;
using NzbDrone.Core.Model;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Indexers namespace NzbDrone.Core.Indexers
@ -27,6 +25,7 @@ namespace NzbDrone.Core.Indexers
public IEnumerable<ReportInfo> Process(Stream source) public IEnumerable<ReportInfo> Process(Stream source)
{ {
//TODO: replace this BS with plain Linq to XML
var reader = new SyndicationFeedXmlReader(source); var reader = new SyndicationFeedXmlReader(source);
var feed = SyndicationFeed.Load(reader).Items; var feed = SyndicationFeed.Load(reader).Items;

View File

@ -5,13 +5,11 @@ using NLog;
using NzbDrone.Common.Messaging; using NzbDrone.Common.Messaging;
using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Lifecycle;
namespace NzbDrone.Core.Indexers namespace NzbDrone.Core.Indexers
{ {
public class Indexer public class Indexer
{ {
public int DefinitionId { get; set; } public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public bool Enable { get; set; } public bool Enable { get; set; }
public IIndexerSetting Settings { get; set; } public IIndexerSetting Settings { get; set; }
@ -30,16 +28,15 @@ namespace NzbDrone.Core.Indexers
private readonly IIndexerRepository _indexerRepository; private readonly IIndexerRepository _indexerRepository;
private readonly Logger _logger; private readonly Logger _logger;
private readonly IList<IIndexer> _indexers; private readonly List<Func<IIndexer>> _indexers;
public IndexerService(IIndexerRepository indexerRepository, IEnumerable<IIndexer> indexers, Logger logger) public IndexerService(IIndexerRepository indexerRepository, IEnumerable<Func<IIndexer>> indexers, Logger logger)
{ {
_indexerRepository = indexerRepository; _indexerRepository = indexerRepository;
_logger = logger; _logger = logger;
_indexers = indexers.ToList(); _indexers = indexers.ToList();
} }
public List<Indexer> All() public List<Indexer> All()
{ {
return _indexerRepository.All().Select(ToIndexer).ToList(); return _indexerRepository.All().Select(ToIndexer).ToList();
@ -47,10 +44,9 @@ namespace NzbDrone.Core.Indexers
public List<IIndexer> GetAvailableIndexers() public List<IIndexer> GetAvailableIndexers()
{ {
return All().Where(c => c.Enable && c.Settings.IsValid).Select(c=>c.Instance).ToList(); return All().Where(c => c.Enable && c.Settings.IsValid).Select(c => c.Instance).ToList();
} }
public Indexer Get(string name) public Indexer Get(string name)
{ {
return ToIndexer(_indexerRepository.Get(name)); return ToIndexer(_indexerRepository.Get(name));
@ -60,7 +56,7 @@ namespace NzbDrone.Core.Indexers
private Indexer ToIndexer(IndexerDefinition definition) private Indexer ToIndexer(IndexerDefinition definition)
{ {
var indexer = new Indexer(); var indexer = new Indexer();
indexer.DefinitionId = definition.Id; indexer.Id = definition.Id;
indexer.Enable = definition.Enable; indexer.Enable = definition.Enable;
indexer.Instance = GetInstance(definition); indexer.Instance = GetInstance(definition);
indexer.Name = definition.Name; indexer.Name = definition.Name;
@ -74,16 +70,13 @@ namespace NzbDrone.Core.Indexers
indexer.Settings = NullSetting.Instance; indexer.Settings = NullSetting.Instance;
} }
return indexer; return indexer;
} }
private IIndexer GetInstance(IndexerDefinition indexerDefinition) private IIndexer GetInstance(IndexerDefinition indexerDefinition)
{ {
var existingInstance = _indexers.Single(c => c.GetType().Name.Equals(indexerDefinition.Implementation, StringComparison.CurrentCultureIgnoreCase)); var instance = _indexers.Single(c => c().GetType().Name.Equals(indexerDefinition.Implementation, StringComparison.InvariantCultureIgnoreCase))();
var instance = (IIndexer)Activator.CreateInstance(existingInstance.GetType());
instance.InstanceDefinition = indexerDefinition; instance.InstanceDefinition = indexerDefinition;
return instance; return instance;
} }
@ -93,11 +86,7 @@ namespace NzbDrone.Core.Indexers
if (!All().Any()) if (!All().Any())
{ {
var definitions = _indexers.SelectMany(delegate(IIndexer indexer) var definitions = _indexers.SelectMany(indexer => indexer().DefaultDefinitions);
{
return indexer.DefaultDefinitions;
});
_indexerRepository.InsertMany(definitions.ToList()); _indexerRepository.InsertMany(definitions.ToList());
} }
} }

View File

@ -10,6 +10,14 @@ namespace NzbDrone.Core.Indexers.NzbClub
get { return "NzbClub"; } get { return "NzbClub"; }
} }
public override IParseFeed Parser
{
get
{
return new NzbClubParser();
}
}
public override IEnumerable<string> RecentFeed public override IEnumerable<string> RecentFeed
{ {
get get

View File

@ -1,8 +1,6 @@
using System; using System;
using System.ServiceModel.Syndication; using System.ServiceModel.Syndication;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using NzbDrone.Core.Model;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Indexers.NzbClub namespace NzbDrone.Core.Indexers.NzbClub
@ -13,7 +11,7 @@ namespace NzbDrone.Core.Indexers.NzbClub
{ {
if (currentResult != null) if (currentResult != null)
{ {
var sizeString = Regex.Match(item.Summary.Text, @"Size:\s\d+\.\d{1,2}\s\w{2}\s", RegexOptions.IgnoreCase | RegexOptions.Compiled).Value; var sizeString = Regex.Match(item.Summary.Text, @"Size:\s\d+\s+\w+", RegexOptions.IgnoreCase | RegexOptions.Compiled).Value;
currentResult.Size = GetReportSize(sizeString); currentResult.Size = GetReportSize(sizeString);
} }

View File

@ -71,6 +71,7 @@
<Compile Include="Client\SeriesClient - Copy.cs" /> <Compile Include="Client\SeriesClient - Copy.cs" />
<Compile Include="Client\SeriesClient.cs" /> <Compile Include="Client\SeriesClient.cs" />
<Compile Include="CommandIntegerationTests.cs" /> <Compile Include="CommandIntegerationTests.cs" />
<Compile Include="QualityProfileIntegrationTest.cs" />
<Compile Include="ReleaseIntegrationTest.cs" /> <Compile Include="ReleaseIntegrationTest.cs" />
<Compile Include="IntegrationTest.cs" /> <Compile Include="IntegrationTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />

View File

@ -0,0 +1,33 @@
using System.IO;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Api.RootFolders;
namespace NzbDrone.Integration.Test
{
[TestFixture]
public class QualityProfileIntegrationTest : IntegrationTest
{
[Test]
public void should_have_2_quality_profiles_initially()
{
RootFolders.All().Should().BeEmpty();
var rootFolder = new RootFolderResource
{
Path = Directory.GetCurrentDirectory()
};
var postResponse = RootFolders.Post(rootFolder);
postResponse.Id.Should().NotBe(0);
postResponse.FreeSpace.Should().NotBe(0);
RootFolders.All().Should().OnlyContain(c => c.Id == postResponse.Id);
RootFolders.Delete(postResponse.Id);
RootFolders.All().Should().BeEmpty();
}
}
}

View File

@ -26,32 +26,6 @@ namespace NzbDrone.Integration.Test
RootFolders.All().Should().OnlyContain(c => c.Id == postResponse.Id); RootFolders.All().Should().OnlyContain(c => c.Id == postResponse.Id);
RootFolders.Delete(postResponse.Id);
RootFolders.All().Should().BeEmpty();
}
}
[TestFixture]
public class QualityProfileIntegrationTest : IntegrationTest
{
[Test]
public void should_have_2_quality_profiles_initially()
{
RootFolders.All().Should().BeEmpty();
var rootFolder = new RootFolderResource
{
Path = Directory.GetCurrentDirectory()
};
var postResponse = RootFolders.Post(rootFolder);
postResponse.Id.Should().NotBe(0);
postResponse.FreeSpace.Should().NotBe(0);
RootFolders.All().Should().OnlyContain(c => c.Id == postResponse.Id);
RootFolders.Delete(postResponse.Id); RootFolders.Delete(postResponse.Id);
RootFolders.All().Should().BeEmpty(); RootFolders.All().Should().BeEmpty();