public void Validation_fails_for_all_missing_required_properties() { // default construct which should yield default values (invalid) for all required properties var config = new SonarrConfiguration { // validation is only applied to actual release profile elements. Not if it's empty. ReleaseProfiles = new[] { new ReleaseProfileConfig() } }; var validator = _container.Resolve <IValidator <SonarrConfiguration> >(); var result = validator.Validate(config); var messages = new SonarrValidationMessages(); var expectedErrorMessageSubstrings = new[] { messages.ApiKey, messages.BaseUrl, messages.ReleaseProfileTrashIds }; result.IsValid.Should().BeFalse(); result.Errors.Select(e => e.ErrorMessage) .Should().BeEquivalentTo(expectedErrorMessageSubstrings); }
public Context() { var logger = new LoggerConfiguration() .WriteTo.TestCorrelator() .MinimumLevel.Debug() .CreateLogger(); Config = new SonarrConfiguration { ReleaseProfiles = new[] { new ReleaseProfileConfig() } }; GuideParser = new ReleaseProfileGuideParser(logger); }
public async Task Process(ISonarrCommand args, SonarrConfiguration config) { foreach (var profile in config.ReleaseProfiles) { Log.Information("Processing Release Profile: {ProfileName}", profile.Type); var markdown = await _parser.GetMarkdownData(profile.Type); var profiles = Utils.FilterProfiles(_parser.ParseMarkdown(profile, markdown)); if (args.Preview) { Utils.PrintTermsAndScores(profiles); continue; } await ProcessReleaseProfiles(profiles, profile); } }
public void ProcessReleaseProfile_SingleProfilePreview() { var context = new Context(); context.Parser.GetMarkdownData(ReleaseProfileType.Anime).Returns("theMarkdown"); var config = new SonarrConfiguration { ReleaseProfiles = new[] { new ReleaseProfileConfig { Type = ReleaseProfileType.Anime } } }; var logic = new ReleaseProfileUpdater(context.Logger, context.Parser, context.Api, context.Compatibility); logic.Process(false, config); context.Parser.Received().ParseMarkdown(config.ReleaseProfiles[0], "theMarkdown"); }
public async Task Process(bool isPreview, SonarrConfiguration config) { var profilesFromGuide = _guide.GetReleaseProfileData(); var filteredProfiles = new List <(ReleaseProfileData Profile, IReadOnlyCollection <string> Tags)>(); var filterer = new ReleaseProfileDataFilterer(_log); var configProfiles = config.ReleaseProfiles.SelectMany(x => x.TrashIds.Select(y => (TrashId: y, Config: x))); foreach (var(trashId, configProfile) in configProfiles) { // For each release profile specified in our YAML config, find the matching profile in the guide. var selectedProfile = profilesFromGuide.FirstOrDefault(x => x.TrashId.EqualsIgnoreCase(trashId)); if (selectedProfile is null) { _log.Warning("A release profile with Trash ID {TrashId} does not exist", trashId); continue; } _log.Debug("Found Release Profile: {ProfileName} ({TrashId})", selectedProfile.Name, selectedProfile.TrashId); if (configProfile.Filter != null) { _log.Debug("This profile will be filtered"); var newProfile = filterer.FilterProfile(selectedProfile, configProfile.Filter); if (newProfile is not null) { selectedProfile = newProfile; } } if (isPreview) { Utils.PrintTermsAndScores(selectedProfile); continue; } filteredProfiles.Add((selectedProfile, configProfile.Tags)); } await ProcessReleaseProfiles(filteredProfiles); }
public void Validation_fails_for_all_missing_required_properties() { // default construct which should yield default values (invalid) for all required properties var config = new SonarrConfiguration(); var validator = _container.Resolve <IValidator <SonarrConfiguration> >(); var result = validator.Validate(config); var expectedErrorMessageSubstrings = new[] { "Property 'base_url' is required", "Property 'api_key' is required", "'type' is required for 'release_profiles' elements" }; result.IsValid.Should().BeFalse(); result.Errors.Select(e => e.ErrorMessage).Should() .OnlyContain(x => expectedErrorMessageSubstrings.Any(x.Contains)); }
public async Task Process(bool isPreview, SonarrConfiguration config) { foreach (var profile in config.ReleaseProfiles) { Log.Information("Processing Release Profile: {ProfileName}", profile.Type); var markdown = await _parser.GetMarkdownData(profile.Type); var profiles = Utils.FilterProfiles(_parser.ParseMarkdown(profile, markdown)); if (profile.Filter.IncludeOptional) { Log.Information("Configuration is set to allow optional terms to be synchronized"); } if (isPreview) { Utils.PrintTermsAndScores(profiles); continue; } await ProcessReleaseProfiles(profiles, profile); } }