/// <summary> /// Print a list of the methods (request/responses) discovered in the documentation to the console. /// </summary> /// <param name="options"></param> /// <param name="docset"></param> /// <returns></returns> private static async Task PrintMethodsAsync(DocSetOptions options, DocSet docset) { docset = docset ?? await GetDocSetAsync(options); if (null == docset) { return; } FancyConsole.WriteLine(); FancyConsole.WriteLine(FancyConsole.ConsoleHeaderColor, "Defined methods:"); FancyConsole.WriteLine(); foreach (var method in docset.Methods) { FancyConsole.WriteLine(FancyConsole.ConsoleHeaderColor, "Method '{0}' in file '{1}'", method.Identifier, method.SourceFile.DisplayName); var requestMetadata = options.EnableVerboseOutput ? JsonConvert.SerializeObject(method.RequestMetadata) : string.Empty; FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleSubheaderColor, "Request: {0}", requestMetadata); FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleCodeColor, method.Request); if (options.EnableVerboseOutput) { FancyConsole.WriteLine(); var responseMetadata = JsonConvert.SerializeObject(method.ExpectedResponseMetadata); FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleSubheaderColor, "Expected Response: {0}", responseMetadata); FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleCodeColor, method.ExpectedResponse); FancyConsole.WriteLine(); } FancyConsole.WriteLine(); } }
/// <summary> /// Print a list of the resources detected in the documentation set to the console. /// </summary> /// <param name="options"></param> /// <param name="docset"></param> /// <returns></returns> private static async Task PrintResourcesAsync(DocSetOptions options, DocSet docset) { docset = docset ?? await GetDocSetAsync(options); if (null == docset) { return; } FancyConsole.WriteLine(); FancyConsole.WriteLine(FancyConsole.ConsoleHeaderColor, "Defined resources:"); FancyConsole.WriteLine(); var sortedResources = docset.Resources.OrderBy(x => x.ResourceType); foreach (var resource in sortedResources) { if (options.EnableVerboseOutput) { string metadata = JsonConvert.SerializeObject(resource.Metadata); FancyConsole.Write(" "); FancyConsole.Write(FancyConsole.ConsoleHeaderColor, resource.ResourceType); FancyConsole.WriteLine(" flags: {1}", resource.ResourceType, metadata); } else { FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleHeaderColor, resource.ResourceType); } FancyConsole.WriteLineIndented(" ", FancyConsole.ConsoleCodeColor, resource.JsonExample); FancyConsole.WriteLine(); } }
/// <summary> /// Write the results of a test to the output console. /// </summary> /// <param name="method"></param> /// <param name="account"></param> /// <param name="results"></param> /// <param name="options"></param> private static void PrintResultsToConsole(MethodDefinition method, IServiceAccount account, ValidationResults output, CheckServiceOptions options) { // Only allow one thread at a time to write to the console so we don't interleave our results. lock (typeof(Program)) { FancyConsole.WriteLine( FancyConsole.ConsoleHeaderColor, "Testing method {0} with account {1}", method.Identifier, account.Name); foreach (var scenario in output.Results) { if (scenario.Errors.Count > 0) { FancyConsole.WriteLineIndented( " ", FancyConsole.ConsoleSubheaderColor, "Scenario: {0}", scenario.Name); foreach (var message in scenario.Errors) { if (options.EnableVerboseOutput || message.IsWarningOrError) { FancyConsole.WriteLineIndented( " ", FancyConsole.ConsoleDefaultColor, message.ErrorText); } } if (options.SilenceWarnings && scenario.Outcome == ValidationOutcome.Warning) { scenario.Outcome = ValidationOutcome.Passed; } FancyConsole.WriteLineIndented( " ", scenario.Outcome.ConsoleColor(), "Scenario finished with outcome: {0}. Duration: {1}", scenario.Outcome, scenario.Duration); } } FancyConsole.WriteLineIndented( " ", output.OverallOutcome.ConsoleColor(), "Method testing finished with overall outcome: {0}", output.OverallOutcome); FancyConsole.WriteLine(); } }
/// <summary> /// Prints a formatted ValidationError object to the console. /// </summary> /// <param name="indent"></param> /// <param name="error"></param> internal static void WriteValidationError(string indent, ValidationError error) { ConsoleColor color; if (error.IsWarning) { color = FancyConsole.ConsoleWarningColor; } else if (error.IsError) { color = FancyConsole.ConsoleErrorColor; } else { color = FancyConsole.ConsoleDefaultColor; } FancyConsole.WriteLineIndented(indent, color, error.ErrorText); }
/// <summary> /// Prints a list of the documentation files in a docset to the console. /// </summary> /// <param name="options"></param> /// <param name="docset"></param> /// <returns></returns> private static async Task PrintFilesAsync(DocSetOptions options, DocSet docset) { docset = docset ?? await GetDocSetAsync(options); if (null == docset) { return; } if (null == docset) { return; } FancyConsole.WriteLine(); FancyConsole.WriteLine(FancyConsole.ConsoleHeaderColor, "Documentation files"); string format = null; if (options.EnableVerboseOutput) { format = "{1} (resources: {2}, methods: {3})"; } else { format = "{0} (r:{2}, m:{3})"; } foreach (var file in docset.Files) { ConsoleColor color = FancyConsole.ConsoleSuccessColor; if (file.Resources.Length == 0 && file.Requests.Length == 0) { color = FancyConsole.ConsoleWarningColor; } FancyConsole.WriteLineIndented(" ", color, format, file.DisplayName, file.FullPath, file.Resources.Length, file.Requests.Length); } }
private static async Task <bool> PublishDocumentationAsync(PublishOptions options) { var outputPath = options.OutputDirectory; FancyConsole.WriteLine("Publishing documentation to {0}", outputPath); DocSet docs = await GetDocSetAsync(options); if (null == docs) { return(false); } DocumentPublisher publisher = null; switch (options.Format) { case PublishOptions.PublishFormat.Markdown: publisher = new MarkdownPublisher(docs); break; case PublishOptions.PublishFormat.Html: publisher = new DocumentPublisherHtml(docs, options); break; case PublishOptions.PublishFormat.Mustache: publisher = new HtmlMustacheWriter(docs, options); break; case PublishOptions.PublishFormat.Swagger2: publisher = new SwaggerWriter(docs, "https://service.org") // TODO: Plumb in the base URL. { Title = options.Title, Description = options.Description, Version = options.Version }; break; case PublishOptions.PublishFormat.Outline: publisher = new OutlinePublisher(docs); break; default: FancyConsole.WriteLine( FancyConsole.ConsoleErrorColor, "Unsupported publishing format: {0}", options.Format); return(false); } FancyConsole.WriteLineIndented(" ", "Format: {0}", publisher.GetType().Name); publisher.VerboseLogging = options.EnableVerboseOutput; FancyConsole.WriteLine(); FancyConsole.WriteLine("Publishing content..."); publisher.NewMessage += publisher_NewMessage; try { await publisher.PublishToFolderAsync(outputPath); FancyConsole.WriteLine(FancyConsole.ConsoleSuccessColor, "Finished publishing documentation to: {0}", outputPath); } catch (Exception ex) { FancyConsole.WriteLine( FancyConsole.ConsoleErrorColor, "An error occured while publishing: {0}", ex.Message); FancyConsole.VerboseWriteLine(ex.ToString()); return(false); } return(true); }