tests/Customization/Ribbon.Tests.ps1

<#!
    Integration Test: Ribbon cmdlets
    Validates export and import of ribbon via solution manipulation (temporary solution on the default publisher).
#>

. "$PSScriptRoot\..\_TestConfig.ps1";

function Get-TempRibbonSolutionCount {
    $query = New-XrmQueryExpression -LogicalName "solution" -Columns "uniquename";
    $query.Criteria.FilterOperator = [Microsoft.Xrm.Sdk.Query.LogicalOperator]::Or;
    $query = $query | Add-XrmQueryCondition -Field "uniquename" -Condition BeginsWith -Values "RibbonExport_";
    $query = $query | Add-XrmQueryCondition -Field "uniquename" -Condition BeginsWith -Values "RibbonImport_";
    return @($Global:XrmClient | Get-XrmMultipleRecords -Query $query).Count;
}

$entity = "account";
$tempSolutionsBefore = Get-TempRibbonSolutionCount;

Write-Section "Export Ribbon";
$ribbon = $Global:XrmClient | Export-XrmRibbon -EntityLogicalName $entity;
Assert-Test "RibbonDiffXml exported without a publisher argument" { $ribbon -and $ribbon.OuterXml -like '*RibbonDiffXml*' };

Write-Section "Import Ribbon (round trip with the exported XmlElement)";
$Global:XrmClient | Import-XrmRibbon -EntityLogicalName $entity -RibbonDiffXml $ribbon -Publish $false | Out-Null;
$ribbonAfter = $Global:XrmClient | Export-XrmRibbon -EntityLogicalName $entity;
Assert-Test "Ribbon unchanged after importing the exported XmlElement" {
    $ribbonAfter -and $ribbonAfter.OuterXml -eq $ribbon.OuterXml;
};

Write-Section "Failures";
$errorMessage = $null;
try {
    $Global:XrmClient | Export-XrmRibbon -EntityLogicalName $entity -PublisherUniqueName "pdo_missing_publisher" | Out-Null;
}
catch {
    $errorMessage = $_.Exception.Message;
}
Assert-Test "Unknown publisher raises the original error" {
    $errorMessage -like "*pdo_missing_publisher*";
};

Write-Section "Cleanup";
Assert-Test "No temporary ribbon solution left behind" {
    (Get-TempRibbonSolutionCount) -eq $tempSolutionsBefore;
};

Write-TestSummary;