Tests/SnapshotReleases.Tests.ps1

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

Describe 'Find-FirebirdSnapshotRelease' -Tag 'Unit' {
    BeforeEach {
        Mock Invoke-RestMethod {
            $allReleases = Get-Content "$PSScriptRoot/assets/github-snapshot-releases.json" -Raw | ConvertFrom-Json

            # Extract tag from the URI to return the correct release
            $tag = ($Uri -split '/')[-1]
            $release = $allReleases | Where-Object { $_.tag_name -eq $tag }
            if (-not $release) {
                throw "Release not found for tag: $tag"
            }
            return $release
        } -ModuleName 'PSFirebird'
    }

    It 'Returns snapshot info for v5.0-release linux-x64' {
        $result = Find-FirebirdSnapshotRelease -Branch 'v5.0-release' -RuntimeIdentifier 'linux-x64'
        $result | Should -Not -BeNullOrEmpty
        $result.Branch | Should -Be 'v5.0-release'
        $result.Tag | Should -Be 'snapshot-v5.0-release'
        $result.FileName | Should -BeLike 'Firebird-5.0.*-linux-x64.tar.gz'
        $result.Url | Should -BeLike 'https://github.com/FirebirdSQL/snapshots/releases/download/*'
        $result.Sha256 | Should -Not -BeNullOrEmpty
        $result.UploadedAt | Should -BeOfType [datetime]
    }

    It 'Returns snapshot info for v5.0-release linux-arm64' {
        $result = Find-FirebirdSnapshotRelease -Branch 'v5.0-release' -RuntimeIdentifier 'linux-arm64'
        $result.FileName | Should -BeLike 'Firebird-5.0.*-linux-arm64.tar.gz'
        $result.Sha256 | Should -Not -BeNullOrEmpty
    }

    It 'Returns snapshot info for master linux-x64' {
        $result = Find-FirebirdSnapshotRelease -Branch 'master' -RuntimeIdentifier 'linux-x64'
        $result.Branch | Should -Be 'master'
        $result.Tag | Should -Be 'snapshot-master'
        $result.FileName | Should -BeLike 'Firebird-6.0.*-linux-x64.tar.gz'
        $result.Sha256 | Should -Not -BeNullOrEmpty
    }

    It 'Returns snapshot info for v4.0 linux-x64' {
        $result = Find-FirebirdSnapshotRelease -Branch 'v4.0' -RuntimeIdentifier 'linux-x64'
        $result.Branch | Should -Be 'v4.0'
        $result.Tag | Should -Be 'snapshot-v4.0'
        $result.FileName | Should -BeLike 'Firebird-4.0.*.amd64.tar.gz'
        $result.Sha256 | Should -Not -BeNullOrEmpty
    }

    It 'Throws when no matching asset is found for v4.0 linux-arm64' {
        { Find-FirebirdSnapshotRelease -Branch 'v4.0' -RuntimeIdentifier 'linux-arm64' } |
            Should -Throw "*No 'linux-arm64' asset found*"
    }

    It 'Excludes debug and android assets' {
        $result = Find-FirebirdSnapshotRelease -Branch 'master' -RuntimeIdentifier 'linux-x64'
        $result.FileName | Should -Not -BeLike '*debug*'
        $result.FileName | Should -Not -BeLike '*android*'
    }
}