test/TMD.Credentials.Tests.ps1
BeforeAll { # Define some variable to be used in all of the tests [String]$CredentialPath = $ENV:HOMEDRIVE + $env:HOMEPATH + '\TMD_Files\Credentials' [String]$CredentialName = 'TestCredential' [SecureString]$SecurePassword = ConvertTo-SecureString 'TestPassword' -AsPlainText -Force [PsCredential]$Credential = [System.Management.Automation.PSCredential]::new('TestUserName', $SecurePassword) # Import the module file if (Get-Module 'TMD.Common') { Remove-Module 'TMD.Common' -Force } Import-Module "TMD.Common" -Force } Describe 'Add-StoredCredential' { BeforeAll { # Run the function before all of the tests Add-StoredCredential -Name $CredentialName -Credential $Credential } It 'Credential is created and named properly' { Join-Path $CredentialPath ($CredentialName + '.credential') | Should -Exist } It 'File contains proper data' { $CredPath = Join-Path $CredentialPath ($CredentialName + '.credential') $ImportedCred = Import-Clixml -Path $CredPath $ImportedCred.UserName | Should -Be $Credential.UserName $ImportedCred | Should -BeOfType System.Management.Automation.PSCredential } It 'Error is thrown when no credentials are supplied' { $Global:TmdRunningAction = $true { Add-StoredCredential -Name $CredentialName -ErrorAction Stop} | Should -Throw $Global:TmdRunningAction = $false } # TODO: Add pipeline tests AfterAll { $CredFile = Join-Path $CredentialPath ($CredentialName + '.credential') if (Test-Path -Path $CredFile) { Remove-Item $CredFile -Force } } } Describe 'Remove-StoredCredential' { BeforeEach { # Create a credential before each of the tests Add-StoredCredential -Name $CredentialName -Credential $Credential } It 'File is actually removed' { Remove-StoredCredential -Name $CredentialName Join-Path $CredentialPath ($CredentialName + '.credential') | Should -Not -Exist } It 'Error is thrown when Name is incorrect' { {Remove-StoredCredential -Name 'IncorrectCredentialName' -ErrorAction Stop} | Should -Throw } # TODO: Add pipeline tests AfterAll { Remove-Item (Join-Path $CredentialPath ($CredentialName + '.credential')) -Force } } Describe 'Get-StoredCredential' { BeforeAll { 1..5 | ForEach-Object { Add-StoredCredential -Name $_ -Credential $Credential } } It 'Only one parameter set can be used' { {Get-StoredCredential -Name $CredentialName -List} | Should -Throw } Context "Without Params" { It 'List of objects is returned' { $Creds = Get-StoredCredential $Creds.GetType().BaseType.ToString() | Should -Be 'System.Array' $Creds | Should -BeOfType PSCustomObject } } Context 'Using -List' { It 'List of strings is returned' { $CredList = Get-StoredCredential -List $CredList.GetType().BaseType.ToString() | Should -Be 'System.Array' $CredList | Should -BeOfType String } It '1-5 are in the list' { $CredList = Get-StoredCredential -List 1..5 | ForEach-Object { $CredList | Should -Contain $_ } } } # TODO: Add pipeline tests Context 'Specifying Name' { BeforeAll { # Run the function before all of the tests Add-StoredCredential -Name $CredentialName -Credential $Credential } It 'PSCredential should be returned' { $Cred = Get-StoredCredential -Name $CredentialName $Cred | Should -BeOfType PSCredential } It 'No error if Name is incorrect' { $Cred = Get-StoredCredential -Name 'IncorrectCredentialName' $Cred | Should -BeNullOrEmpty } } AfterAll { 1..5 | ForEach-Object { Remove-Item (Join-Path $CredentialPath "$_.credential") -Force } } } |