File: Utils\SdkInstallHelperTests.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.Telemetry;
using Aspire.Cli.Tests.Telemetry;
using Aspire.Cli.Tests.TestServices;
using Aspire.Cli.Utils;
 
namespace Aspire.Cli.Tests.Utils;
 
public class SdkInstallHelperTests
{
    [Fact]
    public async Task EnsureSdkInstalledAsync_WhenSdkAlreadyInstalled_RecordsAlreadyInstalledTelemetry()
    {
        using var fixture = new TelemetryFixture();
 
        var sdkInstaller = new TestDotNetSdkInstaller
        {
            CheckAsyncCallback = _ => (true, "9.0.302", "9.0.302")
        };
 
        var interactionService = new TestConsoleInteractionService();
 
        var result = await SdkInstallHelper.EnsureSdkInstalledAsync(
            sdkInstaller,
            interactionService,
            fixture.Telemetry);
 
        Assert.True(result);
        Assert.NotNull(fixture.CapturedActivity);
 
        var tags = fixture.CapturedActivity.Tags.ToDictionary(t => t.Key, t => t.Value);
        Assert.Equal("9.0.302", tags[TelemetryConstants.Tags.SdkDetectedVersion]);
        Assert.Equal("9.0.302", tags[TelemetryConstants.Tags.SdkMinimumRequiredVersion]);
        Assert.Equal("already_installed", tags[TelemetryConstants.Tags.SdkCheckResult]);
    }
 
    [Fact]
    public async Task EnsureSdkInstalledAsync_WhenSdkMissing_RecordsNotInstalledTelemetry()
    {
        using var fixture = new TelemetryFixture();
 
        var sdkInstaller = new TestDotNetSdkInstaller
        {
            CheckAsyncCallback = _ => (false, null, "9.0.302")
        };
 
        var interactionService = new TestConsoleInteractionService();
 
        var result = await SdkInstallHelper.EnsureSdkInstalledAsync(
            sdkInstaller,
            interactionService,
            fixture.Telemetry);
 
        Assert.False(result);
        Assert.NotNull(fixture.CapturedActivity);
 
        var tags = fixture.CapturedActivity.Tags.ToDictionary(t => t.Key, t => t.Value);
        Assert.Equal("(not found)", tags[TelemetryConstants.Tags.SdkDetectedVersion]);
        Assert.Equal("9.0.302", tags[TelemetryConstants.Tags.SdkMinimumRequiredVersion]);
        Assert.Equal("not_installed", tags[TelemetryConstants.Tags.SdkCheckResult]);
    }
 
    [Fact]
    public async Task EnsureSdkInstalledAsync_WhenSdkMissing_DisplaysError()
    {
        using var fixture = new TelemetryFixture();
 
        var sdkInstaller = new TestDotNetSdkInstaller
        {
            CheckAsyncCallback = _ => (false, "8.0.100", "9.0.302")
        };
 
        var interactionService = new TestConsoleInteractionService();
 
        var result = await SdkInstallHelper.EnsureSdkInstalledAsync(
            sdkInstaller,
            interactionService,
            fixture.Telemetry);
 
        Assert.False(result);
        Assert.NotNull(fixture.CapturedActivity);
 
        var tags = fixture.CapturedActivity.Tags.ToDictionary(t => t.Key, t => t.Value);
        Assert.Equal("8.0.100", tags[TelemetryConstants.Tags.SdkDetectedVersion]);
        Assert.Equal("9.0.302", tags[TelemetryConstants.Tags.SdkMinimumRequiredVersion]);
        Assert.Equal("not_installed", tags[TelemetryConstants.Tags.SdkCheckResult]);
    }
}