diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 8ad0e40c0..7deabbaa6 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -338,6 +338,7 @@ + diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/RequiresEpisodeTitleFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/RequiresEpisodeTitleFixture.cs index 3837c29b5..e4d0b96ba 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/RequiresEpisodeTitleFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/RequiresEpisodeTitleFixture.cs @@ -1,11 +1,9 @@ -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using FizzWare.NBuilder; using FluentAssertions; using NUnit.Framework; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Organizer; -using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesTitleFirstCharcterFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesTitleFirstCharcterFixture.cs new file mode 100644 index 000000000..944ec8dee --- /dev/null +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesTitleFirstCharcterFixture.cs @@ -0,0 +1,56 @@ +using System.Linq; +using FizzWare.NBuilder; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Organizer; +using NzbDrone.Core.Qualities; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests +{ + [TestFixture] + public class SeriesTitleFirstCharcterFixture : CoreTest + { + private Series _series; + private NamingConfig _namingConfig; + + [SetUp] + public void Setup() + { + _series = Builder + .CreateNew() + .Build(); + + _namingConfig = NamingConfig.Default; + _namingConfig.RenameEpisodes = true; + + Mocker.GetMock() + .Setup(c => c.GetConfig()).Returns(_namingConfig); + + Mocker.GetMock() + .Setup(v => v.Get(Moq.It.IsAny())) + .Returns(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v)); + } + + [TestCase("The Mist", "M\\The Mist")] + [TestCase("A", "A\\A")] + [TestCase("30 Rock", "3\\30 Rock")] + public void should_get_expected_folder_name_back(string title, string expected) + { + _series.Title = title; + _namingConfig.SeriesFolderFormat = "{Series TitleFirstCharacter}\\{Series Title}"; + + Subject.GetSeriesFolder(_series).Should().Be(expected); + } + + [Test] + public void should_be_able_to_use_lower_case_first_character() + { + _series.Title = "Westworld"; + _namingConfig.SeriesFolderFormat = "{series titlefirstcharacter}\\{series title}"; + + Subject.GetSeriesFolder(_series).Should().Be("w\\westworld"); + } + } +} diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index d73319dbe..f96633d1e 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -235,7 +235,8 @@ namespace NzbDrone.Core.Organizer AddSeriesTokens(tokenHandlers, series); AddIdTokens(tokenHandlers, series); - return CleanFolderName(ReplaceTokens(namingConfig.SeriesFolderFormat, tokenHandlers, namingConfig)); + var folderName = ReplaceTokens(namingConfig.SeriesFolderFormat, tokenHandlers, namingConfig); + return CleanFolderName(folderName); } public string GetSeasonFolder(Series series, int seasonNumber, NamingConfig namingConfig = null) @@ -251,7 +252,8 @@ namespace NzbDrone.Core.Organizer AddIdTokens(tokenHandlers, series); AddSeasonTokens(tokenHandlers, seasonNumber); - return CleanFolderName(ReplaceTokens(namingConfig.SeasonFolderFormat, tokenHandlers, namingConfig)); + var folderName = ReplaceTokens(namingConfig.SeasonFolderFormat, tokenHandlers, namingConfig); + return CleanFolderName(folderName); } public static string CleanTitle(string title) @@ -341,6 +343,7 @@ namespace NzbDrone.Core.Organizer tokenHandlers["{Series TitleThe}"] = m => TitleThe(series.Title); tokenHandlers["{Series TitleYear}"] = m => TitleYear(series.Title, series.Year); tokenHandlers["{Series TitleTheYear}"] = m => TitleYear(TitleThe(series.Title), series.Year); + tokenHandlers["{Series TitleFirstCharacter}"] = m => TitleThe(series.Title).Substring(0, 1).FirstCharToUpper(); } private string AddSeasonEpisodeNumberingTokens(string pattern, Dictionary> tokenHandlers, List episodes, NamingConfig namingConfig)