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