Public/Register-KeePassSecretVault.Tests.ps1
Describe 'Register-KeepassSecretVault' { BeforeAll { Import-Module "$PSScriptRoot/../SecretManagement.KeePass.psd1" -Force $SCRIPT:Mocks = Resolve-Path "$PSScriptRoot/../SecretManagement.KeePass.Extension/Tests/Mocks" $SCRIPT:TestDB = Join-Path $Mocks 'TestdbKeyFile.kdbx' $SCRIPT:TestDBKey = Join-Path $Mocks 'TestdbKeyFile.key' $SCRIPT:TestDBName = ([io.fileinfo]$TestDB).Basename Unregister-SecretVault -Name $TestDBName -ErrorAction SilentlyContinue } AfterEach { Unregister-SecretVault -Name $TestDBName -ErrorAction SilentlyContinue if (-not $testdrive) {throw 'TestDrive Missing! This should not happen, bailing out for safety.'} Get-ChildItem $testdrive | Remove-Item -Force } AfterAll { Remove-Module SecretManagement.KeePass } It 'Registers a Vault' { Register-KeepassSecretVault -ErrorAction Stop -Path $TestDB -KeyPath $TestDBKey Get-SecretVault -Name $TestDBName -OutVariable myvault | Should -not -BeNullOrEmpty $myvault.Name | Should -Be $TestDBName $myvault.ModuleName | Should -Be 'SecretManagement.KeePass' $myVault.VaultParameters.UseMasterPassword | Should -BeFalse $myVault.VaultParameters.UseWindowsAccount | Should -BeFalse $myVault.VaultParameters.Path | Should -Be $TestDB $myVault.VaultParameters.KeyPath | Should -Be $TestDBKey } It 'Fails if bad path specified' { {Register-KeepassSecretVault -ErrorAction Stop -Path "$HOME\Path\To\Nowhere.kdbx"} | Should -Throw -ErrorId 'PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand' } It 'Fails if no auth method specified' { {Register-KeepassSecretVault -ErrorAction Stop -Path $TestDB} | Should -Throw 'No authentication methods specified*' } It 'Creates a new vault if Create is specified' { $RegisterParams = @{ Create = $true Path = (Join-Path $TestDrive "$TestDBName.kdbx") KeyPath = (Join-Path $TestDrive "$TestDBName.key") } Register-KeePassSecretVault @RegisterParams Get-SecretVault -Name $TestDBName -OutVariable DB | Should -Not -BeNullOrEmpty $expectedVaultParameters = @{ Path = $RegisterParams.Path KeyPath = $RegisterParams.KeyPath UseMasterPassword = 'False' UseWindowsAccount = 'False' } $expectedVaultParameters.keys.foreach{ $DB.VaultParameters.$PSItem | Should -Be $expectedVaultParameters.$PSItem } } It 'Doesnt Clobber an existing vault if Create is specified' { $RegisterParams = @{ Create = $true Path = (Join-Path $TestDrive "$TestDBName.kdbx") KeyPath = (Join-Path $TestDrive "$TestDBName.key") } #Simulate an already present vault New-Item $RegisterParams.Path {Register-KeePassSecretVault @RegisterParams} | Should -Throw '-Create was specified but a database already exists*' } It 'Doesnt Clobber an existing keyfile if Create is specified' { $RegisterParams = @{ Create = $true Path = (Join-Path $TestDrive "$TestDBName.kdbx") KeyPath = $TestDBKey } $dbKeyHash = (Get-FileHash $TestDBKey).Hash $dbKeyDateModified = (Get-Item $TestDBKey).LastWriteTime Register-KeePassSecretVault @RegisterParams (Get-FileHash $TestDBKey).Hash | Should -Be $dbKeyHash (Get-Item $TestDBKey).LastWriteTime | Should -Be $dbKeyDateModified } It 'Uses full titles if showfulltitle is specified' { Register-KeepassSecretVault -ErrorAction Stop -Path $TestDB -KeyPath $TestDBKey (Get-SecretInfo 'General/New Entry 1' -Vault $TestDBName 3>$null).Name | Should -Be 'General/New Entry 1' } It 'Succeeds with bad path but SkipValidate specified' { Register-KeePassSecretVault -Name $TestDBName -Path "$TestDrive/NotArealPath" -SkipValidate -KeyPath "$TestDrive/NotARealKey" Get-SecretVault -Name $TestDBName | Should -Not -BeNullOrEmpty } } |