testcases/CreateUIDefinition/Validations-Must-Have-Message.test.ps1

<#
.Synopsis
    Ensures that validations in CreateUIDefinition controls have message in each item.
.Description
    Ensures that validations in CreateUIDefinition controls have message in each item.
#>

param(
    # The contents of CreateUIDefintion, converted from JSON.
    [Parameter(Mandatory = $true, Position = 0)]
    [PSObject]
    $CreateUIDefinitionObject
)

# Find any item property in CreateUIDefinition that uses validations
$constraints = @($CreateUIDefinitionObject | 
    Find-JsonContent -Key validations -Value * -Like)
foreach ($cobj in $constraints) {
    # Walk thru each thing we find.
    # First we need to find the control
    $parent = $cobj.ParentObject[0]
    $messageKey = 'message'

    foreach ($item in $cobj.validations) {
        if (-not $item.psobject.properties.Item($messageKey)) {
            # Find the item name
            $key = foreach ($object_properties in $item.PsObject.Properties) {
                if ($object_properties.Name -ne $messageKey) { 
                    $object_properties.Name; break
                }
            }
            Write-Error -Message "Validations property in $($parent.Name) is missing message for $($key)." -ErrorId Validations.Must.Have.Message -TargetObject $parent #error.
        }
    }
}