Tests/Test-DotEnv.Tests.ps1

BeforeAll {

    Set-StrictMode -Version "Latest"

    . "$PSScriptRoot\..\Source\ConvertFrom-DotEnv.ps1"
    . "$PSScriptRoot\..\Source\Test-DotEnv.ps1"

}

Describe "Test-DotEnv" {

    It "Returns true when the file exists" {

        $path = Join-Path -Path $TestDrive -ChildPath "exists.env"
        "KEY=value" | Set-Content -Path $path

        Test-DotEnv -Path $path | Should -BeTrue

    }

    It "Returns false when the file does not exist" {

        $path = Join-Path -Path $TestDrive -ChildPath "missing.env"

        Test-DotEnv -Path $path | Should -BeFalse

    }

    It "Returns true when the file has comment and blank lines mixed with valid pairs" {

        $path = Join-Path -Path $TestDrive -ChildPath "commented.env"
        "# comment`n`nKEY=value" | Set-Content -Path $path

        Test-DotEnv -Path $path | Should -BeTrue

    }

    It "Returns false when a non-comment, non-blank line is not in KEY=VALUE format" {

        $path = Join-Path -Path $TestDrive -ChildPath "malformed.env"
        "KEY=value`nNotKeyValue" | Set-Content -Path $path

        Test-DotEnv -Path $path | Should -BeFalse

    }

    It "Accepts the file path from the pipeline" {

        $validPath = Join-Path -Path $TestDrive -ChildPath "pipeline-valid.env"
        $missingPath = Join-Path -Path $TestDrive -ChildPath "pipeline-missing.env"
        "KEY=value" | Set-Content -Path $validPath

        $results = $validPath, $missingPath | Test-DotEnv

        $results | Should -Be @($true, $false)

    }

}