| File: Utils\DeprecatedWorkloadCheckTests.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Cli.Utils.EnvironmentChecker; namespace Aspire.Cli.Tests.Utils; public class DeprecatedWorkloadCheckTests { [Fact] public void IsAspireWorkloadInstalled_WithAspireWorkload_ReturnsTrue() { var output = """ Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- aspire 8.0.0/8.0.100 SDK 8.0.100 maui 8.0.0/8.0.100 SDK 8.0.100 Use `dotnet workload search` to find additional workloads to install. """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.True(result); } [Fact] public void IsAspireWorkloadInstalled_WithoutAspireWorkload_ReturnsFalse() { var output = """ Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- maui 8.0.0/8.0.100 SDK 8.0.100 android 33.0.0/8.0.100 SDK 8.0.100 Use `dotnet workload search` to find additional workloads to install. """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_WithNoWorkloads_ReturnsFalse() { var output = """ Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- Use `dotnet workload search` to find additional workloads to install. """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_WithEmptyOutput_ReturnsFalse() { var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(""); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_WithNullOutput_ReturnsFalse() { var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(null!); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_WithWhitespaceOutput_ReturnsFalse() { var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(" \n \n "); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_IsCaseInsensitive() { var output = """ Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- ASPIRE 8.0.0/8.0.100 SDK 8.0.100 """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.True(result); } [Fact] public void IsAspireWorkloadInstalled_WithAspireAsPartOfOtherName_ReturnsFalse() { // Ensure we only match the exact workload name, not partial matches var output = """ Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- aspire-components 8.0.0/8.0.100 SDK 8.0.100 """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.False(result); } [Fact] public void IsAspireWorkloadInstalled_WithTabSeparatedColumns_ReturnsTrue() { var output = "Installed Workload Id\tManifest Version\tInstallation Source\n" + "------------------------------------------------------------\n" + "aspire\t8.0.0/8.0.100\tSDK 8.0.100\n"; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.True(result); } /// <summary> /// This test validates the exact format from 'dotnet workload list' command. /// If this test fails, the output format may have changed and the parser needs updating. /// </summary> [Fact] public void IsAspireWorkloadInstalled_WithRealWorldFormat_ParsesCorrectly() { // This is the actual output format from 'dotnet workload list' as of .NET 8/9/10 // The format is: WorkloadId (whitespace) ManifestVersion (whitespace) InstallationSource // If Microsoft changes this format, this test should fail and alert us to update the parser var realWorldOutput = """ Workload version: 10.0.101.1 Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- aspire 8.2.2/8.0.100 SDK 8.0.400 Use `dotnet workload search` to find additional workloads to install. """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(realWorldOutput); Assert.True(result); } /// <summary> /// Validates that newer format with 'Workload version:' header line is handled. /// </summary> [Fact] public void IsAspireWorkloadInstalled_WithWorkloadVersionHeader_ParsesCorrectly() { var output = """ Workload version: 8.0.100-manifests.abcd1234 Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- aspire 8.0.0/8.0.100 SDK 8.0.100 """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.True(result); } /// <summary> /// Validates that header and metadata lines are properly skipped and don't cause false positives. /// </summary> [Fact] public void IsAspireWorkloadInstalled_WithNoAspireWorkload_SkipsHeaderLines() { // This tests that "Workload version:", "Installed Workload Id", "Use `dotnet...", // and separator lines are all properly skipped when aspire is NOT installed var output = """ Workload version: 10.0.101.1 Installed Workload Id Manifest Version Installation Source -------------------------------------------------------------------- maui 8.0.0/8.0.100 SDK 8.0.100 Use `dotnet workload search` to find additional workloads to install. """; var result = DeprecatedWorkloadCheck.IsAspireWorkloadInstalled(output); Assert.False(result); } }