Tests/Unit/GetCIEMSecret.Tests.ps1

BeforeAll {
    Remove-Module Devolutions.CIEM -Force -ErrorAction SilentlyContinue
    Import-Module (Join-Path $PSScriptRoot '..' '..' 'Devolutions.CIEM.psd1')
    Mock -ModuleName Devolutions.CIEM Write-CIEMLog {}
}

Describe 'Get-CIEMSecret' {

    Context 'when not in PSU context (Secret: drive absent)' {

        BeforeAll {
            Mock -ModuleName Devolutions.CIEM Get-PSDrive { $null } -ParameterFilter { $Name -eq 'Secret' }
        }

        It 'throws indicating PSU context is required' {
            { Get-CIEMSecret -Name 'TestSecret' } | Should -Throw '*Not running in PSU context*'
        }
    }

    Context 'when in PSU context and secret exists' {

        BeforeAll {
            Mock -ModuleName Devolutions.CIEM Get-PSDrive { [PSCustomObject]@{ Name = 'Secret' } } -ParameterFilter { $Name -eq 'Secret' }
            Mock -ModuleName Devolutions.CIEM Get-Item { 'my-secret-value' } -ParameterFilter { $Path -eq 'Secret:TestSecret' }
            $script:result = Get-CIEMSecret -Name 'TestSecret'
        }

        It 'returns the secret value' {
            $script:result | Should -Be 'my-secret-value'
        }
    }

    Context 'when in PSU context and secret does not exist' {

        BeforeAll {
            Mock -ModuleName Devolutions.CIEM Get-PSDrive { [PSCustomObject]@{ Name = 'Secret' } } -ParameterFilter { $Name -eq 'Secret' }
            Mock -ModuleName Devolutions.CIEM Get-Item { throw "Cannot find path 'Secret:MissingSecret'" } -ParameterFilter { $Path -eq 'Secret:MissingSecret' }
        }

        It 'throws when secret is not found' {
            { Get-CIEMSecret -Name 'MissingSecret' } | Should -Throw
        }
    }
}