Tests/MSFT_xClusterNetwork.Tests.ps1


[CmdletBinding()]
param
(
)

if (!$PSScriptRoot)
{
    $PSScriptRoot = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path)
}

$RootPath   = (Resolve-Path -Path "$PSScriptRoot\..").Path
$ModuleName = 'MSFT_xClusterNetwork'

try
{
    if (-not (Get-WindowsFeature -Name RSAT-Clustering-PowerShell -ErrorAction Stop).Installed)
    {
        Add-WindowsFeature -Name RSAT-Clustering-PowerShell -ErrorAction Stop
    }
}
catch
{
    Write-Warning $_
}

Import-Module (Join-Path -Path $RootPath -ChildPath "DSCResources\$ModuleName\$ModuleName.psm1") -Force


## General test for the xClusterNetwork resource

Describe 'xClusterNetwork' {

    InModuleScope $ModuleName {
    
        $TestParameter = @{
            Address     = '10.0.0.0'
            AddressMask = '255.255.255.0'
            Name        = 'Client'
            Role        = '1'
            Metric      = '70240'
        }

        Mock -CommandName 'Get-ClusterNetwork' -MockWith {
            [PSCustomObject] @{
                Cluster           = 'CLUSTER01'
                Name              = 'Client'
                Address           = '10.0.0.0'
                AddressMask       = '255.255.255.0'
                Role              = '1'
                Metric            = '70240'
            }
        }

        Context 'Validate Get-TargetResource method' {

            It 'Returns a [System.Collection.Hashtable] type' {

                $Result = Get-TargetResource @TestParameter

                $Result -is [System.Collections.Hashtable] | Should Be $true
            }
        }

        Context 'Validate Get-TargetResource method' {

            It 'Returns current configuration' {

                $Result = Get-TargetResource @TestParameter
                
                $Result.Address      | Should Be $TestParameter.Address     
                $Result.AddressMask  | Should Be $TestParameter.AddressMask 
                $Result.Name         | Should Be $TestParameter.Name        
                $Result.Role         | Should Be $TestParameter.Role        
                $Result.Metric       | Should Be $TestParameter.Metric      
            }
        }
        
        Context 'Validate Set-TargetResource method' {

            It 'Returns nothing' {

                $Result = Set-TargetResource @TestParameter

                $Result -eq $null | Should Be $true
            }
        }
        
        Context 'Validate Test-TargetResource method' {

            It 'Returns a [System.Boolean] type' {

                $Result = Test-TargetResource @TestParameter

                $Result -is [System.Boolean] | Should Be $true
            }
        }
    }
}