Files
gochat/backend/internal/llm/provider_manager_test.go
T

63 lines
2.0 KiB
Go

package llm
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestProviderManagerRequiresPageConfiguration(t *testing.T) {
manager := NewProviderManager()
_, err := manager.ChatCompletion(context.Background(), ChatRequest{})
require.ErrorIs(t, err, ErrProviderNotConfigured)
}
func TestProviderManagerClearRemovesActiveProvider(t *testing.T) {
manager := NewProviderManager()
require.NoError(t, manager.Configure(RuntimeProviderConfig{
ChatProvider: "openai",
ChatAPIKey: "test-key",
ChatModel: "test-model",
EmbeddingMode: EmbeddingModeReuseChat,
}))
manager.Clear()
_, configured := manager.Snapshot()
assert.False(t, configured)
_, err := manager.ChatCompletion(context.Background(), ChatRequest{})
require.ErrorIs(t, err, ErrProviderNotConfigured)
}
func TestProviderManagerUsesConfiguredDefaultModel(t *testing.T) {
var requestedModel string
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var payload ChatRequest
require.NoError(t, json.NewDecoder(r.Body).Decode(&payload))
requestedModel = payload.Model
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"id":"chat-1","object":"chat.completion","choices":[{"index":0,"message":{"role":"assistant","content":"ok"},"finish_reason":"stop"}]}`))
}))
defer server.Close()
manager := NewProviderManager()
require.NoError(t, manager.Configure(RuntimeProviderConfig{
ChatProvider: "openai_compatible",
ChatBaseURL: server.URL,
ChatAPIKey: "test-key",
ChatModel: "page-model",
EmbeddingMode: EmbeddingModeReuseChat,
}))
resp, err := manager.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "hello"}},
})
require.NoError(t, err)
assert.Equal(t, "page-model", requestedModel)
require.Len(t, resp.Choices, 1)
assert.Equal(t, "ok", resp.Choices[0].Message.Content)
}