Exemple #1
0
    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);
            }
        }
Exemple #4
0
    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");
    }
Exemple #5
0
    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);
    }
Exemple #6
0
    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);
            }
        }