From 385edbf4643de477fed1a5a954a333caf925efba Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Thu, 2 May 2013 16:06:08 -0700 Subject: [PATCH] fixed nzbclub parser. --- .../MappingTests/ResourceMappingFixture.cs | 2 +- NzbDrone.Api/Indexers/IndexerResource.cs | 1 - .../RootFolders/RootFolderResource.cs | 2 +- .../IndexerTests/IndexerServiceFixture.cs | 22 ++++++------- .../NzbClubIntegrationTests.cs | 28 ++++++++++++++++ ...rationTests.cs => NzbxIntegrationTests.cs} | 0 NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 3 +- NzbDrone.Core/Indexers/BasicRssParser.cs | 3 +- NzbDrone.Core/Indexers/IndexerService.cs | 25 ++++---------- NzbDrone.Core/Indexers/NzbClub/NzbClub.cs | 8 +++++ .../Indexers/NzbClub/NzbClubParser.cs | 4 +-- .../NzbDrone.Integration.Test.csproj | 1 + .../QualityProfileIntegrationTest.cs | 33 +++++++++++++++++++ .../RootFolderIntegrationTest.cs | 26 --------------- 14 files changed, 94 insertions(+), 64 deletions(-) create mode 100644 NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbClubIntegrationTests.cs rename NzbDrone.Core.Test/IndexerTests/IntegrationTests/{NzbxIntegerationTests.cs => NzbxIntegrationTests.cs} (100%) create mode 100644 NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs diff --git a/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs b/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs index 667c72ae8..f54268d91 100644 --- a/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs +++ b/NzbDrone.Api.Test/MappingTests/ResourceMappingFixture.cs @@ -22,7 +22,7 @@ namespace NzbDrone.Api.Test.MappingTests [TestCase(typeof(Core.Tv.Episode), typeof(EpisodeResource))] [TestCase(typeof(RootFolder), typeof(RootFolderResource))] [TestCase(typeof(NamingConfig), typeof(NamingConfigResource))] - [TestCase(typeof(IndexerDefinition), typeof(IndexerResource))] + [TestCase(typeof(Indexer), typeof(IndexerResource))] [TestCase(typeof(ReportInfo), typeof(ReleaseResource))] [TestCase(typeof(ParsedEpisodeInfo), typeof(ReleaseResource))] [TestCase(typeof(DownloadDecision), typeof(ReleaseResource))] diff --git a/NzbDrone.Api/Indexers/IndexerResource.cs b/NzbDrone.Api/Indexers/IndexerResource.cs index 0274e0658..4c793942f 100644 --- a/NzbDrone.Api/Indexers/IndexerResource.cs +++ b/NzbDrone.Api/Indexers/IndexerResource.cs @@ -9,7 +9,6 @@ namespace NzbDrone.Api.Indexers { public Boolean Enable { get; set; } public String Name { get; set; } - public List Fields { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Api/RootFolders/RootFolderResource.cs b/NzbDrone.Api/RootFolders/RootFolderResource.cs index dd38cb765..d4d0532e6 100644 --- a/NzbDrone.Api/RootFolders/RootFolderResource.cs +++ b/NzbDrone.Api/RootFolders/RootFolderResource.cs @@ -6,6 +6,6 @@ namespace NzbDrone.Api.RootFolders public class RootFolderResource : RestResource { public String Path { get; set; } - public UInt64 FreeSpace { get; set; } + public Int64 FreeSpace { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs index f2a080c8d..db041e56e 100644 --- a/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs +++ b/NzbDrone.Core.Test/IndexerTests/IndexerServiceFixture.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using FluentAssertions; using Moq; @@ -17,21 +18,21 @@ namespace NzbDrone.Core.Test.IndexerTests { public class IndexerServiceFixture : DbTest { - private List _indexers; + private List> _indexers; [SetUp] public void Setup() { - _indexers = new List(); + _indexers = new List>(); - _indexers.Add(new Newznab()); - _indexers.Add(new Nzbsrus()); - _indexers.Add(new NzbClub()); - _indexers.Add(new NzbIndex()); - _indexers.Add(new Omgwtfnzbs()); - _indexers.Add(new Wombles()); + _indexers.Add(() => new Newznab()); + _indexers.Add(() => new Nzbsrus()); + _indexers.Add(() => new NzbClub()); + _indexers.Add(() => new NzbIndex()); + _indexers.Add(() => new Omgwtfnzbs()); + _indexers.Add(() => new Wombles()); - Mocker.SetConstant>(_indexers); + Mocker.SetConstant>>(_indexers); } @@ -66,7 +67,6 @@ namespace NzbDrone.Core.Test.IndexerTests indexers.Should().NotContain(c => c.Name == null); indexers.Select(c => c.Name).Should().OnlyHaveUniqueItems(); indexers.Select(c => c.Instance).Should().OnlyHaveUniqueItems(); - } } diff --git a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbClubIntegrationTests.cs b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbClubIntegrationTests.cs new file mode 100644 index 000000000..6cfa66c31 --- /dev/null +++ b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbClubIntegrationTests.cs @@ -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 + { + [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); + } + + } +} \ No newline at end of file diff --git a/NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbxIntegerationTests.cs b/NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbxIntegrationTests.cs similarity index 100% rename from NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbxIntegerationTests.cs rename to NzbDrone.Core.Test/IndexerTests/IntegrationTests/NzbxIntegrationTests.cs diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 46d5ab977..45e176593 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -133,7 +133,8 @@ - + + diff --git a/NzbDrone.Core/Indexers/BasicRssParser.cs b/NzbDrone.Core/Indexers/BasicRssParser.cs index b38dd7593..2d9e3c090 100644 --- a/NzbDrone.Core/Indexers/BasicRssParser.cs +++ b/NzbDrone.Core/Indexers/BasicRssParser.cs @@ -5,8 +5,6 @@ using System.IO; using System.ServiceModel.Syndication; using System.Text.RegularExpressions; using NLog; -using NzbDrone.Core.Model; -using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Indexers @@ -27,6 +25,7 @@ namespace NzbDrone.Core.Indexers public IEnumerable Process(Stream source) { + //TODO: replace this BS with plain Linq to XML var reader = new SyndicationFeedXmlReader(source); var feed = SyndicationFeed.Load(reader).Items; diff --git a/NzbDrone.Core/Indexers/IndexerService.cs b/NzbDrone.Core/Indexers/IndexerService.cs index 6c425300c..73484dd03 100644 --- a/NzbDrone.Core/Indexers/IndexerService.cs +++ b/NzbDrone.Core/Indexers/IndexerService.cs @@ -5,13 +5,11 @@ using NLog; using NzbDrone.Common.Messaging; using NzbDrone.Core.Lifecycle; - namespace NzbDrone.Core.Indexers { - public class Indexer { - public int DefinitionId { get; set; } + public int Id { get; set; } public string Name { get; set; } public bool Enable { get; set; } public IIndexerSetting Settings { get; set; } @@ -30,16 +28,15 @@ namespace NzbDrone.Core.Indexers private readonly IIndexerRepository _indexerRepository; private readonly Logger _logger; - private readonly IList _indexers; + private readonly List> _indexers; - public IndexerService(IIndexerRepository indexerRepository, IEnumerable indexers, Logger logger) + public IndexerService(IIndexerRepository indexerRepository, IEnumerable> indexers, Logger logger) { _indexerRepository = indexerRepository; _logger = logger; _indexers = indexers.ToList(); } - public List All() { return _indexerRepository.All().Select(ToIndexer).ToList(); @@ -47,10 +44,9 @@ namespace NzbDrone.Core.Indexers public List 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) { return ToIndexer(_indexerRepository.Get(name)); @@ -60,7 +56,7 @@ namespace NzbDrone.Core.Indexers private Indexer ToIndexer(IndexerDefinition definition) { var indexer = new Indexer(); - indexer.DefinitionId = definition.Id; + indexer.Id = definition.Id; indexer.Enable = definition.Enable; indexer.Instance = GetInstance(definition); indexer.Name = definition.Name; @@ -74,16 +70,13 @@ namespace NzbDrone.Core.Indexers indexer.Settings = NullSetting.Instance; } - return indexer; } private IIndexer GetInstance(IndexerDefinition indexerDefinition) { - var existingInstance = _indexers.Single(c => c.GetType().Name.Equals(indexerDefinition.Implementation, StringComparison.CurrentCultureIgnoreCase)); - var instance = (IIndexer)Activator.CreateInstance(existingInstance.GetType()); + var instance = _indexers.Single(c => c().GetType().Name.Equals(indexerDefinition.Implementation, StringComparison.InvariantCultureIgnoreCase))(); instance.InstanceDefinition = indexerDefinition; - return instance; } @@ -93,11 +86,7 @@ namespace NzbDrone.Core.Indexers if (!All().Any()) { - var definitions = _indexers.SelectMany(delegate(IIndexer indexer) - { - return indexer.DefaultDefinitions; - }); - + var definitions = _indexers.SelectMany(indexer => indexer().DefaultDefinitions); _indexerRepository.InsertMany(definitions.ToList()); } } diff --git a/NzbDrone.Core/Indexers/NzbClub/NzbClub.cs b/NzbDrone.Core/Indexers/NzbClub/NzbClub.cs index a9dc270f6..34d4a0aa8 100644 --- a/NzbDrone.Core/Indexers/NzbClub/NzbClub.cs +++ b/NzbDrone.Core/Indexers/NzbClub/NzbClub.cs @@ -10,6 +10,14 @@ namespace NzbDrone.Core.Indexers.NzbClub get { return "NzbClub"; } } + public override IParseFeed Parser + { + get + { + return new NzbClubParser(); + } + } + public override IEnumerable RecentFeed { get diff --git a/NzbDrone.Core/Indexers/NzbClub/NzbClubParser.cs b/NzbDrone.Core/Indexers/NzbClub/NzbClubParser.cs index d45ce8332..46d40d887 100644 --- a/NzbDrone.Core/Indexers/NzbClub/NzbClubParser.cs +++ b/NzbDrone.Core/Indexers/NzbClub/NzbClubParser.cs @@ -1,8 +1,6 @@ using System; using System.ServiceModel.Syndication; using System.Text.RegularExpressions; -using NzbDrone.Core.Model; -using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Indexers.NzbClub @@ -13,7 +11,7 @@ namespace NzbDrone.Core.Indexers.NzbClub { 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); } diff --git a/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj b/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj index dd8a4ed5c..fa149038b 100644 --- a/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj +++ b/NzbDrone.Integration.Test/NzbDrone.Integration.Test.csproj @@ -71,6 +71,7 @@ + diff --git a/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs b/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs new file mode 100644 index 000000000..ed21746db --- /dev/null +++ b/NzbDrone.Integration.Test/QualityProfileIntegrationTest.cs @@ -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(); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs b/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs index 3ddae09c7..8a8d04d7f 100644 --- a/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs +++ b/NzbDrone.Integration.Test/RootFolderIntegrationTest.cs @@ -26,32 +26,6 @@ namespace NzbDrone.Integration.Test 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.All().Should().BeEmpty();