From e67c64536df98e2b909dea461a7a452de978f096 Mon Sep 17 00:00:00 2001 From: Jendrik Weise Date: Sun, 27 Aug 2023 07:09:03 +0200 Subject: [PATCH] Add some tests, fix some minor issues --- .../ParserTests/LanguageParserFixture.cs | 36 +++++++++++++++++++ .../Extras/Subtitles/SubtitleService.cs | 1 - src/NzbDrone.Core/Parser/LanguageParser.cs | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs index 42d06dc4c..f3dc3a4d8 100644 --- a/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/LanguageParserFixture.cs @@ -1,8 +1,12 @@ +using System; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Core.Datastore; using NzbDrone.Core.Languages; +using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Parser; using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; namespace NzbDrone.Core.Test.ParserTests { @@ -428,5 +432,37 @@ namespace NzbDrone.Core.Test.ParserTests result.Languages.Should().Contain(Language.Original); result.Languages.Should().Contain(Language.English); } + + [TestCase("Name (2020) - S01E20 - [AAC 2.0].testtitle.default.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.testtitle.forced.ass", "Name (2020)/Season 1/Name (2020).mkv")] + public void should_parse_title_and_tags(string postTitle, string episodeFilePath) + { + var episode = new Episode + { + EpisodeFile = new LazyLoaded(new EpisodeFile + { + RelativePath = episodeFilePath + }) + }; + var (languageTags, title) = LanguageParser.ParseLanguageTagsAndTitle(postTitle, episode); + languageTags.Should().BeEquivalentTo(new[] { "default", "forced" }); + title.Should().BeEquivalentTo("testtitle"); + } + + [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.forced.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].default.ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + [TestCase("Name (2020) - S01E20 - [AAC 2.0].ass", "Name (2020)/Season 1/Name (2020) - S01E20 - [AAC 2.0].mkv")] + public void should_not_parse_false_title(string postTitle, string episodeFilePath) + { + var episode = new Episode + { + EpisodeFile = new LazyLoaded(new EpisodeFile + { + RelativePath = episodeFilePath + }) + }; + Assert.Throws(() => LanguageParser.ParseLanguageTagsAndTitle(postTitle, episode)); + } } } diff --git a/src/NzbDrone.Core/Extras/Subtitles/SubtitleService.cs b/src/NzbDrone.Core/Extras/Subtitles/SubtitleService.cs index 59cca6020..085fb10bc 100644 --- a/src/NzbDrone.Core/Extras/Subtitles/SubtitleService.cs +++ b/src/NzbDrone.Core/Extras/Subtitles/SubtitleService.cs @@ -243,7 +243,6 @@ namespace NzbDrone.Core.Extras.Subtitles suffixBuilder.Append(" - "); suffixBuilder.Append(copy); } - } else if (multipleCopies) { diff --git a/src/NzbDrone.Core/Parser/LanguageParser.cs b/src/NzbDrone.Core/Parser/LanguageParser.cs index 8175e79d8..7f4874a6c 100644 --- a/src/NzbDrone.Core/Parser/LanguageParser.cs +++ b/src/NzbDrone.Core/Parser/LanguageParser.cs @@ -31,7 +31,7 @@ namespace NzbDrone.Core.Parser private static readonly Regex SubtitleLanguageRegex = new Regex(".+?([-_. ]((?[a-z]{2,3})|(?full|forced|foreign|default|cc|psdh|sdh)))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private static readonly Regex SubtitleLanguageTitleRegex = new Regex(".+?(\\.((?[a-z]{2,3})|(?full|forced|foreign|default|cc|psdh|sdh)))*(\\.(?[^.]*))??(\\.((?<iso_code>[a-z]{2,3})|(?<tags2>full|forced|foreign|default|cc|psdh|sdh)))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly Regex SubtitleLanguageTitleRegex = new Regex(".+?(\\.((?<iso_code>[a-z]{2,3})|(?<tags1>full|forced|foreign|default|cc|psdh|sdh)))*\\.(?<title>[^.]*)(\\.((?<iso_code>[a-z]{2,3})|(?<tags2>full|forced|foreign|default|cc|psdh|sdh)))*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); public static List<Language> ParseLanguages(string title) {