public async Task Test_Issue3182()

in src/Bicep.Cli.IntegrationTests/CliScenarioTests.cs [18:191]


        public async Task Test_Issue3182()
        {
            var template = @"{
  ""$schema"": ""https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"",
  ""contentVersion"": ""1.0.0.0"",
  ""metadata"": {
    ""_generator"": {
      ""name"": ""bicep"",
      ""version"": ""dev"",
      ""templateHash"": ""9136367247469226369""
    }
  },
  ""parameters"": {
    ""rgName"": {
      ""type"": ""string""
    },
    ""rgLocation"": {
      ""type"": ""string""
    },
    ""principalId"": {
      ""type"": ""string""
    },
    ""roleDefinitionId"": {
      ""type"": ""string"",
      ""defaultValue"": ""b24988ac-6180-42a0-ab88-20f7382dd24c""
    },
    ""roleAssignmentName"": {
      ""type"": ""string"",
      ""defaultValue"": ""[guid(parameters('principalId'), parameters('roleDefinitionId'), parameters('rgName'))]""
    }
  },
  ""functions"": [],
  ""resources"": [
    {
      ""type"": ""Microsoft.Resources/resourceGroups"",
      ""apiVersion"": ""2019-10-01"",
      ""name"": ""[parameters('rgName')]"",
      ""location"": ""[parameters('rgLocation')]"",
      ""properties"": {}
    },
    {
      ""type"": ""Microsoft.Resources/deployments"",
      ""apiVersion"": ""2019-10-01"",
      ""name"": ""applyLock"",
      ""resourceGroup"": ""[parameters('rgName')]"",
      ""properties"": {
        ""expressionEvaluationOptions"": {
          ""scope"": ""inner""
        },
        ""mode"": ""Incremental"",
        ""parameters"": {
          ""principalId"": {
            ""value"": ""[parameters('principalId')]""
          },
          ""roleDefinitionId"": {
            ""value"": ""[parameters('roleDefinitionId')]""
          },
          ""roleAssignmentName"": {
            ""value"": ""[parameters('roleAssignmentName')]""
          }
        },
        ""template"": {
          ""$schema"": ""https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#"",
          ""contentVersion"": ""1.0.0.0"",
          ""metadata"": {
            ""_generator"": {
              ""name"": ""bicep"",
              ""version"": ""dev"",
              ""templateHash"": ""5867672624469865160""
            }
          },
          ""parameters"": {
            ""principalId"": {
              ""type"": ""string""
            },
            ""roleDefinitionId"": {
              ""type"": ""string""
            },
            ""roleAssignmentName"": {
              ""type"": ""string""
            }
          },
          ""functions"": [],
          ""resources"": [
            {
              ""type"": ""Microsoft.Authorization/locks"",
              ""apiVersion"": ""2016-09-01"",
              ""name"": ""DontDelete"",
              ""properties"": {
                ""level"": ""CanNotDelete"",
                ""notes"": ""Prevent deletion of the resourceGroup""
              }
            },
            {
              ""type"": ""Microsoft.Authorization/roleAssignments"",
              ""apiVersion"": ""2020-04-01-preview"",
              ""name"": ""[guid(parameters('roleAssignmentName'))]"",
              ""properties"": {
                ""roleDefinitionId"": ""[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]"",
                ""principalId"": ""[parameters('principalId')]""
              }
            }
          ]
        }
      },
      ""dependsOn"": [
        ""[subscriptionResourceId('Microsoft.Resources/resourceGroups', parameters('rgName'))]""
      ]
    }
  ]
}";

            var fileName = FileHelper.GetResultFilePath(TestContext, "main.json");
            File.WriteAllText(fileName, template);

            var (_, _, result) = await Bicep("decompile", fileName);

            // This example has errors, but files should still have been generated
            result.Should().Be(1);

            var mainFile = Path.Combine(Path.GetDirectoryName(fileName)!, "main.bicep");
            File.ReadAllText(mainFile).Should().BeEquivalentToIgnoringNewlines("""
                targetScope = 'subscription'
                param rgName string
                param rgLocation string
                param principalId string
                param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
                param roleAssignmentName string = guid(principalId, roleDefinitionId, rgName)

                resource rg 'Microsoft.Resources/resourceGroups@2019-10-01' = {
                  name: rgName
                  location: rgLocation
                  properties: {}
                }

                module applyLock './nested_applyLock.bicep' = {
                  name: 'applyLock'
                  scope: resourceGroup(rgName)
                  params: {
                    principalId: principalId
                    roleDefinitionId: roleDefinitionId
                    roleAssignmentName: roleAssignmentName
                  }
                  dependsOn: [
                    subscriptionResourceId('Microsoft.Resources/resourceGroups', rgName)
                  ]
                }

                """);

            var moduleFile = Path.Combine(Path.GetDirectoryName(fileName)!, "nested_applyLock.bicep");
            File.ReadAllText(moduleFile).Should().BeEquivalentToIgnoringNewlines("""
                param principalId string
                param roleDefinitionId string
                param roleAssignmentName string

                resource DontDelete 'Microsoft.Authorization/locks@2016-09-01' = {
                  name: 'DontDelete'
                  properties: {
                    level: 'CanNotDelete'
                    notes: 'Prevent deletion of the resourceGroup'
                  }
                }

                resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
                  name: guid(roleAssignmentName)
                  properties: {
                    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
                    principalId: principalId
                  }
                }

                """);
        }