diff --git a/src/Bicep.Cli.IntegrationTests/Bicep.Cli.IntegrationTests.csproj b/src/Bicep.Cli.IntegrationTests/Bicep.Cli.IntegrationTests.csproj
index a769458fdd0..6974ba1ac86 100644
--- a/src/Bicep.Cli.IntegrationTests/Bicep.Cli.IntegrationTests.csproj
+++ b/src/Bicep.Cli.IntegrationTests/Bicep.Cli.IntegrationTests.csproj
@@ -18,12 +18,14 @@
+
+
diff --git a/src/Bicep.Cli.IntegrationTests/BuildCommandTests.cs b/src/Bicep.Cli.IntegrationTests/BuildCommandTests.cs
index ee788628d8b..6d3fd0f8632 100644
--- a/src/Bicep.Cli.IntegrationTests/BuildCommandTests.cs
+++ b/src/Bicep.Cli.IntegrationTests/BuildCommandTests.cs
@@ -342,8 +342,7 @@ public async Task Build_Invalid_SingleFile_ShouldFail_WithExpectedErrorMessage(D
{
var outputDirectory = dataSet.SaveFilesToTestDirectory(TestContext);
var bicepFilePath = Path.Combine(outputDirectory, DataSet.TestFileMain);
- var defaultSettings = CreateDefaultSettings();
- var diagnostics = await GetAllDiagnostics(bicepFilePath, defaultSettings.ClientFactory, defaultSettings.TemplateSpecRepositoryFactory);
+ var diagnostics = await GetAllDiagnostics(bicepFilePath, InvocationSettings.Default.ClientFactory, InvocationSettings.Default.TemplateSpecRepositoryFactory);
var (output, error, result) = await Bicep("build", bicepFilePath);
@@ -367,8 +366,7 @@ public async Task Build_Invalid_SingleFile_ToStdOut_ShouldFail_WithExpectedError
result.Should().Be(1);
output.Should().BeEmpty();
- var defaultSettings = CreateDefaultSettings();
- var diagnostics = await GetAllDiagnostics(bicepFilePath, defaultSettings.ClientFactory, defaultSettings.TemplateSpecRepositoryFactory);
+ var diagnostics = await GetAllDiagnostics(bicepFilePath, InvocationSettings.Default.ClientFactory, InvocationSettings.Default.TemplateSpecRepositoryFactory);
error.Should().ContainAll(diagnostics);
}
diff --git a/src/Bicep.Cli.IntegrationTests/BuildParamsCommandTests.cs b/src/Bicep.Cli.IntegrationTests/BuildParamsCommandTests.cs
index fe23dabe174..293edfa1159 100644
--- a/src/Bicep.Cli.IntegrationTests/BuildParamsCommandTests.cs
+++ b/src/Bicep.Cli.IntegrationTests/BuildParamsCommandTests.cs
@@ -29,7 +29,7 @@ namespace Bicep.Cli.IntegrationTests
public class BuildParamsCommandTests : TestBase
{
private InvocationSettings Settings
- => CreateDefaultSettings() with
+ => new()
{
Environment = TestEnvironment.Create(
("stringEnvVariableName", "test"),
diff --git a/src/Bicep.Cli.IntegrationTests/LintCommandTests.cs b/src/Bicep.Cli.IntegrationTests/LintCommandTests.cs
index ea7a92d33b1..44754785c78 100644
--- a/src/Bicep.Cli.IntegrationTests/LintCommandTests.cs
+++ b/src/Bicep.Cli.IntegrationTests/LintCommandTests.cs
@@ -13,7 +13,13 @@
using Microsoft.CodeAnalysis.Sarif;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.WindowsAzure.ResourceStack.Common.Json;
+using Microsoft.Extensions.DependencyInjection;
using Moq;
+using Bicep.Core.Registry.PublicRegistry;
+using System.Collections.Immutable;
+using System.Diagnostics;
+using Bicep.Cli.UnitTests;
+using FileSystem = System.IO.Abstractions.FileSystem;
namespace Bicep.Cli.IntegrationTests;
@@ -154,8 +160,7 @@ public async Task Lint_Invalid_SingleFile_ShouldFail_WithExpectedErrorMessage(Da
{
var outputDirectory = dataSet.SaveFilesToTestDirectory(TestContext);
var bicepFilePath = Path.Combine(outputDirectory, DataSet.TestFileMain);
- var defaultSettings = CreateDefaultSettings();
- var diagnostics = await GetAllDiagnostics(bicepFilePath, defaultSettings.ClientFactory, defaultSettings.TemplateSpecRepositoryFactory);
+ var diagnostics = await GetAllDiagnostics(bicepFilePath, InvocationSettings.Default.ClientFactory, InvocationSettings.Default.TemplateSpecRepositoryFactory, InvocationSettings.Default.ModuleMetadataClient);
var (output, error, result) = await Bicep("lint", bicepFilePath);
@@ -173,8 +178,10 @@ public async Task Lint_WithEmptyBicepConfig_ShouldProduceConfigurationError()
string testOutputPath = FileHelper.GetUniqueTestOutputPath(TestContext);
var inputFile = FileHelper.SaveResultFile(TestContext, "main.bicep", DataSets.Empty.Bicep, testOutputPath);
var configurationPath = FileHelper.SaveResultFile(TestContext, "bicepconfig.json", string.Empty, testOutputPath);
+ var settings = new InvocationSettings() { ModuleMetadataClient = PublicRegistryModuleMetadataClientMock.CreateToThrow(new Exception("unit test failed: shouldn't call this")).Object };
+
+ var (output, error, result) = await Bicep(settings, "lint", inputFile);
- var (output, error, result) = await Bicep("lint", inputFile);
result.Should().Be(1);
output.Should().BeEmpty();
@@ -254,7 +261,6 @@ public async Task Lint_with_sarif_diagnostics_format_should_output_valid_sarif()
sarifLog.Runs[0].Results[0].RuleId.Should().Be("no-unused-params");
sarifLog.Runs[0].Results[0].Message.Text.Should().Contain("is declared but never used");
}
-
private static IEnumerable
diff --git a/src/Bicep.Core.UnitTests/BicepTestConstants.cs b/src/Bicep.Core.UnitTests/BicepTestConstants.cs
index e8aefa939e1..e2fe151545d 100644
--- a/src/Bicep.Core.UnitTests/BicepTestConstants.cs
+++ b/src/Bicep.Core.UnitTests/BicepTestConstants.cs
@@ -13,6 +13,7 @@
using Bicep.Core.Json;
using Bicep.Core.Registry;
using Bicep.Core.Registry.Oci;
+using Bicep.Core.Registry.PublicRegistry;
using Bicep.Core.Semantics.Namespaces;
using Bicep.Core.TypeSystem;
using Bicep.Core.TypeSystem.Providers;
@@ -54,7 +55,7 @@ public static class BicepTestConstants
public static readonly ITemplateSpecRepositoryFactory TemplateSpecRepositoryFactory = StrictMock.Of().Object;
// Linter rules added to this list will be automatically disabled for most tests.
- public static readonly string[] NonStableAnalyzerRules = [UseRecentApiVersionRule.Code];
+ public static readonly string[] NonStableAnalyzerRules = [UseRecentApiVersionRule.Code, UseRecentModuleVersionsRule.Code];
public static readonly RootConfiguration BuiltInConfigurationWithAllAnalyzersDisabled = IConfigurationManager.GetBuiltInConfiguration().WithAllAnalyzersDisabled();
public static readonly RootConfiguration BuiltInConfigurationWithStableAnalyzers = IConfigurationManager.GetBuiltInConfiguration().WithAllAnalyzers().WithAnalyzersDisabled(NonStableAnalyzerRules);
@@ -67,9 +68,11 @@ public static class BicepTestConstants
public static readonly IServiceProvider EmptyServiceProvider = new Mock(MockBehavior.Loose).Object;
- public static readonly IArtifactRegistryProvider RegistryProvider = new DefaultArtifactRegistryProvider(EmptyServiceProvider, FileResolver, FileSystem, ClientFactory, TemplateSpecRepositoryFactory, FeatureProviderFactory, BuiltInOnlyConfigurationManager);
+ public static IArtifactRegistryProvider CreateRegistryProvider(IServiceProvider services) =>
+ new DefaultArtifactRegistryProvider(services, FileResolver, FileSystem, ClientFactory, TemplateSpecRepositoryFactory, FeatureProviderFactory, BuiltInOnlyConfigurationManager);
- public static readonly IModuleDispatcher ModuleDispatcher = new ModuleDispatcher(RegistryProvider, IConfigurationManager.WithStaticConfiguration(BuiltInConfiguration));
+ public static IModuleDispatcher CreateModuleDispatcher(IServiceProvider services) =>
+ new ModuleDispatcher(CreateRegistryProvider(services), IConfigurationManager.WithStaticConfiguration(BuiltInConfiguration));
public static readonly NamespaceResolver DefaultNamespaceResolver = NamespaceResolver.Create([
new("az", AzNamespaceType.Create("az", ResourceScope.ResourceGroup, AzNamespaceType.BuiltInTypeProvider, BicepSourceFileKind.BicepFile), null),
@@ -77,7 +80,7 @@ public static class BicepTestConstants
]);
// By default turns off only problematic analyzers
- public static readonly LinterAnalyzer LinterAnalyzer = new();
+ public static readonly LinterAnalyzer LinterAnalyzer = new(EmptyServiceProvider);
public static IEnvironment EmptyEnvironment = new TestEnvironment(ImmutableDictionary.Empty);
diff --git a/src/Bicep.Core.UnitTests/Configuration/BicepConfigSchemaTests.cs b/src/Bicep.Core.UnitTests/Configuration/BicepConfigSchemaTests.cs
index 5a2e0433454..ad77c6c36cd 100644
--- a/src/Bicep.Core.UnitTests/Configuration/BicepConfigSchemaTests.cs
+++ b/src/Bicep.Core.UnitTests/Configuration/BicepConfigSchemaTests.cs
@@ -30,7 +30,7 @@ public class RuleAndSchemaTestDataAttribute : Attribute, ITestDataSource
{
public IEnumerable