in src/Bicep.Core.IntegrationTests/CompileTimeImportTests.cs [739:872]
public void Imported_type_symbols_with_a_lengthy_reference_chain_should_have_declarations_injected_into_compiled_template()
{
var result = CompilationHelper.Compile(
("main.bicep", """
import {foo} from 'mod.bicep'
"""),
("mod.bicep", """
import {bar} from 'mod2.bicep'
@export()
type foo = {
bar: bar
anotherProperty: unexported
}
type unexported = 'fizz' | 'buzz' | 'pop'
"""),
("mod2.bicep", """
import * as foo from 'mod3.bicep'
@export()
type bar = {
foo: foo.bar
prop: unexported
}
type unexported = {
nested: alsoNotExported
}
type alsoNotExported = int
"""),
("mod3.bicep", """
import {foo} from 'mod4.bicep'
@export()
type bar = foo
"""),
("mod4.bicep", """
@export()
type foo = string[]
"""));
result.ExcludingLinterDiagnostics().Should().NotHaveAnyDiagnostics();
result.Template.Should().HaveValueAtPath("definitions", JToken.Parse($$"""
{
"foo": {
"type": "object",
"properties": {
"bar": {
"$ref": "#/definitions/_2.bar"
},
"anotherProperty": {
"$ref": "#/definitions/_1.unexported"
}
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.bicep"
}
}
},
"_1.unexported": {
"type": "string",
"allowedValues": [
"buzz",
"fizz",
"pop"
],
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod.bicep"
}
}
},
"_2.bar": {
"type": "object",
"properties": {
"foo": {
"$ref": "#/definitions/_3.bar"
},
"prop": {
"$ref": "#/definitions/_2.unexported"
}
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod2.bicep"
}
}
},
"_2.unexported": {
"type": "object",
"properties": {
"nested": {
"$ref": "#/definitions/_2.alsoNotExported"
}
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod2.bicep"
}
}
},
"_2.alsoNotExported": {
"type": "int",
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod2.bicep"
}
}
},
"_3.bar": {
"$ref": "#/definitions/_4.foo",
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod3.bicep"
}
}
},
"_4.foo": {
"type": "array",
"items": {
"type": "string"
},
"metadata": {
"{{LanguageConstants.MetadataImportedFromPropertyName}}": {
"{{LanguageConstants.ImportMetadataSourceTemplatePropertyName}}": "mod4.bicep"
}
}
}
}
"""));
}