ps/Modules/Alkami.PowerShell.Choco/Public/Format-ParseChocoPackages.Tests.ps1

210 lines
12 KiB
PowerShell
Raw Permalink 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 "Format-ParseChocoPackages" {
# Global Mocks
Mock -CommandName Write-Host -ModuleName $moduleForMock -MockWith {}
Context "Positive Assertions" {
It "Test single package with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1") -Validate
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
}
It "Test single package" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "v1.7.1.1.1.1.1.1.1.1-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1")
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
}
It "Test single package no version with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$properties1 = @{ Name = $packageName1; Version = $null; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
$arrayList = Format-ParseChocoPackages -text @("$packageName1") -Validate
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
}
It "Test single package no version" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$properties1 = @{ Name = $packageName1; Version = $null; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
$arrayList = Format-ParseChocoPackages -text @("$packageName1")
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
}
It "Test two packages, with same name and version, with validation, are deduplicated" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1-pre100"
$packageName2 = "alkami.api.afx"
$packageVersion2 = "1.7.1-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2") -Validate
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
$arrayList[1].Name | Should -Be $null
$arrayList[1].Version | Should -Be $null
}
It "Test two packages, same name and version" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "v1.7.1.0-pre100"
$packageName2 = "alkami.api.afx"
$packageVersion2 = "v1.7.1.0-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2")
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
$arrayList[1].Name | Should -Be $packages[1].Name
$arrayList[1].Version | Should -Be $packages[1].Version
}
It "Test two packages, different name and versions with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.aufx"
$packageVersion1 = "1.4.0"
$packageName2 = "alkami.api.cfx"
$packageVersion2 = "1.7.1-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2") -Validate
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
$arrayList[1].Name | Should -Be $packages[1].Name
$arrayList[1].Version | Should -Be $packages[1].Version
}
It "Test two packages, different name and versions" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.cufx"
$packageVersion1 = "1.4.0.0"
$packageName2 = "alkami.api.afx"
$packageVersion2 = "1.7.1.0-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
$arrayList = Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2")
$arrayList[0].Name | Should -Be $packages[0].Name
$arrayList[0].Version | Should -Be $packages[0].Version
$arrayList[1].Name | Should -Be $packages[1].Name
$arrayList[1].Version | Should -Be $packages[1].Version
}
It "Test same package name, different versions without validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1.0-pre100"
$packageName2 = "alkami.api.afx"
$packageVersion2 = "1.7.1.0-pre200"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
{Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2") -ErrorAction Stop} | Should Not Throw
}
It "Test Version number trailing decimal without validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1.1.-pre10"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
{Format-ParseChocoPackages -text @("$packagename1|$packageVersion1") -ErrorAction Stop} | Should Not Throw
}
}
Context "Negative Assertions" {
It "Test same package name, different versions with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1-pre100"
$packageName2 = "alkami.api.afx"
$packageVersion2 = "1.7.1-pre200"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$properties2 = @{ Name = $packageName2; Version = $packageVersion2; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$pkg2 = New-Object -TypeName PSObject -Prop $properties2;
$packages.Add($pkg1)
$packages.Add($pkg2)
{Format-ParseChocoPackages -text @("$packageName1|$packageVersion1","$packageName2|$packageVersion2") -Validate -ErrorAction Stop} | Should Throw
}
It "Test malformed package version with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.-pre100"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
{Format-ParseChocoPackages -text @("$packagename1|$packageVersion1") -Validate -ErrorAction Stop} | Should Throw
}
It "Test Version number too many positions with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7.1.1"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
{Format-ParseChocoPackages -text @("$packagename1|$packageVersion1") -Validate -ErrorAction Stop} | Should Throw
}
It "Test Version number too few positions with validation" {
$packages = [System.Collections.ArrayList]::new()
$packageName1 = "alkami.api.afx"
$packageVersion1 = "1.7"
$properties1 = @{ Name = $packageName1; Version = $packageVersion1; Feed = $null; Tags = $null; IsService = $null; StartMode = $null}
$pkg1 = New-Object -TypeName PSObject -Prop $properties1;
$packages.Add($pkg1)
{Format-ParseChocoPackages -text @("$packagename1|$packageVersion1") -Validate -ErrorAction Stop} | Should Throw
}
}
}