Exercises/Functions/func-non-terminating/tests.Tests.ps1

param([Parameter(Mandatory)][string]$SolutionPath)

BeforeAll {
    . $SolutionPath
}

Describe 'Get-ExistingPath' {
    BeforeAll {
        $existing = (New-Item -Path (Join-Path $TestDrive 'here.txt') -ItemType File -Force).FullName
        $missing1 = Join-Path $TestDrive 'missing1.txt'
        $missing2 = Join-Path $TestDrive 'missing2.txt'
    }
    It 'outputs existing paths' {
        Get-ExistingPath -Path $existing | Should -Be $existing
    }
    It 'continues past missing paths' {
        $out = Get-ExistingPath -Path $missing1, $existing -ErrorAction SilentlyContinue
        $out | Should -Be $existing
    }
    It 'records one error per missing path' {
        $null = Get-ExistingPath -Path $missing1, $existing, $missing2 -ErrorAction SilentlyContinue -ErrorVariable errs
        $errs.Count | Should -Be 2
    }
    It 'mentions the missing path in the error' {
        $null = Get-ExistingPath -Path $missing1 -ErrorAction SilentlyContinue -ErrorVariable errs
        "$($errs[0])" | Should -Match ([regex]::Escape('missing1.txt'))
    }
    It 'becomes terminating with -ErrorAction Stop' {
        { Get-ExistingPath -Path $missing1 -ErrorAction Stop } | Should -Throw
    }
}