ps/Modules/Alkami.PowerShell.ServiceFabric/Public/Publish-AlkamiServiceFabricPackages.Tests.ps1
2023-05-30 22:51:22 -07:00

134 lines
5.2 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 = ""
# Make tests not fail if ServiceFabric SDK not installed
$serviceFabricSDKIsInstalled = (Test-Path "C:\Program Files\Microsoft Service Fabric")
if (!$serviceFabricSDKIsInstalled) {
Write-Warning "The Service Fabric SDK must be installed to execute these tests. They will be skipped"
}
Describe "Publish-AlkamiServiceFabricPackages" {
$podName = "AWS Production 5";
Mock Get-AppSetting -ModuleName $moduleForMock {
param($appSettingKey, $filePath, $computername,$SuppressWarnings)
if($appSettingKey -eq "Environment.Name") {
return $podName;
}
if($appSettingKey -eq "Environment.Type") {
return "FakeEnvironment";
}
return "FakeValue";
}
# Setup
$packageString = "Alkami.Fake.Package 1.2.3";
$packages = Format-ParseChocoPackages -text $packageString -delimiter " ";
foreach($package in $packages) {
$package.Feed = @{ Source = "https://www.fakesource.com/nuget/choco.fake" };
}
$podShortName = Format-AlkamiEnvironmentName -name $podName;
Context "Deploy Packages" {
if ($serviceFabricSDKIsInstalled) {
# Inside IF statement to avoid errors mocking functions that don't exist
Mock Remove-Item -ModuleName $moduleForMock { }
Mock Set-ChocoPackageSourceFeeds -ModuleName $moduleForMock { }
Mock Connect-AlkamiServiceFabricCluster -ModuleName $moduleForMock { }
Mock New-AlkamiServiceFabricPackage -ModuleName $moduleForMock { }
Mock New-AlkamiServiceFabricReliableServicePackage -ModuleName $moduleForMock { }
Mock Copy-ServiceFabricApplicationPackage -ModuleName $moduleForMock { }
Mock Register-ServiceFabricApplicationType -ModuleName $moduleForMock { }
Mock Format-AlkamiServiceFabricApplicationName -ModuleName $moduleForMock { }
Mock Test-IsPackageReliableService -ModuleName $moduleForMock { }
Mock Get-AlkamiServiceFabricApplications -Module $moduleForMock { return $null }
Mock Get-AlkamiServiceFabricNode -ModuleName $moduleForMock {
$numServers = 5;
$results = @();
for($i = 0; $i -lt $numServers; $i++) {
$results += "FABFAKE$i";
}
return $results;
}
Mock Get-AlkamiServiceFabricPackageServiceTypeName -ModuleName $moduleForMock {
return "Alkami.Fake.Package";
}
Mock Get-ServiceFabricApplicationType -ModuleName $moduleForMock {
return $null;
}
Mock Test-IsPackageReliableService -ModuleName $moduleForMock {
return $true;
}
Mock Get-ServiceFabricNode -ModuleName $moduleForMock {
return @("APP12345.fh.local");
}
}
It "Correctly Builds a Reliable Service Package" {
if (!$serviceFabricSDKIsInstalled) {
Set-ItResult -Inconclusive -Because "Service Fabric SDK Not Installed"
} else {
Mock Test-IsPackageReliableService -ModuleName $moduleForMock {
return $true;
}
Publish-AlkamiServiceFabricPackages -packages $packages;
Assert-MockCalled -ModuleName $moduleForMock New-AlkamiServiceFabricReliableServicePackage -Times 1 -Exactly -Scope It;
}
}
It "Correctly Builds a Microservice Package" {
if (!$serviceFabricSDKIsInstalled) {
Set-ItResult -Inconclusive -Because "Service Fabric SDK Not Installed"
} else {
Mock Test-IsPackageReliableService -ModuleName $moduleForMock {
return $false;
}
Publish-AlkamiServiceFabricPackages -packages $packages;
Assert-MockCalled -ModuleName $moduleForMock New-AlkamiServiceFabricPackage -Times 1 -Exactly -Scope It;
Assert-MockCalled -ModuleName $moduleForMock Format-AlkamiServiceFabricApplicationName -Times 1 -ParameterFilter {![string]::IsNullOrWhiteSpace($environmentName)} -Exactly -Scope It;
}
}
It "Registers Image with Full Name/Version/Environment" {
if (!$serviceFabricSDKIsInstalled) {
Set-ItResult -Inconclusive -Because "Service Fabric SDK Not Installed"
} else {
$podShortName = Format-AlkamiEnvironmentName -name $podName;
Publish-AlkamiServiceFabricPackages -packages $packages;
$package = $packages[0];
$imagePathName = "$($package.Name)-$($package.Version)-$podShortName";
Assert-MockCalled -ModuleName $moduleForMock Copy-ServiceFabricApplicationPackage -Times 1 #-ParameterFilter {$ApplicationPackagePathInImageStore -eq "$imagePathName"} -Exactly -Scope It;
}
}
}
}