public void Existing_resources_can_be_referenced_at_other_scopes() { var typeName = "My.Rp/myResource@2020-01-01"; var typeProvider = ResourceTypeProviderHelper.CreateAzResourceTypeProvider(factory => { var stringType = factory.Create(() => new Azure.Bicep.Types.Concrete.BuiltInType(BuiltInTypeKind.String)); var objectType = factory.Create(() => new Azure.Bicep.Types.Concrete.ObjectType(typeName, new Dictionary <string, ObjectProperty> { ["name"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.DeployTimeConstant), ["kind"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.ReadOnly), }, null)); var resourceType = factory.Create(() => new Azure.Bicep.Types.Concrete.ResourceType(typeName, ScopeType.ResourceGroup, factory.GetReference(objectType))); }); // explicitly pass a valid scope var(template, _, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @" resource resourceA 'My.Rp/myResource@2020-01-01' existing = { name: 'resourceA' scope: resourceGroup() } output resourceARef string = resourceA.kind ")); template !.Should().NotBeNull(); using (new AssertionScope()) { template !.SelectToken("$.outputs['resourceARef'].value") !.Should().DeepEqual("[reference(extensionResourceId(resourceGroup().id, 'My.Rp/myResource', 'resourceA'), '2020-01-01', 'full').kind]"); } // use a valid targetScope without setting the scope property (template, _, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @" targetScope = 'resourceGroup' resource resourceA 'My.Rp/myResource@2020-01-01' existing = { name: 'resourceA' } output resourceARef string = resourceA.kind ")); template !.Should().NotBeNull(); using (new AssertionScope()) { template !.SelectToken("$.outputs['resourceARef'].value") !.Should().DeepEqual("[reference(resourceId('My.Rp/myResource', 'resourceA'), '2020-01-01', 'full').kind]"); } }
public void Errors_are_raised_for_existing_resources_at_invalid_scopes() { var typeName = "My.Rp/myResource@2020-01-01"; var typeProvider = ResourceTypeProviderHelper.CreateAzResourceTypeProvider(factory => { var stringType = factory.Create(() => new Azure.Bicep.Types.Concrete.BuiltInType(BuiltInTypeKind.String)); var objectType = factory.Create(() => new Azure.Bicep.Types.Concrete.ObjectType(typeName, new Dictionary <string, ObjectProperty> { ["name"] = new ObjectProperty(factory.GetReference(stringType), ObjectPropertyFlags.DeployTimeConstant), }, null)); var resourceType = factory.Create(() => new Azure.Bicep.Types.Concrete.ResourceType(typeName, ScopeType.ResourceGroup, factory.GetReference(objectType))); }); // explicitly pass an invalid scope var(_, diags, _) = CompilationHelper.Compile(typeProvider, ("main.bicep", @" resource resourceA 'My.Rp/myResource@2020-01-01' existing = { name: 'resourceA' scope: subscription() } ")); diags.Should().HaveDiagnostics(new[] {