Tests/Private/Get-FilteredTreeItems.Tests.ps1

# ShowTree\Tests\Private\Get-FilteredTreeItems.Tests.ps1

InModuleScope ShowTree {

    BeforeAll {
        . "$PSScriptRoot/PrivateHelpers.ps1"
    }

    Describe "Get-FilteredTreeItems" {

        It "Excludes exact matches" {
            $items = @(
                New-TestItem -Name ".git"
                New-TestItem -Name ".github"
            )

            $result = Get-FilteredTreeItems -Items $items -Exclude ".git"

            $result.Name | Should -Not -Contain ".git"
            $result.Name | Should -Contain ".github"
        }

        It "Glob include resurrects items excluded by glob" {
            $items = @(
                New-TestItem -Name ".git"
                New-TestItem -Name ".github"
            )

            $result = Get-FilteredTreeItems -Items $items -Exclude ".*" -Include ".github"

            $result.Name | Should -Contain ".github"
            $result.Name | Should -Not -Contain ".git"
        }

        It "Exact exclude beats glob include" {
            $items = @(
                New-TestItem -Name ".git"
                New-TestItem -Name ".gitignore"
            )

            $result = Get-FilteredTreeItems -Items $items -Exclude ".git" -Include ".git*"

            $result.Name | Should -Not -Contain ".git"
            $result.Name | Should -Contain ".gitignore"
        }

        It "Include resurrects hidden items" {
            $items = @(
                New-TestItem -Name ".config" -Attributes ([IO.FileAttributes]::Hidden)
            )

            $result = Get-FilteredTreeItems -Items $items -HideHidden -Include ".config"

            $result.Name | Should -Contain ".config"
        }

        It "Preserves original ordering" {
            $items = @(
                New-TestItem -Name "a"
                New-TestItem -Name "b"
                New-TestItem -Name "c"
            )

            $result = Get-FilteredTreeItems -Items $items -Exclude "b"

            $result.Name | Should -Be @("a","c")
        }
    }
}