| File: Configuration\KnownFeaturesTests.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.Packaging; using Aspire.Cli.Tests.TestServices; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging.Abstractions; namespace Aspire.Cli.Tests.Configuration; public class KnownFeaturesTests { [Theory] [InlineData(false, null, false)] [InlineData(true, null, true)] [InlineData(false, true, true)] [InlineData(true, true, true)] [InlineData(false, false, false)] [InlineData(true, false, false)] public void HostingIntegrations_ProjectSettingOverridesCliScope(bool cliEnabled, bool? projectEnabled, bool expected) { var config = new Aspire.Cli.Configuration.AspireConfigFile(); if (projectEnabled is { } enabled) { config.Features = new Dictionary<string, bool> { [KnownFeatures.ExperimentalHostingIntegrations] = enabled }; } var features = new TestFeatures().SetFeature(KnownFeatures.ExperimentalHostingIntegrations, cliEnabled); Assert.Equal(expected, KnownFeatures.IsHostingIntegrationsEnabled(features, config)); } [Theory] [InlineData(null, false)] [InlineData("false", false)] [InlineData("true", true)] public void ExperimentalHostingIntegrations_DefaultsOffAndHonorsConfiguration(string? enabled, bool expected) { var metadata = KnownFeatures.GetFeatureMetadata(KnownFeatures.ExperimentalHostingIntegrations); Assert.NotNull(metadata); Assert.False(metadata.DefaultValue); var configuration = new ConfigurationBuilder().AddInMemoryCollection(new Dictionary<string, string?> { ["features:experimentalHostingIntegrations"] = enabled }).Build(); var features = new Aspire.Cli.Configuration.Features(configuration, NullLogger<Aspire.Cli.Configuration.Features>.Instance); Assert.Equal(expected, features.IsFeatureEnabled(metadata.Name, metadata.DefaultValue)); } [Fact] public void IsStagingChannelEnabled_ReturnsTrue_WhenChannelIsStaging() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: PackageChannelNames.Staging); Assert.True(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_ReturnsTrue_WhenFeatureFlagIsTrue() { var features = new TestFeatures().SetFeature(KnownFeatures.StagingChannelEnabled, true); var configuration = BuildConfiguration(channel: PackageChannelNames.Stable); Assert.True(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_ReturnsTrue_WhenBothChannelIsStagingAndFlagIsTrue() { var features = new TestFeatures().SetFeature(KnownFeatures.StagingChannelEnabled, true); var configuration = BuildConfiguration(channel: PackageChannelNames.Staging); Assert.True(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_ReturnsFalse_WhenChannelIsNotStagingAndFlagNotSet() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: PackageChannelNames.Stable); Assert.False(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_ReturnsFalse_WhenChannelIsNullAndFlagNotSet() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: null); Assert.False(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_IsCaseInsensitive_ForChannelValue() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: "Staging"); Assert.True(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_IsCaseInsensitive_ForUppercaseChannelValue() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: "STAGING"); Assert.True(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } [Fact] public void IsStagingChannelEnabled_ReturnsFalse_WhenChannelIsDailyAndFlagNotSet() { var features = new TestFeatures(); var configuration = BuildConfiguration(channel: PackageChannelNames.Daily); Assert.False(KnownFeatures.IsStagingChannelEnabled(features, configuration)); } private static IConfiguration BuildConfiguration(string? channel) { var configData = new Dictionary<string, string?>(); if (channel is not null) { configData["channel"] = channel; } return new ConfigurationBuilder() .AddInMemoryCollection(configData) .Build(); } }