. $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 "Get-HelmDeploymentMetadata" { # Mock Helm Yaml values file with some globals and three services defined. $global:testHelmValuesFileContent = @' # Globals global: someBoolean: true # Config Map configMap: environmentType: Development alk-svc-rpc-iaccountservicecontract-v2: serviceName: "alk-svc-rpc-iaccountservicecontract-v2" image: alkami.microservices.iaccountservicecontract.netcore tag: 1.0.0 alk-svc-rpc-isettingsservicecontract-v4: serviceName: "alk-svc-rpc-isettingsservicecontract-v4" image: alkami.microservices.isettingsservicecontract.netcore tag: 2.0.0 alk-svc-rpc-itransactionservicecontract-v1: serviceName: "alk-svc-rpc-isettingsservicecontract-v1" image: alkami.microservices.itransactionservicecontract.netcore tag: 3.0.0 firstVariable: secondVariable: testValue '@ Context "Get-HelmDeploymentMetadata Contains Expected Data" { Mock -ModuleName $moduleForMock -CommandName Test-Path -MockWith { return $true } Mock -ModuleName $moduleForMock -CommandName Get-Content -MockWith { return $testHelmValuesFileContent } Mock -ModuleName $moduleForMock -CommandName Write-Error -MockWith {} $result = Get-HelmDeploymentMetadata -RepoPath "C:/does/not/matter/its/mocked" It "should contain all expected services" { $result.count | Should -Be 3 $result | Where-Object { $_.serviceName -eq "alk-svc-rpc-iaccountservicecontract-v2" } | Should -Not -BeNullOrEmpty $result | Where-Object { $_.serviceName -eq "alk-svc-rpc-isettingsservicecontract-v4" } | Should -Not -BeNullOrEmpty $result | Where-Object { $_.serviceName -eq "alk-svc-rpc-isettingsservicecontract-v1" } | Should -Not -BeNullOrEmpty } It "should not contain globals or configmaps" { $result | Where-Object { $_.someBoolean -eq $true } | Should -BeNull $result | Where-Object { $_.environmentType -eq "Development" } | Should -BeNull } It "contains arbitrary multi-level data" { $settingsService = $result | Where-Object { $_.serviceName -eq "alk-svc-rpc-isettingsservicecontract-v1" } $settingsService | Should -Not -BeNullOrEmpty $settingsService.firstVariable.secondVariable | Should -Be "testValue" } It "did not write an error" { Assert-MockCalled -ModuleName $moduleForMock -CommandName Write-Error -Times 0 -Scope Context } } Context "Get-HelmDeploymentMetadata Expected Failures" { Mock -ModuleName $moduleForMock -CommandName Write-Error -MockWith {} It "should fail if the repository path is bad" { Mock -ModuleName $moduleForMock -CommandName Test-Path -ParameterFilter { $Path -eq "./BadRepoPath" } -MockWith { return $false } $result = Get-HelmDeploymentMetadata -RepoPath "./BadRepoPath" $result | Should -BeNullOrEmpty Assert-MockCalled -ModuleName $moduleForMock -CommandName Write-Error -Times 1 -Scope Context } It "should fail if the values file is missing" { Mock -ModuleName $moduleForMock -CommandName Test-Path -ParameterFilter { $Path -eq "./GoodRepositoryPath" } -MockWith { return $true } Mock -ModuleName $moduleForMock -CommandName Test-Path -ParameterFilter { $Path -eq "./GoodRepositoryPath/alkami-services/values.yaml" } -MockWith { return $false } $result = Get-HelmDeploymentMetadata -RepoPath "./GoodRepositoryPath" $result | Should -BeNullOrEmpty Assert-MockCalled -ModuleName $moduleForMock -CommandName Write-Error -Times 1 -Scope Context } } }