__tests__/Set-AzureOpenAI.tests.ps1

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

Describe 'Set-AzureOpenAI' -Tag SetAzureOpenAI {

    BeforeEach {
        $savedAzureOpenAIKey = $env:AzureOpenAIKey
    }

    AfterEach {
        $env:AzureOpenAIKey = $savedAzureOpenAIKey        
    }

    AfterEach {
        Reset-ChatSessionOptions
        Reset-AzureOpenAIOptions
        Set-ChatAPIProvider -Provider 'OpenAI'
    }

    It 'Test if Set-AzureOpenAI function exists' {
        $actual = Get-Command Set-AzureOpenAI -ErrorAction SilentlyContinue
        $actual | Should -Not -BeNullOrEmpty
    }

    It 'Test Set-AzureOpenAI has these parameters' {
        $actual = Get-Command Set-AzureOpenAI -ErrorAction SilentlyContinue
        
        $keys = $actual.Parameters.keys

        $keys.Contains("Endpoint") | Should -BeTrue
        $keys.Contains("DeploymentName") | Should -BeTrue
        $keys.Contains("ApiVersion") | Should -BeTrue
        $keys.Contains("ApiKey") | Should -BeTrue
    }

    It 'Test if Set-AzureOpenAI parameter attributes' {
        $actual = Get-Command Set-AzureOpenAI | Select-Object -ExpandProperty Parameters

        $actual.Endpoint.Attributes.Mandatory | Should -BeTrue
        $actual.DeploymentName.Attributes.Mandatory | Should -BeTrue
        $actual.ApiVersion.Attributes.Mandatory | Should -BeTrue
        $actual.ApiKey.Attributes.Mandatory | Should -BeTrue
    }

    It 'Test passing in data to Set-AzureOpenAI' {
        Set-AzureOpenAI `
            -Endpoint https://myopenaiinstance.openai.azure.com `
            -DeploymentName myopenaiinstance `
            -ApiVersion 2023-03-15-preview `
            -ApiKey aayyzzbbcc

        $actual = Get-AzureOpenAIOptions

        $actual.Endpoint | Should -Be "https://myopenaiinstance.openai.azure.com"
        $actual.DeploymentName | Should -Be "myopenaiinstance"
        $actual.ApiVersion | Should -Be "2023-03-15-preview"

        Test-AzureOpenAIKey | Should -BeTrue
        Get-ChatAPIProvider | Should -Be "AzureOpenAI"
        
        $env:AzureOpenAIKey | Should -BeExactly "aayyzzbbcc"
    }
}