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}