ps/Modules/Alkami.PowerShell.Choco/Public/Get-PackageVersionsFromAlkamiProget.tests.ps1

172 lines
8.5 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
. $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 Get-PackageVersionsFromAlkamiProget {
$samplePackageFileDirectory = "C:\test\test.txt"
$samplePackageNames = "Alkami.Test.Microservice"
Mock Get-Content -ModuleName $moduleForMock {
return @()
}
Context "Parameter validation" {
Mock Write-Warning -ModuleName $moduleForMock { }
It "Throw when Both PackageNames Sources Passed" {
{ Get-PackageVersionsFromAlkamiProget -PackageNamesFile $samplePackageFileDirectory -PackageNames $samplePackageNames } | Should -Throw
}
It "Throw when PackageNames is provided but empty" {
{ Get-PackageVersionsFromAlkamiProget -PackageNames "" } | Should -Throw
}
It "Throw when the file from PackageNamesFile is empty" {
Mock Test-IsCollectionNullOrEmpty -ModuleName $moduleForMock {
return $true
}
Mock Write-Host -ModuleName $moduleForMock { }
{ Get-PackageVersionsFromAlkamiProget -PackageNamesFile $samplePackageFileDirectory } | Should -Throw
}
It "Throw when the file from PackageNamesFile doesn't exist" {
{ Get-PackageVersionsFromAlkamiProget -PackageNamesFile $samplePackageFileDirectory } | Should -Throw
}
It "Throw when the string for PackageNamesFile is empty" {
{ Get-PackageVersionsFromAlkamiProget -PackageNamesFile "" } | Should -Throw
}
It "Throw when neither PackageNames nor PackageNamesFile parameters are provided" {
{ Get-PackageVersionsFromAlkamiProget -SearchDevFeed } | Should -Throw
}
It "Correct amount of write-hosts called when PackageNames and all switch parameters are passed" {
Mock Write-Host -ModuleName $moduleForMock { }
Get-PackageVersionsFromAlkamiProget -PackageNames $samplePackageNames -ExactMatch -ShowPreVersions -SearchDevFeed -SearchQaFeed
Assert-MockCalled -CommandName Write-Host -ModuleName $moduleForMock -Scope It -Exactly 12
}
It "Correct amount of write-hosts called when only PackageNamesFile parameter is passed" {
Mock Get-Content -ModuleName $moduleForMock {
return @()
}
Mock Test-IsCollectionNullOrEmpty -ModuleName $moduleForMock {
return $false
}
Mock Test-Path -ModuleName $moduleForMock {
return $true
}
Get-PackageVersionsFromAlkamiProget -packageNamesFile $samplePackageFileDirectory
Assert-MockCalled -CommandName Write-Host -ModuleName $moduleForMock -Scope It -Exactly 3
}
It "Correct amount of write-hosts called when SearchQaFeed parameter is passed and SearchDevFeed is not" {
Mock Write-Host -ModuleName $moduleForMock { }
Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchQaFeed
Assert-MockCalled -CommandName Write-Host -ModuleName $moduleForMock -Scope It -Exactly 4
}
It "Correct amount of write-hosts called when neither SearchDevFeed nor SearchQaFeed is passed" {
Mock Write-Host -ModuleName $moduleForMock { }
Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames
Assert-MockCalled -CommandName Write-Host -ModuleName $moduleForMock -Scope It -Exactly 2
}
}
Context "Output validation" {
Mock Get-ChocoState -ModuleName $moduleForMock {
$results = @(@{ Feed = $NULL; IsService = $NULL; Version = "1.0.1"; Tags = $NULL; Name = "Alkami.Test.Test1" },
@{ Feed = $NULL; IsService = $NULL; Version = "1.1.0"; Tags = $NULL; Name = "Alkami.Test.Test2" },
@{ Feed = $NULL; IsService = $NULL; Version = "1.2.0-pre099"; Tags = $NULL; Name = "Alkami.TestPre.Test" })
return $results
}
Mock Write-Host -ModuleName $moduleForMock { }
It "DevRelease versions of packages are displayed by default when no feed switches are provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames
$results | Should -BeLike "*DevRelease*"
}
It "DevRelease versions of packages are displayed when SearchDevFeed is provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchDevFeed
$results | Should -BeLike "*DevRelease*"
}
It "DevPre versions of packages are displayed when ShowPreVersions is provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -ShowPreVersions
$results | Should -BeLike "*DevPre*"
}
It "QaRelease versions of packages are displayed when SearchQaFeed is provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchQaFeed
$results | Should -BeLike "*QaRelease*"
}
It "DevRelease, DevPre, and QaRelease versions are displayed when SearchDevFeed, ShowPreVersions, and SearchQaFeed are provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchQaFeed -ShowPreVersions -SearchDevFeed
$results | Should -BeLike "*QaRelease*"
$results | Should -BeLike "*DevPre*"
$results | Should -BeLike "*DevRelease*"
}
It "DevRelease versions are not displayed when SearchDevFeed is not passed, and SearchQaFeed or ShowPreVersions is passed" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchQaFeed -ShowPreVersions
$results | Should -Not -BeLike "*DevRelease*"
}
It "QaRelease versions are not displayed when the SearchQaFeed parameter is not provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchDevFeed -ShowPreVersions
$results | Should -Not -BeLike "*QaRelease*"
}
It "DevPre versions are not displayed when the SearchDevFeed parameter is not provided" {
$results = Get-PackageVersionsFromAlkamiProget -packageNames $samplePackageNames -SearchDevFeed -SearchQaFeed
$results | Should -Not -BeLike "*DevPre*"
}
It "Returns an empty JSON string and warns the user if no results are found" {
Mock Get-ChocoState -ModuleName $moduleForMock {
$results = $NULL
return $results
}
Mock Write-Warning -ModuleName $moduleForMock { }
$results = Get-PackageVersionsFromAlkamiProget -packageNames "doesntexist"
$emptyHashToJson = @{} | ConvertTo-Json
$results | Should -BeExactly $emptyHashToJson
Assert-MockCalled -CommandName Write-Warning -ModuleName $moduleForMock -Scope It -Exactly 1
}
It "Hash duplicate checks make function return only one instance of a package when the package is found by get-chocostate multiple times" {
Mock Get-ChocoState -ModuleName $moduleForMock {
$results = @(@{ Feed = $NULL; IsService = $NULL; Version = "1.0.1-pre000"; Tags = $NULL; Name = "Alkami.Test" })
return $results
}
Mock Write-Verbose -ModuleName $moduleForMock { }
$results = Get-PackageVersionsFromAlkamiProget -packageNames "testIterationOne,testIterationTwo" -SearchDevFeed -SearchQaFeed -ShowPreVersions -Verbose
Assert-MockCalled -CommandName Write-Verbose -ModuleName $moduleForMock -Scope It -ParameterFilter {$Message -like "*Results already contain a DevRelease entry*"}
Assert-MockCalled -CommandName Write-Verbose -ModuleName $moduleForMock -Scope It -ParameterFilter {$Message -like "*Results already contain a DevPre entry*"}
Assert-MockCalled -CommandName Write-Verbose -ModuleName $moduleForMock -Scope It -ParameterFilter {$Message -like "*Results already contain a QaRelease entry*"}
$convertedResults = $results | ConvertFrom-Json
$convertedResults.'Alkami.Test'.DevRelease | Should -Be "1.0.1-pre000"
$convertedResultsCount = ($convertedResults | Get-Member -Type NoteProperty).count
$convertedResultsCount | Should -Be 1
}
}
}