using System.Collections.Generic; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.Indexers; using NzbDrone.Core.Indexers.Newznab; using NzbDrone.Core.Indexers.NzbClub; using NzbDrone.Core.Indexers.Omgwtfnzbs; using NzbDrone.Core.Indexers.Wombles; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.IndexerTests { public class IndexerServiceFixture : DbTest<IndexerService, IndexerDefinition> { private List<IIndexer> _indexers; [SetUp] public void Setup() { _indexers = new List<IIndexer>(); _indexers.Add(new Newznab()); _indexers.Add(new NzbClub()); _indexers.Add(new Omgwtfnzbs()); _indexers.Add(new Wombles()); Mocker.SetConstant<IEnumerable<IIndexer>>(_indexers); } [Test] public void should_create_default_indexer_on_startup() { IList<IndexerDefinition> storedIndexers = null; Mocker.GetMock<IIndexerRepository>() .Setup(c => c.InsertMany(It.IsAny<IList<IndexerDefinition>>())) .Callback<IList<IndexerDefinition>>(indexers => storedIndexers = indexers); Subject.Handle(new ApplicationStartedEvent()); storedIndexers.Should().NotBeEmpty(); storedIndexers.Select(c => c.Name).Should().OnlyHaveUniqueItems(); storedIndexers.Select(c => c.Enable).Should().NotBeEmpty(); storedIndexers.Select(c => c.Implementation).Should().NotContainNulls(); } [Test] public void getting_list_of_indexers() { Mocker.SetConstant<IIndexerRepository>(Mocker.Resolve<IndexerRepository>()); Subject.Handle(new ApplicationStartedEvent()); var indexers = Subject.All().ToList(); indexers.Should().NotBeEmpty(); indexers.Should().NotContain(c => c.Settings == null); indexers.Should().NotContain(c => c.Instance == null); indexers.Should().NotContain(c => c.Name == null); indexers.Select(c => c.Name).Should().OnlyHaveUniqueItems(); indexers.Select(c => c.Instance).Should().OnlyHaveUniqueItems(); } [Test] public void should_remove_missing_indexers_on_startup() { var repo = Mocker.Resolve<IndexerRepository>(); Mocker.SetConstant<IIndexerRepository>(repo); var existingIndexers = Builder<IndexerDefinition>.CreateNew().BuildNew(); repo.Insert(existingIndexers); Subject.Handle(new ApplicationStartedEvent()); AllStoredModels.Should().NotContain(c => c.Id == existingIndexers.Id); } } }