__tests__/Get-CompletionFromMessages.tests.ps1

Import-Module $PSScriptRoot\..\PowerShellAI.psd1 -Force

Describe "Get-CompletionFromMessages" -Tag "Get-CompletionFromMessages" {
    BeforeAll {
        $script:savedKey = $env:OpenAIKey
        $env:OpenAIKey = 'sk-1234567890'
    }
    
    AfterAll {
        $env:OpenAIKey = $savedKey
    }

    It "tests the function Get-CompletionFromMessages exists" {
        $actual = Get-Command Get-CompletionFromMessages -ErrorAction SilentlyContinue
        $actual | Should -Not -BeNullOrEmpty
    }

    It "tests Get-CompletionFromMessages has a parameter named Messages" {
        $actual = Get-Command Get-CompletionFromMessages -ErrorAction SilentlyContinue
        $actual.Parameters.Keys | Should -Contain Messages
    }

    It "tests Get-CompletionFromMessages returns a response" {
        Mock Invoke-RestMethodWithProgress -ModuleName PowerShellAI -ParameterFilter { 
            $Params.Method -eq 'Post' -and $Params.Uri -eq (Get-OpenAIChatCompletionUri) 
        } -MockWith {
            [PSCustomObject]@{
                choices = @(
                    [PSCustomObject]@{
                        message = [PSCustomObject]@{
                            content = 'Mocked Get-GPT4Completion call'
                        }
                    }
                )
            }
        } 
        
        $messages = $(
            New-ChatMessageTemplate -Role system "I am a bot"
            New-ChatMessageTemplate -Role user "Hello"
        )

        $actual = Get-CompletionFromMessages -Messages $messages

        $actual.content | Should -BeExactly "Mocked Get-GPT4Completion call"
    }
}