tests/Get-DbaPermission.Tests.ps1

$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "")
Write-Host -Object "Running $PSCommandPath" -ForegroundColor Cyan
. "$PSScriptRoot\constants.ps1"

Describe "Get-DbaPermission Unit Tests" -Tag "UnitTests" {
    InModuleScope dbatools {
        Context "Validate parameters" {
            $params = (Get-ChildItem function:\Get-DbaPermission).Parameters    
            it "should have a parameter named SqlInstance" {
                $params.ContainsKey("SqlInstance") | Should Be $true
            }
            it "should have a parameter named SqlCredential" {
                $params.ContainsKey("SqlCredential") | Should Be $true
            }
            it "should have a parameter named EnableException" {
                $params.ContainsKey("EnableException") | Should Be $true
            }
        }
}
Describe "Get-DbaPermission Integration Tests" -Tag "IntegrationTests" {
        Context "parameters work" {
            it "returns server level permissions with -IncludeServerLevel" {
                $results = Get-DbaPermission -SqlInstance $script:instance2 -IncludeServerLevel
                $results.where({$_.Database -eq ''}).count | Should BeGreaterThan 0
            }
            it "returns no server level permissions without -IncludeServerLevel" {
                $results = Get-DbaPermission -SqlInstance $script:instance2
                $results.where({$_.Database -eq ''}).count | Should Be 0
            }
            it "returns no system object permissions with -NoSystemObjects" {
                $results = Get-DbaPermission -SqlInstance $script:instance2 -NoSystemObjects
                $results.where({$_.securable -like 'sys.*'}).count | Should Be 0
            }
            it "returns system object permissions without -NoSystemObjects" {
                $results = Get-DbaPermission -SqlInstance $script:instance2
                $results.where({$_.securable -like 'sys.*'}).count | Should BeGreaterThan 0
            }
        }
        Context "Validate input" {
            it "Cannot resolve hostname of computer" {
                mock Resolve-DbaNetworkName {$null}
                {Get-DbaComputerSystem -ComputerName 'DoesNotExist142' -WarningAction Stop 3> $null} | Should Throw
            }
        }
    }
}