private void ValidateExtensionsJsonRecursive()

in FunctionsSdkE2ETests/FunctionsSdkE2ETests/E2ETests.cs [221:252]


        private void ValidateExtensionsJsonRecursive(string startingDir, int expectedCount, string expectedFolder, params Func<JToken, bool>[] extensionValidators)
        {
            // Check all extensions.json
            IEnumerable<string> extensionsFiles = Directory.EnumerateFiles(Path.Combine(startingDir), "extensions.json", new EnumerationOptions { RecurseSubdirectories = true });

            Assert.Equal(expectedCount, extensionsFiles.Count());

            foreach (string file in extensionsFiles)
            {
                Assert.True(Path.GetDirectoryName(file).EndsWith(expectedFolder, StringComparison.OrdinalIgnoreCase), $"'{file}' is not in the '{expectedFolder}' folder");

                JObject actualJson = JObject.Parse(File.ReadAllText(file));

                JToken[] extensionsArray = actualJson["extensions"]
                    .AsEnumerable()
                    .OrderBy(p => p["name"])
                    .ToArray();

                string createErrorMessage()
                {
                    return $"File: {file} | Actual: {actualJson}";
                }

                Assert.True(extensionValidators.Length == extensionsArray.Length, $"Incorrect number of validators ({extensionValidators.Length}) | {createErrorMessage()}");

                for (int i = 0; i < extensionValidators.Length; i++)
                {
                    JToken extension = extensionsArray[i];
                    Assert.True(extensionValidators[i](extension), $"Failed validator for {extension} | {createErrorMessage()}");
                }
            }
        }