using FluentAssertions; using NUnit.Framework; using NzbDrone.Core.Parser; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ParserTests { [TestFixture] public class NormalizeTitleFixture : CoreTest { [TestCase("Conan", "conan")] [TestCase("Castle (2009)", "castle2009")] [TestCase("Parenthood.2010", "parenthood2010")] [TestCase("Law_and_Order_SVU", "lawordersvu")] public void should_normalize_artist_title(string parsedArtistName, string artistName) { var result = parsedArtistName.CleanArtistName(); result.Should().Be(artistName); } [TestCase("CaPitAl", "capital")] [TestCase("peri.od", "period")] [TestCase("this.^&%^**$%@#$!That", "thisthat")] [TestCase("test/test", "testtest")] [TestCase("90210", "90210")] [TestCase("24", "24")] public void should_remove_special_characters_and_casing(string dirty, string clean) { var result = dirty.CleanArtistName(); result.Should().Be(clean); } [TestCase("the")] [TestCase("and")] [TestCase("or")] [TestCase("an")] [TestCase("of")] public void should_remove_common_words_from_middle_of_title(string word) { var dirtyFormat = new[] { "word.{0}.word", "word {0} word", "word-{0}-word" }; foreach (var s in dirtyFormat) { var dirty = string.Format(s, word); dirty.CleanArtistName().Should().Be("wordword"); } } [TestCase("the")] [TestCase("and")] [TestCase("or")] [TestCase("an")] [TestCase("of")] public void should_not_remove_common_words_from_end_of_title(string word) { var dirtyFormat = new[] { "word.word.{0}", "word-word-{0}", "word-word {0}" }; foreach (var s in dirtyFormat) { var dirty = string.Format(s, word); dirty.CleanArtistName().Should().Be("wordword" + word.ToLower()); } } [Test] public void should_remove_a_from_middle_of_title() { var dirtyFormat = new[] { "word.{0}.word", "word {0} word", "word-{0}-word", }; foreach (var s in dirtyFormat) { var dirty = string.Format(s, "a"); dirty.CleanArtistName().Should().Be("wordword"); } } [TestCase("the")] [TestCase("and")] [TestCase("or")] [TestCase("a")] [TestCase("an")] [TestCase("of")] public void should_not_remove_common_words_in_the_middle_of_word(string word) { var dirtyFormat = new[] { "word.{0}word", "word {0}word", "word-{0}word", "word{0}.word", "word{0}-word", "word{0}-word", }; foreach (var s in dirtyFormat) { var dirty = string.Format(s, word); dirty.CleanArtistName().Should().Be("word" + word.ToLower() + "word"); } } [TestCase("The Office", "theoffice")] [TestCase("The Tonight Show With Jay Leno", "thetonightshowwithjayleno")] [TestCase("The.Daily.Show", "thedailyshow")] public void should_not_remove_from_the_beginning_of_the_title(string parsedArtistName, string artistName) { var result = parsedArtistName.CleanArtistName(); result.Should().Be(artistName); } [TestCase("the")] [TestCase("and")] [TestCase("or")] [TestCase("a")] [TestCase("an")] [TestCase("of")] public void should_not_clean_word_from_beginning_of_string(string word) { var dirtyFormat = new[] { "{0}.word.word", "{0}-word-word", "{0} word word" }; foreach (var s in dirtyFormat) { var dirty = string.Format(s, word); dirty.CleanArtistName().Should().Be(word + "wordword"); } } [Test] public void should_not_clean_trailing_a() { "Tokyo Ghoul A".CleanArtistName().Should().Be("tokyoghoula"); } [TestCase("3%", "3percent")] [TestCase("Teen Top & 100% Outing Brothers", "teentop100percentoutingbrothers")] [TestCase("Big Jay Oakerson's What's Your F@%king Deal?!", "bigjayoakersonswhatsyourfkingdeal")] public void should_replace_percent_sign_with_percent_following_numbers(string input, string expected) { input.CleanArtistName().Should().Be(expected); } } }