. $PSScriptRoot\..\..\Load-PesterModules.ps1 $here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.' $functionPath = Join-Path -Path $here -ChildPath $sut Write-Host "Overriding SUT: $functionPath" Import-Module $functionPath -Force $moduleForMock = "" Describe "Close-SMBApplicationLocks" { #Mock -ModuleName $moduleForMock -CommandName Write-Host -MockWith {} Mock -ModuleName $moduleForMock -CommandName Write-Warning -MockWith {} Mock -ModuleName $moduleForMock -CommandName Write-Verbose -MockWith {} Context "Parameter Validation" { Mock -ModuleName $moduleForMock Close-SmbOpenFile {} Mock -ModuleName $moduleForMock Get-SmbOpenFile { $orbProc = New-Object -TypeName PSObject -Property @{ Path = "C:\Orb" SessionId = "1" FileId = 27 ClientUserName = "Pester" } $customProc1 = New-Object -TypeName PSObject -Property @{ Path = "C:\TestPath1" SessionId = "2" FileId = 28 ClientUserName = "Pester" } $customProc2 = New-Object -TypeName PSObject -Property @{ Path = "C:\TestPath2" SessionId = "3" FileId = 29 ClientUserName = "Pester" } return @($orbProc, $customProc1, $customProc2) } #Mock -ModuleName $moduleForMock Get-SmbOpenFile -ParameterFilter { $FileId } -MockWith { return $true } It "Uses a Default Path List if Not Provided" { Close-SMBApplicationLocks -Verbose Assert-MockCalled -ModuleName $moduleForMock Close-SmbOpenFile -Times 1 -Exactly -Scope It } It "Uses Custom Paths if Provided" { Close-SMBApplicationLocks @("TestPath1","TestPath2") -Verbose Assert-MockCalled -ModuleName $moduleForMock Close-SmbOpenFile -Times 2 -Exactly -Scope It } } Context "When No Sessions are Found" { Mock -ModuleName $moduleForMock Close-SmbOpenFile {} Mock -ModuleName $moduleForMock Get-SmbOpenFile { return $null } It "Does Not Call Close-SMBSession" { Close-SMBApplicationLocks -Verbose Assert-MockCalled -ModuleName $moduleForMock Close-SmbOpenFile -Times 0 -Exactly -Scope It } } Context "WinTest Parameter Validation" { Mock -ModuleName $moduleForMock Close-SmbOpenFile {} Mock -ModuleName $moduleForMock Get-SmbOpenFile { $winTestProc = New-Object -TypeName PSObject -Property @{ Path = "C:\Tools\Wintest\Current" SessionId = "5" FileId = 24 ClientUserName = "Pester" } $extraProc1 = New-Object -TypeName PSObject -Property @{ Path = "C:\ExtraPath1" SessionId = "6" FileId = 27 ClientUserName = "Pester" } return @($winTestProc, $extraProc1) } It "Default Path List Closes WinTest standard location" { Close-SMBApplicationLocks -Verbose Assert-MockCalled -ModuleName $moduleForMock Close-SmbOpenFile -Times 1 -Exactly -Scope It } } }