Validation and integration test for SeriesFolderFormat

This commit is contained in:
Mark McDowall 2014-01-17 10:43:15 -08:00
parent 43a2f39106
commit 7bb8a9db5f
4 changed files with 21 additions and 1 deletions

View File

@ -4,7 +4,6 @@ using System.Linq;
using FluentValidation;
using FluentValidation.Results;
using Nancy.Responses;
using NzbDrone.Api.REST;
using NzbDrone.Core.Organizer;
using Nancy.ModelBinding;
using NzbDrone.Api.Mapping;
@ -39,6 +38,7 @@ namespace NzbDrone.Api.Config
SharedValidator.RuleFor(c => c.MultiEpisodeStyle).InclusiveBetween(0, 3);
SharedValidator.RuleFor(c => c.StandardEpisodeFormat).ValidEpisodeFormat();
SharedValidator.RuleFor(c => c.DailyEpisodeFormat).ValidDailyEpisodeFormat();
SharedValidator.RuleFor(c => c.SeriesFolderFormat).ValidSeriesFolderFormat();
}
private void UpdateNamingConfig(NamingConfigResource resource)

View File

@ -39,6 +39,9 @@ namespace NzbDrone.Core.Organizer
public static readonly Regex AirDateRegex = new Regex(@"\{Air(\s|\W|_)Date\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static readonly Regex SeriesTitleRegex = new Regex(@"(?<token>\{(?:Series)(?<separator>\s|\.|-|_)Title\})",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
public FileNameBuilder(INamingConfigService namingConfigService,
ICacheManger cacheManger,
Logger logger)

View File

@ -17,6 +17,12 @@ namespace NzbDrone.Core.Organizer
ruleBuilder.SetValidator(new NotEmptyValidator(null));
return ruleBuilder.SetValidator(new ValidDailyEpisodeFormatValidator());
}
public static IRuleBuilderOptions<T, string> ValidSeriesFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
{
ruleBuilder.SetValidator(new NotEmptyValidator(null));
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.SeriesTitleRegex)).WithMessage("Must contain series title");
}
}
public class ValidDailyEpisodeFormatValidator : PropertyValidator

View File

@ -96,5 +96,16 @@ namespace NzbDrone.Integration.Test
var errors = NamingConfig.InvalidPut(config);
errors.Should().NotBeEmpty();
}
[Test]
public void should_get_bad_request_if_series_folder_format_does_not_contain_series_title()
{
var config = NamingConfig.GetSingle();
config.RenameEpisodes = true;
config.SeriesFolderFormat = "This and That";
var errors = NamingConfig.InvalidPut(config);
errors.Should().NotBeEmpty();
}
}
}