Skip to content
14 changes: 7 additions & 7 deletions src/Bicep.LangServer.IntegrationTests/CompletionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2739,7 +2739,7 @@ func foo(innerVar string) string => '${outerVar|}'
[TestMethod]
public async Task Func_definition_lambda_completions_suggest_imported_variables()
{
var exportContent = """
var exportContent = """
@export()
var whatsup = 'Whatsup?'
""";
Expand Down Expand Up @@ -4297,15 +4297,15 @@ public async Task Public_module_version_completions(string inputWithCursors, Bic
first.SortText.Should().Be("0000");
first.Kind.Should().Be(CompletionItemKind.Snippet);
first.Detail.Should().Be("d1");
first.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help1)");
first.Documentation!.MarkupContent!.Value.Should().Be("**Full module path:** app/dapr-containerapp \n**Version:** 1.0.2 \n**Description:** d1 \n[View Documentation](contoso.com/help1)");
},
second =>
{
second.Label.Should().Be("1.0.1");
second.SortText.Should().Be("0001");
second.Kind.Should().Be(CompletionItemKind.Snippet);
second.Detail.Should().BeNull();
second.Documentation.Should().BeNull();
second.Documentation!.MarkupContent!.Value.Should().Be("**Full module path:** app/dapr-containerapp \n**Version:** 1.0.1 \n**Description:** N/A \n**Documentation:** N/A");
}
);
}
Expand Down Expand Up @@ -4370,15 +4370,15 @@ public async Task Private_module_version_completions(string inputWithCursors, Bi
first.SortText.Should().Be("0000");
first.Kind.Should().Be(CompletionItemKind.Snippet);
first.Detail.Should().Be("d101");
first.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help/d101.html)");
first.Documentation!.MarkupContent!.Value.Should().Be("**Full module path:** app/private-app \n**Version:** v101 \n**Description:** d101 \n[View Documentation](contoso.com/help/d101.html)");
},
second =>
{
second.Label.Should().Be("v100");
second.SortText.Should().Be("0001");
second.Kind.Should().Be(CompletionItemKind.Snippet);
second.Detail.Should().Be("d100");
second.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help/d100.html)");
second.Documentation!.MarkupContent!.Value.Should().Be("**Full module path:** app/private-app \n**Version:** v100 \n**Description:** d100 \n[View Documentation](contoso.com/help/d100.html)");
}
);
}
Expand All @@ -4402,7 +4402,7 @@ public async Task Public_registry_module_completions_support_prefix_matching(str
settingsProvider.Setup(x => x.GetSetting(LangServerConstants.GetAllAzureContainerRegistriesForCompletionsSetting)).Returns(false);

var publicModuleMetadataProvider = RegistryCatalogMocks.MockPublicMetadataProvider([
("bicep/abc/foo/bar", "d1", "contoso.com/help1", []),
("bicep/abc/foo/bar", "d1", "contoso.com/help1", []),
("bicep/abc/food/bar", "d2", "contoso.com/help2", []),
("bicep/abc/bar/bar", "d3", "contoso.com/help3", []),
]);
Expand Down Expand Up @@ -5833,7 +5833,7 @@ public async Task Readonly_required_properties_are_not_offered_as_completions()
name: 'foo'
|
}

output readOnlyRequired string = myRes.readOnlyRequired
""");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,10 @@ public async Task GetFilteredCompletions_WithPublicMcrModuleRegistryCompletionCo
c.InsertTextFormat.Should().Be(InsertTextFormat.Snippet);
c.InsertText.Should().BeNull();
c.Detail.Should().BeNull();
c.Documentation.Should().BeNull();
c.Documentation!.MarkupContent!.Value.Should().NotContain("**Display name:**");
c.Documentation.MarkupContent.Value.Should().Contain("**Full module path:** app/dapr-cntrapp1");
c.Documentation.MarkupContent.Value.Should().Contain("**Description:** N/A");
c.Documentation.MarkupContent.Value.Should().Contain("**Documentation:** N/A");
c.TextEdit!.TextEdit!.NewText.Should().Be(expectedCompletionText1);
c.TextEdit.TextEdit.Range.Start.Line.Should().Be(0);
c.TextEdit.TextEdit.Range.Start.Character.Should().Be(12);
Expand All @@ -541,7 +544,10 @@ public async Task GetFilteredCompletions_WithPublicMcrModuleRegistryCompletionCo
c.InsertTextFormat.Should().Be(InsertTextFormat.Snippet);
c.InsertText.Should().BeNull();
c.Detail.Should().Be("description2");
c.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help2)");
c.Documentation!.MarkupContent!.Value.Should().NotContain("**Display name:**");
c.Documentation.MarkupContent.Value.Should().Contain("**Full module path:** app/dapr-cntrapp2");
c.Documentation.MarkupContent.Value.Should().Contain("**Description:** description2");
c.Documentation.MarkupContent.Value.Should().Contain("[View Documentation](contoso.com/help2)");
c.TextEdit!.TextEdit!.NewText.Should().Be(expectedCompletionText2);
c.TextEdit.TextEdit.Range.Start.Line.Should().Be(0);
c.TextEdit.TextEdit.Range.Start.Character.Should().Be(12);
Expand All @@ -550,6 +556,43 @@ public async Task GetFilteredCompletions_WithPublicMcrModuleRegistryCompletionCo
});
}

[TestMethod]
public async Task GetFilteredCompletions_WithPublicAvmModulePathCompletions_UsesModuleDisplayNameForTooltipTitle()
{
var catalog = RegistryCatalogMocks.CreateCatalogWithMocks(
RegistryCatalogMocks.MockPublicMetadataProvider([
new("bicep/avm/ptn/ai-platform/baseline", "module description", "contoso.com/help", []),
])
);

var avmDisplayNameProviderMock = StrictMock.Of<IAvmModuleDisplayNameProvider>();
string? moduleDisplayName = "AI platform baseline";
avmDisplayNameProviderMock
.Setup(x => x.TryGetModuleDisplayName("bicep/avm/ptn/ai-platform/baseline", out moduleDisplayName))
.Returns(true);

var (completionContext, sourceFile) = GetBicepCompletionContext("module test 'br/public:avm/ptn/ai-platform/|'");
var moduleReferenceCompletionProvider = new ModuleReferenceCompletionProvider(
azureContainerRegistriesProvider,
catalog,
settingsProvider,
BicepTestConstants.CreateMockTelemetryProvider().Object,
avmDisplayNameProviderMock.Object);
var completions = await GetAndResolveCompletionItems(sourceFile, completionContext, moduleReferenceCompletionProvider);

completions.Should().SatisfyRespectively(
x =>
{
x.Label.Should().Be("avm/ptn/ai-platform/baseline");
x.Detail.Should().Be(moduleDisplayName);
x.Documentation!.MarkupContent!.Value.Should().NotContain("**Display name:**");
x.Documentation.MarkupContent.Value.Should().Contain("**Full module path:** avm/ptn/ai-platform/baseline");
x.Documentation.MarkupContent.Value.Should().Contain("**Description:** module description");
});

avmDisplayNameProviderMock.VerifyAll();
}

[DataTestMethod]
[DataRow("module test 'br:registry.contoso.io/bicep/|'", "bicep/whatever/abc/foo/bar", "'br:registry.contoso.io/bicep/whatever/abc/foo/bar:$0'")]
[DataRow("module test 'br:registry.contoso.io/bicep/|", "bicep/whatever/abc/foo/bar", "'br:registry.contoso.io/bicep/whatever/abc/foo/bar:$0'")]
Expand Down Expand Up @@ -600,7 +643,10 @@ public async Task GetFilteredCompletions_WithPrivateModulePathCompletions_Return
c.Label.Should().Be(expectedLabel);
c.InsertTextFormat.Should().Be(InsertTextFormat.Snippet);
c.Detail.Should().Be("d1");
c.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help1)");
c.Documentation!.MarkupContent!.Value.Should().NotContain("**Display name:**");
c.Documentation.MarkupContent.Value.Should().Contain("**Full module path:** whatever/abc/foo/bar");
c.Documentation.MarkupContent.Value.Should().Contain("**Description:** d1");
c.Documentation.MarkupContent.Value.Should().Contain("[View Documentation](contoso.com/help1)");
c.TextEdit!.TextEdit!.NewText.Should().Be(expectedCompletionText);
});
}
Expand Down Expand Up @@ -708,7 +754,11 @@ public async Task GetFilteredCompletions_WithMcrVersionCompletionContext_Returns
x.InsertText == null &&
x.SortText == expectedSortText1 &&
x.Detail == null &&
x.Documentation == null &&
!x.Documentation!.MarkupContent!.Value.Contains("**Display name:**") &&
x.Documentation.MarkupContent.Value.Contains("**Full module path:** app/dapr-containerapp") &&
x.Documentation.MarkupContent.Value.Contains("**Version:** 1.0.2") &&
x.Documentation.MarkupContent.Value.Contains("**Description:** N/A") &&
x.Documentation.MarkupContent.Value.Contains("**Documentation:** N/A") &&
x.TextEdit!.TextEdit!.NewText == expectedCompletionText1 &&
x.TextEdit!.TextEdit!.Range.Start.Line == 0 &&
x.TextEdit!.TextEdit!.Range.Start.Character == 12 &&
Expand All @@ -721,7 +771,11 @@ public async Task GetFilteredCompletions_WithMcrVersionCompletionContext_Returns
x.InsertText == null &&
x.SortText == expectedSortText2 &&
x.Detail == "d2" &&
x.Documentation!.MarkupContent!.Value == "[View Documentation](contoso.com/help%20page.html)" &&
!x.Documentation!.MarkupContent!.Value.Contains("**Display name:**") &&
x.Documentation.MarkupContent.Value.Contains("**Full module path:** app/dapr-containerapp") &&
x.Documentation.MarkupContent.Value.Contains("**Version:** 1.0.1") &&
x.Documentation.MarkupContent.Value.Contains("**Description:** d2") &&
x.Documentation.MarkupContent.Value.Contains("[View Documentation](contoso.com/help%20page.html)") &&
x.TextEdit!.TextEdit!.NewText == expectedCompletionText2 &&
x.TextEdit!.TextEdit!.Range.Start.Line == 0 &&
x.TextEdit!.TextEdit!.Range.Start.Character == 12 &&
Expand Down Expand Up @@ -848,7 +902,10 @@ public async Task GetFilteredCompletions_WithAliasForMCRInBicepConfigAndModulePa
x.Kind.Should().Be(CompletionItemKind.Snippet);
x.InsertText.Should().BeNull();
x.Detail.Should().Be("dapr description");
x.Documentation!.MarkupContent!.Value.Should().Be("[View Documentation](contoso.com/help)");
x.Documentation!.MarkupContent!.Value.Should().NotContain("**Display name:**");
x.Documentation.MarkupContent.Value.Should().Contain("**Full module path:** app/dapr-containerapp");
x.Documentation.MarkupContent.Value.Should().Contain("**Description:** dapr description");
x.Documentation.MarkupContent.Value.Should().Contain("[View Documentation](contoso.com/help)");

var actualTextEdit = x.TextEdit!.TextEdit;
actualTextEdit.Should().NotBeNull();
Expand Down
Loading
Loading