using System.Collections.Generic; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Profiles.Releases; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Music; namespace NzbDrone.Core.Test.DecisionEngineTests { [TestFixture] public class ReleaseRestrictionsSpecificationFixture : CoreTest { private RemoteAlbum _remoteAlbum; [SetUp] public void Setup() { _remoteAlbum = new RemoteAlbum { Artist = new Artist { Tags = new HashSet() }, Release = new ReleaseInfo { Title = "Dexter.S08E01.EDITED.WEBRip.x264-KYR" } }; Mocker.SetConstant(Mocker.Resolve()); } private void GivenRestictions(string required, string ignored) { Mocker.GetMock() .Setup(s => s.AllForTags(It.IsAny>())) .Returns(new List { new ReleaseProfile() { Required = required, Ignored = ignored } }); } [Test] public void should_be_true_when_restrictions_are_empty() { Mocker.GetMock() .Setup(s => s.AllForTags(It.IsAny>())) .Returns(new List()); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); } [Test] public void should_be_true_when_title_contains_one_required_term() { GivenRestictions("WEBRip", null); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); } [Test] public void should_be_false_when_title_does_not_contain_any_required_terms() { GivenRestictions("doesnt,exist", null); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); } [Test] public void should_be_true_when_title_does_not_contain_any_ignored_terms() { GivenRestictions(null, "ignored"); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); } [Test] public void should_be_false_when_title_contains_one_anded_ignored_terms() { GivenRestictions(null, "edited"); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); } [TestCase("EdiTED")] [TestCase("webrip")] [TestCase("X264")] [TestCase("X264,NOTTHERE")] public void should_ignore_case_when_matching_required(string required) { GivenRestictions(required, null); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeTrue(); } [TestCase("EdiTED")] [TestCase("webrip")] [TestCase("X264")] [TestCase("X264,NOTTHERE")] public void should_ignore_case_when_matching_ignored(string ignored) { GivenRestictions(null, ignored); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); } [Test] public void should_be_false_when_release_contains_one_restricted_word_and_one_required_word() { _remoteAlbum.Release.Title = "[ www.Speed.cd ] - Katy Perry - Witness (2017) MP3 [320 kbps] "; Mocker.GetMock() .Setup(s => s.AllForTags(It.IsAny>())) .Returns(new List { new ReleaseProfile { Required = "320", Ignored = "www.Speed.cd" } }); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().BeFalse(); } [TestCase("/WEB/", true)] [TestCase("/WEB\b/", false)] [TestCase("/WEb/", false)] [TestCase(@"/\.WEB/", true)] public void should_match_perl_regex(string pattern, bool expected) { GivenRestictions(pattern, null); Subject.IsSatisfiedBy(_remoteAlbum, null).Accepted.Should().Be(expected); } } }