ps/Modules/Alkami.DevOps.Installation/Public/Get-PackageServerMapping.Tests.ps1
2023-05-30 22:51:22 -07:00

208 lines
10 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 = ""
$currentErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = "stop"
Describe 'Get_PackageServerMappings'{
Mock -CommandName Write-Host -MockWith {}
Mock -CommandName Write-Warning -MockWith {}
Mock -CommandName Write-Error -MockWith {}
Mock -CommandName Get-MicroserviceNewRelicMapping -MockWith {
param(
$BuildCheckoutDirectory,
[PSObject]$PackageMetadata)
return $PackageMetadata
}
Mock -CommandName ConvertTo-SafeTeamCityMessage -MockWith {}
Context "When Processing Packages" {
$appPackage1 = New-DummyPackageInstallationData -PackageName "app.package1" -PackageVersion "1.0.0" -IsFullScale
$appPackage2 = New-DummyPackageInstallationData -PackageName "app.package2" -PackageVersion "1.0.0" -IsFullScale
$appPackage3 = New-DummyPackageInstallationData -PackageName "invalid.app.package1" -PackageVersion "1.0.0" -IsFullScale -IsValid $false
$appPackage4 = New-DummyPackageInstallationData -PackageName "mic.package1" -PackageVersion "1.0.0" -IsFullScale
$webPackage1 = New-DummyPackageInstallationData -PackageName "web.package1" -PackageVersion "1.0.0" -IsFullScale
$webPackage2 = New-DummyPackageInstallationData -PackageName "web.package2" -PackageVersion "1.0.0" -IsFullScale
$webPackage3 = New-DummyPackageInstallationData -PackageName "invalid.web.package1" -PackageVersion "1.0.0" -IsFullScale -IsValid $false
$appPackageArray = @($appPackage1, $appPackage2, $appPackage4)
$webPackageArray = @($webPackage1, $webPackage2)
$appPackage3.IsValid = $False
$webPackage3.IsValid = $False
$invalidAppPackageArray = @($appPackage1, $appPackage2, $appPackage3, $appPackage4)
$invalidWebPackageArray = @($webPackage1, $webPackage2, $webPackage3)
# Send back app/mic packages if given app packages
Mock -CommandName Get-PackageInstallationData -MockWith {
# only the packages matter here, but we get all of them, so accept them in case they're useful for a future mock.
param(
$ChocoPackages,
$Servers,
$FilterFeeds,
$FilterPowerShellModules,
$NugetCredential,
$IncludeMissingPackages,
$UseV2PackageMetadata
)
$packages = @()
foreach ($package in $ChocoPackages){
if($package.Name -like "*app*"){
$newPackage = New-DummyPackageInstallationData -PackageName $package.Name -PackageVersion $package.Version -IsAppOnly -IsValid $package.IsValid
} else {
$newPackage = New-DummyPackageInstallationData -PackageName $package.Name -PackageVersion $package.Version -IsMicOnly -IsValid $package.IsValid
}
$packages += $newPackage
}
return $packages
} -ParameterFilter {($ChocoPackages[0].Name -like "*app*" -or $ChocoPackages[0].Name -like "*mic*")}
# Send back app/mic packages if given app packages
Mock -CommandName Get-PackageInstallationData -MockWith {
# only the packages matter here, but we get all of them, so accept them in case they're useful for a future mock.
param(
$ChocoPackages,
$Servers,
$FilterFeeds,
$FilterPowerShellModules,
$NugetCredential,
$IncludeMissingPackages,
$UseV2PackageMetadata
)
$packages = @()
foreach ($package in $ChocoPackages){
$newPackage = New-DummyPackageInstallationData -PackageName $package.Name -PackageVersion $package.Version -IsWebOnly -IsValid $package.IsValid
$packages += $newPackage
}
return $packages
} -ParameterFilter {$ChocoPackages[0].Name -like "*web*"}
$packageData = New-PackageMetadataObject
$packageData.DisableMicroserviceNewRelic = $true
$packageData.Servers = @("fakeServer.1","fakeServer.2")
$password = ConvertTo-SecureString 'fake' -AsPlainText -Force
$fakeCred = New-Object System.Management.Automation.PSCredential('bogus', $password)
$fakeDebugMetadata = New-Object psobject -property @{
WebServerPackages = @($webPackage1,$webPackage2)
AppServerPackages = @($appPackage1, $appPackage2)
MicServerPackages = @($appPackage1, $appPackage2)
FabServerPackages = @()
WebPackagesToInstallMap = @{}
AppPackagesToInstallMap = @{}
ClassifiedPackagesMap = @{}
}
It "Populates WebPackagesToInstall" {
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.WebPackagesToInstall | Should -Not -BeNullOrEmpty
}
It "Populates AppPackagesToInstall" {
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.AppPackagesToInstall | Should -Not -BeNullOrEmpty
}
It "Populates DebugMetadata ClassifiedPackagesMap" {
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$debugMetadata.ClassifiedPackagesMap | Should -Not -BeNullOrEmpty
}
It "Sets Microservice New Relic Settings" {
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
Assert-MockCalled -CommandName Get-MicroserviceNewRelicMapping -Scope Context -Times 1
}
It "Writes Warnings when given invalid App packages"{
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $invalidAppPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
Assert-MockCalled -CommandName Write-Warning -Scope Context -ParameterFilter {$Message -like "*MISSING_PACKAGES*"}
Assert-MockCalled -CommandName Write-Warning -Scope Context -ParameterFilter {$Message -like "*MISSING_APP_PACKAGE*"}
}
It "Writes Warnings when given invalid Web packages"{
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $invalidWebPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
Assert-MockCalled -CommandName Write-Warning -Scope Context -ParameterFilter {$Message -like "*MISSING_PACKAGES*"}
Assert-MockCalled -CommandName Write-Warning -Scope Context -ParameterFilter {$Message -like "*MISSING_WEB_PACKAGE*"}
}
It "Sets Install To App With App Servers" {
$packageData.InstallToAppsAndMics = $true
$packageData.HasAppServers = $true
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.AppPackagesToInstall | Should -Not -BeNullOrEmpty
($packageData.AppPackagesToInstall.InstallToApp -contains $true) | Should -BeTrue
}
It "Doesn't Set Install To App Without App Servers" {
$packageData.InstallToAppsAndMics = $true
$packageData.HasAppServers = $false
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.AppPackagesToInstall | Should -Not -BeNullOrEmpty
($packageData.AppPackagesToInstall.InstallToApp -contains $true) | Should -BeFalse
}
It "Sets Install To Mic With Mic Servers" {
$packageData.InstallToAppsAndMics = $true
$packageData.HasMicServers = $true
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.AppPackagesToInstall | Should -Not -BeNullOrEmpty
($packageData.AppPackagesToInstall.InstallToMic -contains $true) | Should -BeTrue
}
It "Doesn't Install To Mic Without Mic Servers" {
$packageData.InstallToAppsAndMics = $true
$packageData.HasMicServers = $false
$packageMetadata,$debugMetadata = Get-PackageServerMapping -AllAppTierPackages $appPackageArray -AllWebTierPackages $webPackageArray `
-BuildCheckoutDirectory "fakeDirectory" -DebugMetadata $fakeDebugMetadata `
-NugetCredential $fakeCred -PackageMetadata $packageData
$packageData.AppPackagesToInstall | Should -Not -BeNullOrEmpty
($packageData.AppPackagesToInstall.InstallToMic -contains $true) | Should -BeFalse
}
}
}