Пример #1
0
    // 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);
    }
Пример #2
0
    /// <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);
    }
Пример #3
0
    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));
Пример #4
0
    /// <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);
    }