Tests/Connect-PiHole.Tests.ps1

Describe 'Connect-PiHole' -Tag 'Integration' {

    BeforeAll {
        $baseUrl   = $env:PIHOLE_URL
        $plainPass = $env:PIHOLE_PASSWORD

        if (-not $baseUrl -or -not $plainPass) {
            Write-Warning 'Skipping tests: Required environment variables PIHOLE_URL or PIHOLE_PASSWORD not set.'
            Skip 'Missing required test environment configuration.'
        }

        $credential = New-Object System.Management.Automation.PSCredential (
            'admin', (ConvertTo-SecureString $plainPass -AsPlainText -Force)
        )
    }

    It 'Returns a session object with expected properties' {
        $session = Connect-PiHole -BaseUrl $baseUrl -Credential $credential

        $session | Should -Not -BeNullOrEmpty
        $session | Should -BeOfType 'pscustomobject'

        $session.PSObject.Properties.Name | Should -Contain 'SessionId'
        $session.PSObject.Properties.Name | Should -Contain 'CsrfToken'
        $session.PSObject.Properties.Name | Should -Contain 'ExpiresAt'

        $session.SessionId | Should -Not -BeNullOrEmpty
        $session.ExpiresAt | Should -BeGreaterThan ([DateTime]::UtcNow)
    }

    It 'Throws on invalid credentials' {
        $badCred = New-Object System.Management.Automation.PSCredential (
            'admin', (ConvertTo-SecureString 'invalid-password' -AsPlainText -Force)
        )

        { Connect-PiHole -BaseUrl $baseUrl -Credential $badCred } | Should -Throw
    }
}