-
Notifications
You must be signed in to change notification settings - Fork 813
Add Azure portal link for Resource Group in deploy pipeline summary #14434
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
e3abda5
efb3bbd
a708fa6
90fab63
513ebb3
5a823b8
78e16b9
c7c2591
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,141 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System.Text; | ||
| using Aspire.Cli.Utils; | ||
| using Spectre.Console; | ||
|
|
||
| namespace Aspire.Cli.Tests.Utils; | ||
|
|
||
| public class ConsoleActivityLoggerTests | ||
| { | ||
| [Fact] | ||
| public void WriteSummary_WithMarkdownLinkInPipelineSummary_RendersClickableLink() | ||
| { | ||
| var output = new StringBuilder(); | ||
| var console = AnsiConsole.Create(new AnsiConsoleSettings | ||
| { | ||
| Ansi = AnsiSupport.Yes, | ||
| ColorSystem = ColorSystemSupport.TrueColor, | ||
| Out = new AnsiConsoleOutput(new StringWriter(output)) | ||
| }); | ||
|
|
||
| var hostEnvironment = TestHelpers.CreateInteractiveHostEnvironment(); | ||
| var logger = new ConsoleActivityLogger(console, hostEnvironment, forceColor: true); | ||
|
|
||
| var summary = new List<KeyValuePair<string, string>> | ||
| { | ||
| new("☁️ Target", "Azure"), | ||
| new("📦 Resource Group", "VNetTest5 [link](https://portal.azure.com/#/resource/subscriptions/sub-id/resourceGroups/VNetTest5/overview)"), | ||
| new("🔑 Subscription", "sub-id"), | ||
| new("🌐 Location", "eastus"), | ||
| }; | ||
|
|
||
| logger.SetFinalResult(true, summary); | ||
| logger.WriteSummary(); | ||
|
|
||
| var result = output.ToString(); | ||
|
|
||
| // Verify the markdown link was converted to a Spectre link | ||
| Assert.Contains("VNetTest5", result); | ||
|
|
||
| const string expectedUrl = | ||
| @"https://portal\.azure\.com/#/resource/subscriptions/sub-id/resourceGroups/VNetTest5/overview"; | ||
| string hyperlinkPattern = | ||
| $@"\u001b\]8;[^;]*;{expectedUrl}\u001b\\.*link.*\u001b\]8;;\u001b\\"; | ||
| Assert.Matches(hyperlinkPattern, result); | ||
| } | ||
|
|
||
| [Fact] | ||
| public void WriteSummary_WithMarkdownLinkInPipelineSummary_NoColor_RendersPlainTextWithUrl() | ||
| { | ||
| var output = new StringBuilder(); | ||
| var console = AnsiConsole.Create(new AnsiConsoleSettings | ||
| { | ||
| Ansi = AnsiSupport.No, | ||
| ColorSystem = ColorSystemSupport.NoColors, | ||
| Out = new AnsiConsoleOutput(new StringWriter(output)) | ||
| }); | ||
|
|
||
| var hostEnvironment = TestHelpers.CreateNonInteractiveHostEnvironment(); | ||
| var logger = new ConsoleActivityLogger(console, hostEnvironment, forceColor: false); | ||
|
|
||
| var portalUrl = "https://portal.azure.com/"; | ||
| var summary = new List<KeyValuePair<string, string>> | ||
| { | ||
| new("📦 Resource Group", $"VNetTest5 [link]({portalUrl})"), | ||
| }; | ||
|
|
||
| logger.SetFinalResult(true, summary); | ||
| logger.WriteSummary(); | ||
|
|
||
| var result = output.ToString(); | ||
|
|
||
| // When color is disabled, markdown links should be converted to plain text: text (url) | ||
| Assert.Contains($"VNetTest5 link ({portalUrl})", result); | ||
| } | ||
|
|
||
| [Fact] | ||
| public void WriteSummary_WithMarkdownLinkInPipelineSummary_ColorWithoutInteractive_RendersPlainUrl() | ||
| { | ||
| var output = new StringBuilder(); | ||
| var console = AnsiConsole.Create(new AnsiConsoleSettings | ||
| { | ||
| Ansi = AnsiSupport.Yes, | ||
| ColorSystem = ColorSystemSupport.TrueColor, | ||
| Out = new AnsiConsoleOutput(new StringWriter(output)) | ||
| }); | ||
|
|
||
| // Non-interactive host but color enabled (e.g., CI environments with ANSI support) | ||
| var hostEnvironment = TestHelpers.CreateNonInteractiveHostEnvironment(); | ||
| var logger = new ConsoleActivityLogger(console, hostEnvironment, forceColor: true); | ||
|
|
||
| var portalUrl = "https://portal.azure.com/"; | ||
| var summary = new List<KeyValuePair<string, string>> | ||
| { | ||
| new("📦 Resource Group", $"VNetTest5 [link]({portalUrl})"), | ||
| }; | ||
|
|
||
| logger.SetFinalResult(true, summary); | ||
| logger.WriteSummary(); | ||
|
|
||
| var result = output.ToString(); | ||
|
|
||
| // When color is enabled but interactive output is not supported, | ||
| // HighlightMessage converts Spectre link markup to plain URLs | ||
| Assert.Contains("VNetTest5", result); | ||
| Assert.Contains(portalUrl, result); | ||
|
|
||
| // Should NOT contain the OSC 8 hyperlink escape sequence since we're non-interactive | ||
| Assert.DoesNotContain("\u001b]8;", result); | ||
| } | ||
|
|
||
| [Fact] | ||
| public void WriteSummary_WithPlainTextPipelineSummary_RendersCorrectly() | ||
| { | ||
| var output = new StringBuilder(); | ||
| var console = AnsiConsole.Create(new AnsiConsoleSettings | ||
| { | ||
| Ansi = AnsiSupport.Yes, | ||
| ColorSystem = ColorSystemSupport.TrueColor, | ||
| Out = new AnsiConsoleOutput(new StringWriter(output)) | ||
| }); | ||
|
|
||
| var hostEnvironment = TestHelpers.CreateInteractiveHostEnvironment(); | ||
| var logger = new ConsoleActivityLogger(console, hostEnvironment, forceColor: true); | ||
|
|
||
| var summary = new List<KeyValuePair<string, string>> | ||
| { | ||
| new("☁️ Target", "Azure"), | ||
| new("🌐 Location", "eastus"), | ||
| }; | ||
|
|
||
| logger.SetFinalResult(true, summary); | ||
| logger.WriteSummary(); | ||
|
|
||
| var result = output.ToString(); | ||
|
|
||
| Assert.Contains("Azure", result); | ||
| Assert.Contains("eastus", result); | ||
| } | ||
| } | ||
|
||
Uh oh!
There was an error while loading. Please reload this page.