Tests/Test-SecretVault.Tests.ps1
|
BeforeAll { Get-Module 'SecretManagement.CyberArk' | Remove-Module -Force Get-Module 'Microsoft.Powershell.SecretManagement' | Remove-Module -Force Import-Module Microsoft.PowerShell.SecretManagement $ExtensionModule = Import-Module "$PSScriptRoot/../SecretManagement.CyberArk.Extension/*.psd1" -Force -PassThru $VaultName = 'CyberArk.Test' } AfterAll { Remove-Module $ExtensionModule -Force } Describe 'Test-SecretVault' { Context 'when connection type is REST' { BeforeAll { $VaultParams = @{ConnectionType = 'REST' } } It 'returns true when a PASSession exists' { Mock Get-PASSession -MockWith { [PSCustomObject]@{ BaseURI = 'https://pvwa' } } -ModuleName $ExtensionModule.Name Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams | Should -BeTrue } It 'returns false with an error when Get-PASSession returns an empty session object' { Mock Get-PASSession -MockWith { [PSCustomObject]@{ BaseURI = $null } } -ModuleName $ExtensionModule.Name Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*Failed to get PASSession*' } It 'returns false with an error when there is no PASSession' { Mock Get-PASSession -MockWith { throw 'no session' } -ModuleName $ExtensionModule.Name Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*Failed to get PASSession*' } } Context 'when connection type is Credential Provider' { It 'returns true when AppID is set and Get-AIMCredential is available' { Mock Get-Command -MockWith { [PSCustomObject]@{ Name = 'Get-AIMCredential' } } -ModuleName $ExtensionModule.Name Mock Test-PASSession -MockWith {} -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CredentialProvider'; AppID = 'App' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams | Should -BeTrue Should -Invoke -CommandName Test-PASSession -ModuleName $ExtensionModule.Name -Times 0 -Exactly } It 'returns false when AppID is missing' { Mock Get-Command -MockWith { [PSCustomObject]@{ Name = 'Get-AIMCredential' } } -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CredentialProvider' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*AppID*' } It 'returns false when Get-AIMCredential is unavailable' { Mock Get-Command -MockWith { $null } -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CredentialProvider'; AppID = 'App' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*Get-AIMCredential*' } } Context 'when connection type is Central Credential Provider' { It 'returns true when AppID and URL are set and Get-CCPCredential is available' { Mock Get-Command -MockWith { [PSCustomObject]@{ Name = 'Get-CCPCredential' } } -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CentralCredentialProvider'; AppID = 'App'; URL = 'https://ccp' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams | Should -BeTrue } It 'returns false when URL is missing' { Mock Get-Command -MockWith { [PSCustomObject]@{ Name = 'Get-CCPCredential' } } -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CentralCredentialProvider'; AppID = 'App' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*URL*' } It 'returns false when Get-CCPCredential is unavailable' { Mock Get-Command -MockWith { $null } -ModuleName $ExtensionModule.Name $VaultParams = @{ConnectionType = 'CentralCredentialProvider'; AppID = 'App'; URL = 'https://ccp' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue -ErrorVariable Err | Should -BeFalse "$Err" | Should -BeLike '*Get-CCPCredential*' } } Context 'when connection type is unknown' { It 'returns false' { $VaultParams = @{ConnectionType = 'Bogus' } Test-SecretVault -VaultName $VaultName -AdditionalParameters $VaultParams -ErrorAction SilentlyContinue | Should -BeFalse } } } |