public void FilterRules_ValidConfig_RulesFiltered()

in src/Analyzer.Cli.FunctionalTests/CommandLineParserTests.cs [330:375]


        public void FilterRules_ValidConfig_RulesFiltered(bool isBicep, string configName, bool specifyInCommand)
        {
            var extension = isBicep ? "bicep" : "json";
            var templatePath = GetFilePath($"AppServicesLogs-Failures.{extension}");
            var args = new string[] { "analyze-template", templatePath };

            // Analyze template without filtering rules to verify there is a failure.
            var result = _commandLineParser.InvokeCommandLineAPIAsync(args);
            Assert.AreEqual((int)ExitCode.Violation, result.Result);

            // Run again with rule filtered out, verify it passes (config was loaded).
            try
            {
                File.WriteAllText(configName,
                    JObject.FromObject(
                        new ConfigurationDefinition
                        {
                            InclusionsConfigurationDefinition = new()
                            {
                                // Use a non-existent rule id so all rules are filtered out.
                                Ids = new() { "NonRuleId" }
                            }
                        })
                    .ToString());

                if (specifyInCommand)
                {
                    args = args.Concat(new[] { "--config-file-path", configName }).ToArray();
                }

                using StringWriter outputWriter = new();
                Console.SetOut(outputWriter);

                result = _commandLineParser.InvokeCommandLineAPIAsync(args);

                var cliConsoleOutput = outputWriter.ToString();

                // All JSON rules are filtered out; PSRule rules are currently not filtered by the config file and should appear in the output
                Assert.IsTrue(!cliConsoleOutput.Contains("TA-"));
                Assert.AreEqual((int)ExitCode.Success, result.Result);
            }
            finally
            {
                File.Delete(configName);
            }
        }