From 5b425b35931c7fc00035256d088a3d43177558eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 22:55:23 +0000 Subject: [PATCH 1/2] Initial plan From 53054e647d5dbb3a0a618bc39df00d669c22fb80 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:01:31 +0000 Subject: [PATCH 2/2] Fix config list --all not working when no config is set Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/56df1d59-b00d-43c5-ad6e-a501718d413c Co-authored-by: maddymontaquila <12660687+maddymontaquila@users.noreply.github.com> --- src/Aspire.Cli/Commands/ConfigCommand.cs | 56 +++++++++++-------- .../Commands/ConfigCommandTests.cs | 44 +++++++++++++++ 2 files changed, 77 insertions(+), 23 deletions(-) diff --git a/src/Aspire.Cli/Commands/ConfigCommand.cs b/src/Aspire.Cli/Commands/ConfigCommand.cs index 793b4a512f4..66b52483fa5 100644 --- a/src/Aspire.Cli/Commands/ConfigCommand.cs +++ b/src/Aspire.Cli/Commands/ConfigCommand.cs @@ -239,36 +239,46 @@ private async Task ExecuteAsync(bool showAll, CancellationToken cancellatio var localConfig = await ConfigurationService.GetLocalConfigurationAsync(cancellationToken); var globalConfig = await ConfigurationService.GetGlobalConfigurationAsync(cancellationToken); + var featurePrefix = $"{KnownFeatures.FeaturePrefix}."; + // Check if we have any configuration at all if (localConfig.Count == 0 && globalConfig.Count == 0) { InteractionService.DisplayMessage(KnownEmojis.Information, ConfigCommandStrings.NoConfigurationValuesFound); - return ExitCodeConstants.Success; + + if (!showAll) + { + // Show hint about --all flag when there's no config and user didn't pass --all + InteractionService.DisplayMarkupLine($" [dim]{ConfigCommandStrings.ListCommand_AllFeaturesHint.EscapeMarkup()}[/]"); + return ExitCodeConstants.Success; + } + + // showAll=true: fall through to show available features below } + else + { + // Compute max column widths across both tables for consistent alignment + var keyWidth = MaxWidth(ConfigCommandStrings.HeaderKey, localConfig.Keys, globalConfig.Keys); + var valueWidth = MaxWidth(ConfigCommandStrings.HeaderValue, localConfig.Values, globalConfig.Values); + + // Display Local Configuration + RenderConfigTable( + ConfigCommandStrings.LocalConfigurationHeader, + localConfig, + ConfigCommandStrings.NoLocalConfigurationFound, + keyWidth, + valueWidth); - var featurePrefix = $"{KnownFeatures.FeaturePrefix}."; + InteractionService.DisplayEmptyLine(); - // Compute max column widths across both tables for consistent alignment - var keyWidth = MaxWidth(ConfigCommandStrings.HeaderKey, localConfig.Keys, globalConfig.Keys); - var valueWidth = MaxWidth(ConfigCommandStrings.HeaderValue, localConfig.Values, globalConfig.Values); - - // Display Local Configuration - RenderConfigTable( - ConfigCommandStrings.LocalConfigurationHeader, - localConfig, - ConfigCommandStrings.NoLocalConfigurationFound, - keyWidth, - valueWidth); - - InteractionService.DisplayEmptyLine(); - - // Display Global Configuration - RenderConfigTable( - ConfigCommandStrings.GlobalConfigurationHeader, - globalConfig, - ConfigCommandStrings.NoGlobalConfigurationFound, - keyWidth, - valueWidth); + // Display Global Configuration + RenderConfigTable( + ConfigCommandStrings.GlobalConfigurationHeader, + globalConfig, + ConfigCommandStrings.NoGlobalConfigurationFound, + keyWidth, + valueWidth); + } // Display Available Features var allConfiguredFeatures = localConfig.Concat(globalConfig) diff --git a/tests/Aspire.Cli.Tests/Commands/ConfigCommandTests.cs b/tests/Aspire.Cli.Tests/Commands/ConfigCommandTests.cs index c528c181db8..bbc82eb3262 100644 --- a/tests/Aspire.Cli.Tests/Commands/ConfigCommandTests.cs +++ b/tests/Aspire.Cli.Tests/Commands/ConfigCommandTests.cs @@ -359,6 +359,50 @@ public async Task ConfigListCommand_WithAllFlag_ShowsFeatureDetails() Assert.Contains("default:", output); } + [Fact] + public async Task ConfigListCommand_WithoutAllFlag_NoConfig_ShowsHintAboutAllFlag() + { + using var workspace = TemporaryWorkspace.Create(outputHelper); + var outputWriter = new TestOutputTextWriter(outputHelper); + var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => + { + options.OutputTextWriter = outputWriter; + }); + var provider = services.BuildServiceProvider(); + + var command = provider.GetRequiredService(); + + // List without --all and with no config set + var listResult = command.Parse("config list"); + var listExitCode = await listResult.InvokeAsync().DefaultTimeout(); + Assert.Equal(0, listExitCode); + + var output = string.Join("\n", outputWriter.Logs); + Assert.Contains("--all", output); + } + + [Fact] + public async Task ConfigListCommand_WithAllFlag_NoConfig_ShowsAvailableFeatures() + { + using var workspace = TemporaryWorkspace.Create(outputHelper); + var outputWriter = new TestOutputTextWriter(outputHelper); + var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => + { + options.OutputTextWriter = outputWriter; + }); + var provider = services.BuildServiceProvider(); + + var command = provider.GetRequiredService(); + + // List with --all and with no config set + var listResult = command.Parse("config list --all"); + var listExitCode = await listResult.InvokeAsync().DefaultTimeout(); + Assert.Equal(0, listExitCode); + + var output = string.Join("\n", outputWriter.Logs); + Assert.Contains("default:", output); + } + [Fact] public async Task FeatureFlags_WhenSetToTrue_ReturnsTrue() {