210 lines
12 KiB
PowerShell
210 lines
12 KiB
PowerShell
. $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
|
|
}
|
|
}
|
|
} |