tests/Solutions/Solutions.Tests.ps1
|
<# Integration Test: Solutions Tests publisher, solution, solution component cmdlets. Cmdlets: New-XrmPublisher, Get-XrmPublisher, New-XrmSolution, Get-XrmSolution, Add-XrmSolutionComponent, Get-XrmSolutionComponents, Remove-XrmSolutionComponent, Uninstall-XrmSolution #> . "$PSScriptRoot\..\_TestConfig.ps1"; $randomSuffix = Get-Random -Minimum 10000 -Maximum 99999; # ============================================================ # New-XrmPublisher + Get-XrmPublisher # ============================================================ Write-Section "New-XrmPublisher + Get-XrmPublisher"; $publisherUniqueName = "pdotest${randomSuffix}"; $publisherDisplayName = "PDO Test Publisher $randomSuffix"; $publisherPrefix = "pdot"; $publisherRef = $Global:XrmClient | New-XrmPublisher ` -UniqueName $publisherUniqueName ` -DisplayName $publisherDisplayName ` -Prefix $publisherPrefix ` -OptionValuePrefix (10000 + ($randomSuffix % 89999)) ` -Description "Integration test publisher"; Assert-Test "New-XrmPublisher - created '$publisherUniqueName'" { $publisherRef -ne $null -and $publisherRef.Id -ne [Guid]::Empty; }; $publisher = $Global:XrmClient | Get-XrmPublisher -PublisherUniqueName $publisherUniqueName; Assert-Test "Get-XrmPublisher - uniquename matches" { $publisher.uniquename -eq $publisherUniqueName; }; Assert-Test "Get-XrmPublisher - friendlyname matches" { $publisher.friendlyname -eq $publisherDisplayName; }; Assert-Test "Get-XrmPublisher - prefix matches" { $publisher.customizationprefix -eq $publisherPrefix; }; # ============================================================ # New-XrmSolution + Get-XrmSolution # ============================================================ Write-Section "New-XrmSolution + Get-XrmSolution"; $solutionUniqueName = "pdotestsol${randomSuffix}"; $solutionDisplayName = "PDO Test Solution $randomSuffix"; $solutionRef = $Global:XrmClient | New-XrmSolution ` -UniqueName $solutionUniqueName ` -DisplayName $solutionDisplayName ` -PublisherReference $publisherRef ` -Version "1.0.0.0" ` -Description "Integration test solution"; Assert-Test "New-XrmSolution - created '$solutionUniqueName'" { $solutionRef -ne $null -and $solutionRef.Id -ne [Guid]::Empty; }; $solution = $Global:XrmClient | Get-XrmSolution -SolutionUniqueName $solutionUniqueName; Assert-Test "Get-XrmSolution - uniquename matches" { $solution.uniquename -eq $solutionUniqueName; }; Assert-Test "Get-XrmSolution - version is 1.0.0.0" { $solution.version -eq "1.0.0.0"; }; # ============================================================ # Add-XrmSolutionComponent + Get-XrmSolutionComponents # ============================================================ Write-Section "Solution Components"; # Get Account entity metadata ID via RetrieveEntityRequest $retrieveReq = New-Object Microsoft.Xrm.Sdk.Messages.RetrieveEntityRequest; $retrieveReq.LogicalName = "account"; $retrieveReq.EntityFilters = [Microsoft.Xrm.Sdk.Metadata.EntityFilters]::Entity; $retrieveResp = $Global:XrmClient.Execute($retrieveReq); $accountMetadataId = $retrieveResp.EntityMetadata.MetadataId; Assert-Test "Account metadata ID retrieved" { $accountMetadataId -ne $null -and $accountMetadataId -ne [Guid]::Empty; }; # Add Account entity (componenttype 1) to the solution $Global:XrmClient | Add-XrmSolutionComponent ` -SolutionUniqueName $solutionUniqueName ` -ComponentId $accountMetadataId ` -ComponentType 1 ` -DoNotIncludeSubcomponents $true; # Verify via Get-XrmSolutionComponents $components = @($Global:XrmClient | Get-XrmSolutionComponents -SolutionUniqueName $solutionUniqueName); Assert-Test "Add-XrmSolutionComponent - component count >= 1 (actual: $($components.Count))" { $components.Count -ge 1; }; # Get components filtered by type (1 = Entity) $entityComponents = @($Global:XrmClient | Get-XrmSolutionComponents -SolutionUniqueName $solutionUniqueName -ComponentTypes @(1)); Assert-Test "Get-XrmSolutionComponents (Entity type) - returns entity component" { $entityComponents.Count -ge 1; }; # ============================================================ # Remove-XrmSolutionComponent # ============================================================ Write-Section "Remove-XrmSolutionComponent"; $Global:XrmClient | Remove-XrmSolutionComponent ` -SolutionUniqueName $solutionUniqueName ` -ComponentId $accountMetadataId ` -ComponentType 1; # Verify component removed $componentsAfter = @($Global:XrmClient | Get-XrmSolutionComponents -SolutionUniqueName $solutionUniqueName -ComponentTypes @(1)); Assert-Test "Remove-XrmSolutionComponent - no entity components remain (actual: $($componentsAfter.Count))" { $componentsAfter.Count -eq 0; }; # ============================================================ # CLEANUP: Delete solution + publisher records # ============================================================ Write-Section "Cleanup"; # Delete solution record directly (unmanaged solution) $Global:XrmClient | Remove-XrmRecord -LogicalName "solution" -Id $solutionRef.Id; Assert-Test "Solution deleted" { $true }; # Delete publisher record $Global:XrmClient | Remove-XrmRecord -LogicalName "publisher" -Id $publisherRef.Id; Assert-Test "Publisher deleted" { $true }; Write-TestSummary; |