. $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 } } }