1package config
 2
 3import (
 4	"testing"
 5
 6	"github.com/charmbracelet/crush/internal/fur/provider"
 7	"github.com/stretchr/testify/assert"
 8	"github.com/stretchr/testify/require"
 9)
10
11func TestProviders_MockEnabled(t *testing.T) {
12	originalUseMock := UseMockProviders
13	UseMockProviders = true
14	defer func() {
15		UseMockProviders = originalUseMock
16		ResetProviders()
17	}()
18
19	ResetProviders()
20	providers := Providers()
21	require.NotEmpty(t, providers)
22
23	providerIDs := make(map[provider.InferenceProvider]bool)
24	for _, p := range providers {
25		providerIDs[p.ID] = true
26	}
27
28	assert.True(t, providerIDs[provider.InferenceProviderAnthropic])
29	assert.True(t, providerIDs[provider.InferenceProviderOpenAI])
30	assert.True(t, providerIDs[provider.InferenceProviderGemini])
31}
32
33func TestProviders_ResetFunctionality(t *testing.T) {
34	UseMockProviders = true
35	defer func() {
36		UseMockProviders = false
37		ResetProviders()
38	}()
39
40	providers1 := Providers()
41	require.NotEmpty(t, providers1)
42
43	ResetProviders()
44	providers2 := Providers()
45	require.NotEmpty(t, providers2)
46
47	assert.Equal(t, len(providers1), len(providers2))
48}
49
50func TestProviders_ModelCapabilities(t *testing.T) {
51	originalUseMock := UseMockProviders
52	UseMockProviders = true
53	defer func() {
54		UseMockProviders = originalUseMock
55		ResetProviders()
56	}()
57
58	ResetProviders()
59	providers := Providers()
60
61	var openaiProvider provider.Provider
62	for _, p := range providers {
63		if p.ID == provider.InferenceProviderOpenAI {
64			openaiProvider = p
65			break
66		}
67	}
68	require.NotEmpty(t, openaiProvider.ID)
69
70	var foundReasoning, foundNonReasoning bool
71	for _, model := range openaiProvider.Models {
72		if model.CanReason && model.HasReasoningEffort {
73			foundReasoning = true
74		} else if !model.CanReason {
75			foundNonReasoning = true
76		}
77	}
78
79	assert.True(t, foundReasoning)
80	assert.True(t, foundNonReasoning)
81}