Tests/MimSyncImportAttributePrecedence.tests.ps1

$dscResource = Get-DscResource -Module MimDsc -Name MimSyncImportAttributePrecedence

Import-Module -Name $dscResource.Path -Force

Describe -Tag 'Build' 'MimSyncImportAttributePrecedence - calling Test-TargetResource Directly'{
    
    It 'MimSyncImportAttributePrecedence - desired state' {  
        $RankedPrecedenceOrder = @(
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 0; ManagementAgentName='GrandHR'; CDObjectType='robot';  ID='{86E75ABE-B15D-4CFF-A785-BC968965A361}'}  -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 1; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{385176D8-4EB8-4900-B627-DBAF137C8FF3}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 2; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{AF5CA310-1D8C-4669-95C2-1F7D0482CB8F}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 3; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{E1261AAA-DE1A-4AF0-8373-2C6C6FB76713}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration
            
        ) -as [CimInstance[]]   
        
        $dscResult = Test-TargetResource -MVObjectType Contact -MVAttribute DisplayName -Type ranked -RankedPrecedenceOrder $RankedPrecedenceOrder -Verbose

        $dscResult | Should be True
    }

    It 'MimSyncImportAttributePrecedence - incorrect order' {  
        $RankedPrecedenceOrder = @(
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 0; ManagementAgentName='GrandHR'; CDObjectType='robot';  ID='{86E75ABE-B15D-4CFF-A785-BC968965A361}'}  -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 3; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{385176D8-4EB8-4900-B627-DBAF137C8FF3}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 2; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{AF5CA310-1D8C-4669-95C2-1F7D0482CB8F}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 1; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{E1261AAA-DE1A-4AF0-8373-2C6C6FB76713}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration
            
        ) -as [CimInstance[]]   
        
        $dscResult = Test-TargetResource -MVObjectType Contact -MVAttribute DisplayName -Type ranked -RankedPrecedenceOrder $RankedPrecedenceOrder -Verbose

        $dscResult | Should be False
    }

    It 'MimSyncImportAttributePrecedence - incorrect type' {  
        $RankedPrecedenceOrder = @(
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 0; ManagementAgentName='GrandHR'; CDObjectType='robot';  ID='{86E75ABE-B15D-4CFF-A785-BC968965A361}'}  -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 3; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{385176D8-4EB8-4900-B627-DBAF137C8FF3}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 2; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{AF5CA310-1D8C-4669-95C2-1F7D0482CB8F}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration 
            New-CimInstance -ClassName MimSyncRankedPrecedenceOrder -Property @{Order = 1; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{E1261AAA-DE1A-4AF0-8373-2C6C6FB76713}'} -ClientOnly -Namespace root/microsoft/windows/desiredstateconfiguration
            
        ) -as [CimInstance[]]   
        
        $dscResult = Test-TargetResource -MVObjectType Contact -MVAttribute DisplayName -Type equal -RankedPrecedenceOrder $RankedPrecedenceOrder -Verbose

        $dscResult | Should be False
    }

}

Describe -Tag 'Build' 'MimSyncImportAttributePrecedence - calling Get-TargetResource Directly'{
    It 'Existing Flow Precedence' {

        $dscResult = Get-TargetResource -MVObjectType Contact -MVAttribute DisplayName -Verbose

        $dscResult | Should Not Be Null    
    }

    It 'Existing Flow Precedence' {

        $dscResult = Get-TargetResource -MVObjectType Contact -MVAttribute DisplayName -Verbose

        $dscResult['Type'] | Should be 'ranked'        
    } 
    
    It 'Missing Flow Precedence' {

        $dscResult = Get-TargetResource -MVObjectType Contact -MVAttribute AccountName -Verbose

        (-not $dscResult) | Should Be True    
    }  
}

Describe -Tag 'RunsInLocalConfigurationManager' 'MimSyncRunProfile - using the Local Configuration Manager'{
    It 'MimSyncRunProfile - desired state' {
        Configuration TestMimSyncImportAttributePrecedenceConfig 
        { 
            Import-DscResource -ModuleName MimDsc

            Node (hostname) 
            { 
                ImportAttributePrecedence 'Contact-DisplayName'
                {
                   MVObjectType           = 'Contact'
                   MVAttribute            = 'DisplayName'
                   Type                   = 'ranked'
                   RankedPrecedenceOrder  = @(
                      RankedPrecedenceOrder{Order = 0; ManagementAgentName='GrandHR'; CDObjectType='robot';  ID='{86E75ABE-B15D-4CFF-A785-BC968965A361}'}
                      RankedPrecedenceOrder{Order = 1; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{385176D8-4EB8-4900-B627-DBAF137C8FF3}'}
                      RankedPrecedenceOrder{Order = 2; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{AF5CA310-1D8C-4669-95C2-1F7D0482CB8F}'}
                      RankedPrecedenceOrder{Order = 3; ManagementAgentName='TinyHR';  CDObjectType='person'; ID='{E1261AAA-DE1A-4AF0-8373-2C6C6FB76713}'}                      
                   )
                }
            }
        } 

        TestMimSyncImportAttributePrecedenceConfig -OutputPath "$env:TEMP\TestMimSyncImportAttributePrecedenceConfig"
        Start-DscConfiguration       -Path "$env:TEMP\TestMimSyncImportAttributePrecedenceConfig" -Force -Wait -Verbose 

        Test-DscConfiguration | Should Be True
    }
}