Tests/Get-FirebirdVersion.Tests.ps1

Import-Module "$PSScriptRoot/../PSFirebird.psd1" -Force

Describe 'Get-FirebirdVersion' -Tag 'Unit' {
    It 'Parses a Firebird 5.x Linux version string' {
        $result = Get-FirebirdVersion 'LI-V5.0.3.1683 Firebird 5.0'
        $result.Platform | Should -Be 'Linux'
        $result.Version | Should -Be '5.0.3'
        $result.Build | Should -Be 1683
        $result.ServerName | Should -Be 'Firebird 5.0'
    }

    It 'Parses a Firebird 4.x Windows version string' {
        $result = Get-FirebirdVersion 'WI-V4.0.5.3140 Firebird 4.0'
        $result.Platform | Should -Be 'Windows'
        $result.Version | Should -Be '4.0.5'
        $result.Build | Should -Be 3140
        $result.ServerName | Should -Be 'Firebird 4.0'
    }

    It 'Parses a Firebird 3.x version string' {
        $result = Get-FirebirdVersion 'LI-V3.0.12.33787 Firebird 3.0'
        $result.Platform | Should -Be 'Linux'
        $result.Version | Should -Be '3.0.12'
        $result.Build | Should -Be 33787
        $result.ServerName | Should -Be 'Firebird 3.0'
    }

    It 'Parses a version string without server name' {
        $result = Get-FirebirdVersion 'LI-V5.0.3.1683'
        $result.Platform | Should -Be 'Linux'
        $result.Version | Should -Be '5.0.3'
        $result.Build | Should -Be 1683
        $result.ServerName | Should -BeNullOrEmpty
    }

    It 'Returns [semver] type for Version property' {
        $result = Get-FirebirdVersion 'LI-V5.0.3.1683 Firebird 5.0'
        $result.Version | Should -BeOfType [semver]
    }

    It 'Accepts pipeline input' {
        $result = 'WI-V4.0.5.3140 Firebird 4.0' | Get-FirebirdVersion
        $result.Platform | Should -Be 'Windows'
        $result.Version | Should -Be '4.0.5'
    }

    It 'Throws on invalid version string' {
        { Get-FirebirdVersion 'not-a-version' } | Should -Throw '*Cannot parse Firebird version string*'
    }

    It 'Parses multiple strings from pipeline' {
        $results = @(
            'LI-V5.0.3.1683 Firebird 5.0'
            'WI-V4.0.5.3140 Firebird 4.0'
            'LI-V3.0.12.33787 Firebird 3.0'
        ) | Get-FirebirdVersion

        $results.Count | Should -Be 3
        $results[0].Version | Should -Be '5.0.3'
        $results[1].Version | Should -Be '4.0.5'
        $results[2].Version | Should -Be '3.0.12'
    }
}