Tests/Show-MultiColumnSlide.Tests.ps1

BeforeAll {
    Import-Module "$PSScriptRoot/../Deck.psd1" -Force
}

Describe 'Show-MultiColumnSlide' {
    BeforeAll {
        $mockSettings = @{
            background = 'Black'
            foreground = 'White'
            border = 'Blue'
            borderStyle = 'Rounded'
        }
    }

    Context 'Column detection' {
        It 'Detects ||| delimiter and splits content' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Left content|||Right content"
            }

            # Just verify it doesn't throw
            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles content with header' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = @"
### Two Column Header
Left content
|||
Right content
"@

            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles missing delimiter with warning' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Single column content"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings 3>&1 } | Should -Not -Throw
        }
    }

    Context 'Content formatting' {
        It 'Applies markdown formatting to left column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "**Bold left**|||Right"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Applies markdown formatting to right column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Left|||**Bold right**"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Applies markdown formatting to both columns' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "**Bold left**|||*Italic right*"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }
    }

    Context 'Multi-line content' {
        It 'Handles multiple lines in left column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = @"
Line 1 left
Line 2 left
Line 3 left
|||
Right
"@

            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles multiple lines in right column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = @"
Left
|||
Line 1 right
Line 2 right
Line 3 right
"@

            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles multiple lines in both columns' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = @"
Line 1 left
Line 2 left
|||
Line 1 right
Line 2 right
"@

            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }
    }

    Context 'Edge cases' {
        It 'Handles empty left column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "|||Right content"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles empty right column' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Left content|||"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles both columns empty' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "|||"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }
    }

    Context 'Multiple columns' {
        It 'Handles three columns' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Column 1|||Column 2|||Column 3"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles four columns' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "Col 1|||Col 2|||Col 3|||Col 4"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }

        It 'Handles columns with formatting' {
            $slide = [PSCustomObject]@{
                Number = 1
                Content = "**Bold**|||*Italic*|||~~Strike~~"
            }

            { Show-MultiColumnSlide -Slide $slide -Settings $mockSettings } | Should -Not -Throw
        }
    }
}