diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs index 9b299aa89..1a1367f45 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs @@ -134,6 +134,35 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeFalse(); } + [Test] + public void should_be_rejected_if_file_and_folder_do_not_have_episodes_from_the_same_partial_season() + { + _localEpisode.FileEpisodeInfo.SeasonNumber = 2; + _localEpisode.FileEpisodeInfo.EpisodeNumbers = new[] { 1 }; + + _localEpisode.FolderEpisodeInfo.SeasonNumber = 1; + _localEpisode.FolderEpisodeInfo.EpisodeNumbers = new[] { 1, 2 }; + + _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01.720p.HDTV-Sonarr\S02E01.mkv".AsOsAgnostic(); + + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeFalse(); + } + + [Test] + public void should_be_accepted_if_file_and_folder_have_episodes_from_the_same_season() + { + _localEpisode.FileEpisodeInfo.SeasonNumber = 1; + _localEpisode.FileEpisodeInfo.EpisodeNumbers = new[] { 1 }; + + _localEpisode.FolderEpisodeInfo.FullSeason = true; + _localEpisode.FolderEpisodeInfo.SeasonNumber = 1; + _localEpisode.FolderEpisodeInfo.EpisodeNumbers = new[] { 1, 2 }; + + _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01.720p.HDTV-Sonarr\S01E01.mkv".AsOsAgnostic(); + + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); + } + [Test] public void should_be_accepted_if_both_file_and_folder_info_map_to_same_special() { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs index 199fe31fa..e390b37eb 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs @@ -48,6 +48,11 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications _logger.Debug("No file ParsedEpisodeInfo, skipping check"); return Decision.Accept(); } + + if (folderInfo.SeasonNumber != fileInfo.SeasonNumber) + { + return Decision.Reject("Season number {0} was unexpected considering the folder name {1}", fileInfo.SeasonNumber, folderInfo.ReleaseTitle); + } if (!folderInfo.EpisodeNumbers.Any()) { @@ -55,11 +60,6 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications return Decision.Accept(); } - if (folderInfo.SeasonNumber != fileInfo.SeasonNumber) - { - return Decision.Reject("Season number {0} was unexpected considering the folder name {1}", fileInfo.SeasonNumber, folderInfo.ReleaseTitle); - } - var unexpected = fileInfo.EpisodeNumbers.Where(f => !folderInfo.EpisodeNumbers.Contains(f)).ToList(); if (unexpected.Any())