in src/Bicep.Core.IntegrationTests/CompileTimeImportTests.cs [403:560]
public void Function_symbols_imported_from_ARM_json_should_have_declarations_injected_into_compiled_template()
{
var result = CompilationHelper.Compile(
("main.bicep", """
import {greet, 'ns.cow_say' as cowSay} from 'mod.json'
"""),
("mod.json", $$"""
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"languageVersion": "2.0",
"definitions": {
"nonEmptyString": {
"type": "string",
"minLength": 1
}
},
"functions": [
{
"namespace": "{{EmitConstants.UserDefinedFunctionsNamespace}}",
"members": {
"greet": {
"parameters": [
{
"type": "string",
"name": "name"
}
],
"output": {
"type": "string",
"value": "[format('Hi, {0}!', ns.echo(parameters('name')))]"
},
"metadata": {
"{{LanguageConstants.MetadataExportedPropertyName}}": true
}
}
}
},
{
"namespace": "ns",
"members": {
"cow_say": {
"parameters": [
{
"type": "string",
"name": "instead_of_a_moo"
}
],
"output": {
"type": "string",
"value": "[format('The cow says: {0}', parameters('instead_of_a_moo'))]"
},
"metadata": {
"{{LanguageConstants.MetadataExportedPropertyName}}": true
}
},
"echo": {
"parameters": [
{
"$ref": "#/definitions/nonEmptyString",
"name": "in"
}
],
"output": {
"$ref": "#/definitions/nonEmptyString",
"value": "[parameters('in')]"
}
}
}
}
],
"resources": []
}
"""));
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
result.Template.Should().HaveValueAtPath("functions", JToken.Parse($$"""
[
{
"namespace": "_1",
"members": {
"_2": {
"parameters": [
{
"$ref": "#/definitions/_1.nonEmptyString",
"name": "in"
}
],
"output": {
"$ref": "#/definitions/_1.nonEmptyString",
"value": "[parameters('in')]"
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.json",
"{{LanguageConstants.ImportMetadataOriginalIdentifierPropertyName}}": "ns.echo"
}
}
}
}
},
{
"namespace": "{{EmitConstants.UserDefinedFunctionsNamespace}}",
"members": {
"cowSay": {
"parameters": [
{
"type": "string",
"name": "instead_of_a_moo"
}
],
"output": {
"type": "string",
"value": "[format('The cow says: {0}', parameters('instead_of_a_moo'))]"
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.json",
"{{LanguageConstants.ImportMetadataOriginalIdentifierPropertyName}}": "ns.cow_say"
}
}
},
"greet": {
"parameters": [
{
"type": "string",
"name": "name"
}
],
"output": {
"type": "string",
"value": "[format('Hi, {0}!', _1._2(parameters('name')))]"
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.json"
}
}
}
}
}
]
"""));
result.Template.Should().HaveValueAtPath("definitions", JToken.Parse($$"""
{
"_1.nonEmptyString": {
"type": "string",
"minLength": 1,
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.json"
}
}
}
}
"""));
}