using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Indexers; using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.Translations; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.IndexerSearchTests { public class ReleaseSearchServiceFixture : CoreTest { private Mock _mockIndexer; private Movie _movie; [SetUp] public void SetUp() { _mockIndexer = Mocker.GetMock(); _mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = 1 }); _mockIndexer.SetupGet(s => s.SupportsSearch).Returns(true); Mocker.GetMock() .Setup(s => s.AutomaticSearchEnabled(true)) .Returns(new List { _mockIndexer.Object }); Mocker.GetMock() .Setup(s => s.GetSearchDecision(It.IsAny>(), It.IsAny())) .Returns(new List()); _movie = Builder.CreateNew() .With(v => v.Monitored = true) .Build(); Mocker.GetMock() .Setup(v => v.GetMovie(_movie.Id)) .Returns(_movie); Mocker.GetMock() .Setup(s => s.GetAllTranslationsForMovie(It.IsAny())) .Returns(new List()); } private List WatchForSearchCriteria() { var result = new List(); _mockIndexer.Setup(v => v.Fetch(It.IsAny())) .Callback(s => result.Add(s)) .Returns(new List()); return result; } [Test] public void Tags_IndexerTags_MovieNoTags_IndexerNotIncluded() { _mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = 1, Tags = new HashSet { 3 } }); var allCriteria = WatchForSearchCriteria(); Subject.MovieSearch(_movie, true, false); var criteria = allCriteria.OfType().ToList(); criteria.Count.Should().Be(0); } [Test] public void Tags_IndexerNoTags_MovieTags_IndexerIncluded() { _mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = 1 }); _movie = Builder.CreateNew() .With(v => v.Monitored = true) .With(v => v.Tags = new HashSet { 3 }) .Build(); Mocker.GetMock() .Setup(v => v.GetMovie(_movie.Id)) .Returns(_movie); var allCriteria = WatchForSearchCriteria(); Subject.MovieSearch(_movie, true, false); var criteria = allCriteria.OfType().ToList(); criteria.Count.Should().Be(1); } [Test] public void Tags_IndexerAndMovieTagsMatch_IndexerIncluded() { _mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = 1, Tags = new HashSet { 1, 2, 3 } }); _movie = Builder.CreateNew() .With(v => v.Monitored = true) .With(v => v.Tags = new HashSet { 3, 4, 5 }) .Build(); Mocker.GetMock() .Setup(v => v.GetMovie(_movie.Id)) .Returns(_movie); var allCriteria = WatchForSearchCriteria(); Subject.MovieSearch(_movie, true, false); var criteria = allCriteria.OfType().ToList(); criteria.Count.Should().Be(1); } [Test] public void Tags_IndexerAndMovieTagsMismatch_IndexerNotIncluded() { _mockIndexer.SetupGet(s => s.Definition).Returns(new IndexerDefinition { Id = 1, Tags = new HashSet { 1, 2, 3 } }); _movie = Builder.CreateNew() .With(v => v.Monitored = true) .With(v => v.Tags = new HashSet { 4, 5, 6 }) .Build(); Mocker.GetMock() .Setup(v => v.GetMovie(_movie.Id)) .Returns(_movie); var allCriteria = WatchForSearchCriteria(); Subject.MovieSearch(_movie, true, false); var criteria = allCriteria.OfType().ToList(); criteria.Count.Should().Be(0); } } }