// create text report for v1 execution known issues private static void KnownIssuesTextReport(Versions version, Languages language, IssueType issueType) { if (language != Languages.CSharp) { throw new NotImplementedException(); } var issues = GetKnownIssues(version, language, issueType); var lang = language.AsString(); var documentationLinks = TestDataGenerator.GetDocumentationLinks(version, language); var testNameSuffix = $"{lang}-{version}-{issueType.Suffix()}"; var unreferencedIssues = new HashSet <string>(); var reportEntries = new List <ReportEntry>(); foreach (KeyValuePair <string, KnownIssue> kv in issues) { var testName = kv.Key; var knownIssue = kv.Value; var documentationLinkLookupKey = testName.Replace(testNameSuffix, $"{lang}-snippets.md"); if (!documentationLinks.ContainsKey(documentationLinkLookupKey)) { unreferencedIssues.Add(testName); } else { var documentationLink = documentationLinks[documentationLinkLookupKey]; reportEntries.Add(new ReportEntry ( testName, documentationLink, knownIssue )); } } if (unreferencedIssues.Count > 0) { var message = "There are known issue entries which are not referenced in the documentation," + " please make sure that you have the latest changes from docs repo" + " and remove the following from known issues list:" + $"{Environment.NewLine}{string.Join(Environment.NewLine, unreferencedIssues)}"; throw new InvalidDataException(message); } var fileName = $"{version}-{language.AsString()}-{issueType.LowerName()}-known-issues.md"; WriteReportEntriesToFile(fileName, reportEntries); }
/// <summary> /// Generates a dictionary mapping from snippet file name to documentation page listing the snippet. /// </summary> /// <param name="version">Docs version (e.g. V1, Beta)</param> /// <returns>Dictionary holding the mapping from snippet file name to documentation page listing the snippet.</returns> public static Dictionary <string, string> GetDocumentationLinks(Versions version, Languages language) { var documentationLinks = new Dictionary <string, string>(); var documentationDirectory = GraphDocsDirectory.GetDocumentationDirectory(version); var files = Directory.GetFiles(documentationDirectory); var languageName = language.AsString(); var SnippetLinkPattern = @$ "includes\/snippets\/{languageName}\/(.*)\-{languageName}\-snippets\.md"; var SnippetLinkRegex = new Regex(SnippetLinkPattern, RegexOptions.Compiled); foreach (var file in files) { var content = File.ReadAllText(file); var fileName = Path.GetFileNameWithoutExtension(file); var docsLink = $"https://docs.microsoft.com/en-us/graph/api/{fileName}?view=graph-rest-{new VersionString(version).DocsUrlSegment()}&tabs={languageName}"; var match = SnippetLinkRegex.Match(content); while (match.Success) { documentationLinks[$"{match.Groups[1].Value}-{languageName}-snippets.md"] = docsLink; match = match.NextMatch(); } } return(documentationLinks); }
private static Dictionary <string, KnownIssue> GetKnownIssues(Versions version, Languages language, IssueType issueType) { var lang = language.AsString(); var testNameSuffix = $"{lang}-{version}-{issueType.Suffix()}"; return((issueType switch { IssueType.Execution => CSharpKnownIssues.GetCSharpExecutionKnownIssues(version), IssueType.Compilation => KnownIssues.GetCompilationKnownIssues(language, version), _ => throw new ArgumentException($"Unknown issue type: {issueType}") }).Where(kv => kv.Key.EndsWith(testNameSuffix)).ToDictionary(kv => kv.Key, kv => kv.Value));
/// <summary> /// Sets snippets directory only once and refers to the string if it is already set /// Assumes that default "git clone <remote-reference>" command is used, in other words, /// the repo is always in microsoft-graph-docs folder under RootDirectory defined above /// </summary> /// <param name="version">Docs version (e.g. V1 or Beta)</param> /// <returns> /// C# snippets directory /// </returns> public static string GetSnippetsDirectory(Versions version, Languages language) { if (SnippetsDirectory is object) { return(SnippetsDirectory); } var msGraphDocsRepoLocation = TestsSetup.Config.Value.DocsRepoCheckoutDirectory; SnippetsDirectory = Path.Join(msGraphDocsRepoLocation, $@"microsoft-graph-docs{Path.DirectorySeparatorChar}api-reference{Path.DirectorySeparatorChar}{new VersionString(version)}{Path.DirectorySeparatorChar}includes{Path.DirectorySeparatorChar}snippets{Path.DirectorySeparatorChar}{language.AsString()}"); return(SnippetsDirectory); }