tests/Get-DbaComputerSystem.Tests.ps1

$CommandName = $MyInvocation.MyCommand.Name.Replace(".ps1", "")
Write-Host -Object "Running $PSCommandPath" -ForegroundColor Cyan
. "$PSScriptRoot\constants.ps1"
Describe "Get-DbaComputerSystem Unit Tests" -Tag "UnitTests" {
    InModuleScope dbatools {
        Context "Validate parameters" {
            $params = (Get-ChildItem function:\Get-DbaComputerSystem).Parameters    
            it "should have a parameter named ComputerName" {
                $params.ContainsKey("ComputerName") | Should Be $true
            }
            it "should have a parameter named Credential" {
                $params.ContainsKey("Credential") | Should Be $true
            }
            it "should have a parameter named Silent" {
                $params.ContainsKey("Silent") | Should Be $true
            }
        }
        Context "Validate input" {
            it "Cannot resolve hostname of computer" {
                mock Resolve-DbaNetworkName {$null}
                {Get-DbaComputerSystem -ComputerName 'DoesNotExist142' -WarningAction Stop 3> $null} | Should Throw
            }
        }
    }
}
Describe "Get-DbaComputerSystem Integration Test" -Tag "IntegrationTests" {
    $result = Get-DbaComputerSystem -ComputerName $script:instance1

    $props = 'ComputerName','Domain','IsDaylightSavingsTime','Manufacturer','Model','NumberLogicalProcessors'
    ,'NumberProcessors','IsHyperThreading','SystemFamily','SystemSkuNumber','SystemType','IsSystemManagedPageFile','TotalPhysicalMemory'

    Context "Validate output" {
        foreach ($prop in $props) {
            $p = $result.PSObject.Properties[$prop]
            it "Should return property: $prop" {
                $p.Name | Should Be $prop
            }
        }
        it "Should return nothing if unable to connect to server" {
            $result = Get-DbaComputerSystem -ComputerName 'Melton5312' -WarningAction SilentlyContinue
            $result | Should Be $null
        }
    }
}