using System.Collections.Generic; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.Datastore; using NzbDrone.Core.DecisionEngine.Specifications.RssSync; using NzbDrone.Core.Indexers; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Movies; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.DecisionEngineTests.RssSync { [TestFixture] public class IndexerTagSpecificationFixture : CoreTest { private IndexerTagSpecification _specification; private RemoteMovie _parseResultMulti; private IndexerDefinition _fakeIndexerDefinition; private Movie _fakeMovie; private ReleaseInfo _fakeRelease; [SetUp] public void Setup() { _fakeIndexerDefinition = new IndexerDefinition { Tags = new HashSet() }; Mocker .GetMock() .Setup(m => m.Get(It.IsAny())) .Throws(new ModelNotFoundException(typeof(IndexerDefinition), -1)); Mocker .GetMock() .Setup(m => m.Get(1)) .Returns(_fakeIndexerDefinition); _specification = Mocker.Resolve(); _fakeMovie = Builder.CreateNew() .With(c => c.Monitored = true) .With(c => c.Tags = new HashSet()) .Build(); _fakeRelease = new ReleaseInfo { IndexerId = 1 }; _parseResultMulti = new RemoteMovie { Movie = _fakeMovie, Release = _fakeRelease }; } [Test] public void indexer_and_movie_without_tags_should_return_true() { _fakeIndexerDefinition.Tags = new HashSet(); _fakeMovie.Tags = new HashSet(); _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria()).Accepted.Should().BeTrue(); } [Test] public void indexer_with_tags_movie_without_tags_should_return_false() { _fakeIndexerDefinition.Tags = new HashSet { 123 }; _fakeMovie.Tags = new HashSet(); _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria()).Accepted.Should().BeFalse(); } [Test] public void indexer_without_tags_movie_with_tags_should_return_true() { _fakeIndexerDefinition.Tags = new HashSet(); _fakeMovie.Tags = new HashSet { 123 }; _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria()).Accepted.Should().BeTrue(); } [Test] public void indexer_with_tags_movie_with_matching_tags_should_return_true() { _fakeIndexerDefinition.Tags = new HashSet { 123, 456 }; _fakeMovie.Tags = new HashSet { 123, 789 }; _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria()).Accepted.Should().BeTrue(); } [Test] public void indexer_with_tags_movie_with_different_tags_should_return_false() { _fakeIndexerDefinition.Tags = new HashSet { 456 }; _fakeMovie.Tags = new HashSet { 123, 789 }; _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria()).Accepted.Should().BeFalse(); } [Test] public void release_without_indexerid_should_return_true() { _fakeIndexerDefinition.Tags = new HashSet { 456 }; _fakeMovie.Tags = new HashSet { 123, 789 }; _fakeRelease.IndexerId = 0; _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria { MonitoredEpisodesOnly = true }).Accepted.Should().BeTrue(); } [Test] public void release_with_invalid_indexerid_should_return_true() { _fakeIndexerDefinition.Tags = new HashSet { 456 }; _fakeMovie.Tags = new HashSet { 123, 789 }; _fakeRelease.IndexerId = 2; _specification.IsSatisfiedBy(_parseResultMulti, new MovieSearchCriteria { MonitoredEpisodesOnly = true }).Accepted.Should().BeTrue(); } } }