ps/Modules/Alkami.PowerShell.Services/Public/Invoke-ServiceInstall.tests.ps1
2023-05-30 22:51:22 -07:00

138 lines
5.7 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 "Invoke-ServiceInstall" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Split-Path -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Get-PackageManifest -MockWith { return @{
ServiceManifest = @{
runtime = "core"
Migrations = @{
Assembly = @{
role = "MyAssemblyRole"
}
}
}
}
}
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestHasMigrations -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Split-Path -MockWith { return "Path" }
Mock -ModuleName $moduleForMock -CommandName Test-IsDeveloperMachine -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Test-IsAws -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Get-ChildItem -MockWith { return @{ FullName = "SomeName" } }
Mock -ModuleName $moduleForMock -CommandName Get-Content -MockWith {
$nuspec = @"
<package>
<metadata>
<id>SomePackageId</id>
<version>1.0.0</version>
</metadata>
</package>
"@
return ($nuspec)
}
Mock -ModuleName $moduleForMock -CommandName Invoke-AlkamiMigrationRunner -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Write-Host -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Write-Error -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Install-AlkamiService -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Install-LegacyMicroservice -MockWith { }
Mock -ModuleName $moduleForMock -CommandName Test-Path -MockWith { $true } -ParameterFilter {
$CallingFolder -eq "SomeFolder" -and $PathType -eq "Container" }
Context "When Migrations Should Be Run On A Developer Machine" {
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestRequiresDbAccess -MockWith { $true }
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestHasMigrations -MockWith { return $true }
Mock -ModuleName $moduleForMock -CommandName Test-IsDeveloperMachine -MockWith { return $true }
It "Runs Migrations" {
Invoke-ServiceInstall -CallingFolder "SomeFolder"
Assert-MockCalled -ModuleName $moduleForMock -CommandName Invoke-AlkamiMigrationRunner
}
}
Context "When Installing A DotNetCore Service" {
Mock -ModuleName $moduleForMock -CommandName Get-PackageManifest -MockWith { return @{
ServiceManifest = @{
runtime = "core"
Migrations = @{
Assembly = @{
role = "MyAssemblyRole"
}
}
}
}
}
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestRequiresDbAccess -MockWith { $true }
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestHasMigrations -MockWith { return $true }
Mock -ModuleName $moduleForMock -CommandName Test-IsDeveloperMachine -MockWith { return $false }
It "Calls Install-AlkamiService" {
Invoke-ServiceInstall -CallingFolder "SomeFolder"
Assert-MockCalled -ModuleName $moduleForMock -CommandName Install-AlkamiService
}
}
Context "When Installing A Legacy Framework Service" {
Mock -ModuleName $moduleForMock -CommandName Get-PackageManifest -MockWith { return @{
ServiceManifest = @{
runtime = "legacy"
Migrations = @{
Assembly = @{
role = "MyAssemblyRole"
}
}
}
}
}
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestRequiresDbAccess -MockWith { $true }
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestHasMigrations -MockWith { return $true }
Mock -ModuleName $moduleForMock -CommandName Test-IsDeveloperMachine -MockWith { return $false }
It "Calls Install-LegacyMicroservice" {
Invoke-ServiceInstall -CallingFolder "SomeFolder"
Assert-MockCalled -ModuleName $moduleForMock -CommandName Install-LegacyMicroservice
}
}
Context "When Framework Cannot Be Determined" {
Mock -ModuleName $moduleForMock -CommandName Get-PackageManifest -MockWith { return @{
ServiceManifest = @{
runtime = "blargh"
Migrations = @{
Assembly = @{
role = "MyAssemblyRole"
}
}
}
}
}
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestRequiresDbAccess -MockWith { $true }
Mock -ModuleName $moduleForMock -CommandName Test-ServiceManifestHasMigrations -MockWith { return $true }
Mock -ModuleName $moduleForMock -CommandName Test-IsDeveloperMachine -MockWith { return $false }
It "Writes An Error" {
Invoke-ServiceInstall -CallingFolder "SomeFolder"
Assert-MockCalled -ModuleName $moduleForMock -CommandName Write-Error -ParameterFilter { $Message -match "Nothing to install for" }
}
}
}