diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index dce67f8c2..84a4070be 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -328,6 +328,7 @@ + diff --git a/src/NzbDrone.Core.Test/Profiles/Releases/PreferredWordService/GetMatchingPreferredWordsFixture.cs b/src/NzbDrone.Core.Test/Profiles/Releases/PreferredWordService/GetMatchingPreferredWordsFixture.cs new file mode 100644 index 000000000..d261bf18a --- /dev/null +++ b/src/NzbDrone.Core.Test/Profiles/Releases/PreferredWordService/GetMatchingPreferredWordsFixture.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using System.Linq; +using FizzWare.NBuilder; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Profiles.Releases; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Music; + +namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService +{ + [TestFixture] + public class GetMatchingPreferredWordsFixture : CoreTest + { + private Artist _artist = null; + private List _releaseProfiles = null; + private string _title = "Artist.Name-Album.Name-2018-Flac-Vinyl-Lidarr"; + + [SetUp] + public void Setup() + { + _artist = Builder.CreateNew() + .With(s => s.Tags = new HashSet(new[] { 1, 2 })) + .Build(); + + _releaseProfiles = new List(); + + _releaseProfiles.Add(new ReleaseProfile + { + Preferred = new List> + { + new KeyValuePair("Vinyl", 5), + new KeyValuePair("CD", -10) + } + }); + + + Mocker.GetMock() + .Setup(s => s.MatchingTerm(It.IsAny(), _title)) + .Returns((term, title) => title.Contains(term) ? term : null); + } + + + private void GivenReleaseProfile() + { + Mocker.GetMock() + .Setup(s => s.AllForTags(It.IsAny>())) + .Returns(_releaseProfiles); + } + + [Test] + public void should_return_empty_list_when_there_are_no_release_profiles() + { + Mocker.GetMock() + .Setup(s => s.AllForTags(It.IsAny>())) + .Returns(new List()); + + Subject.GetMatchingPreferredWords(_artist, _title).Should().BeEmpty(); + } + + [Test] + public void should_return_empty_list_when_there_are_no_matching_preferred_words() + { + _releaseProfiles.First().Preferred.RemoveAt(0); + GivenReleaseProfile(); + + Subject.GetMatchingPreferredWords(_artist, _title).Should().BeEmpty(); + } + + [Test] + public void should_return_list_of_matching_terms() + { + GivenReleaseProfile(); + + Subject.GetMatchingPreferredWords(_artist, _title).Should().Contain(new[] { "Vinyl" }); + } + } +} diff --git a/src/NzbDrone.Core/Profiles/Releases/TermMatchers/CaseInsensitiveTermMatcher.cs b/src/NzbDrone.Core/Profiles/Releases/TermMatchers/CaseInsensitiveTermMatcher.cs index 7a6eb9224..d8fa49120 100644 --- a/src/NzbDrone.Core/Profiles/Releases/TermMatchers/CaseInsensitiveTermMatcher.cs +++ b/src/NzbDrone.Core/Profiles/Releases/TermMatchers/CaseInsensitiveTermMatcher.cs @@ -16,7 +16,12 @@ namespace NzbDrone.Core.Profiles.Releases.TermMatchers public string MatchingTerm(string value) { - return _term; + if (value.ToLowerInvariant().Contains(_term)) + { + return _term; + } + + return null; } } }