1package config
2
3import (
4 "encoding/json"
5 "errors"
6 "os"
7 "testing"
8
9 "github.com/charmbracelet/crush/internal/fur/provider"
10 "github.com/stretchr/testify/assert"
11)
12
13type mockProviderClient struct {
14 shouldFail bool
15}
16
17func (m *mockProviderClient) GetProviders() ([]provider.Provider, error) {
18 if m.shouldFail {
19 return nil, errors.New("failed to load providers")
20 }
21 return []provider.Provider{
22 {
23 Name: "Mock",
24 },
25 }, nil
26}
27
28func TestProvider_loadProvidersNoIssues(t *testing.T) {
29 client := &mockProviderClient{shouldFail: false}
30 tmpPath := t.TempDir() + "/providers.json"
31 providers, err := loadProviders(tmpPath, client)
32 assert.NoError(t, err)
33 assert.NotNil(t, providers)
34 assert.Len(t, providers, 1)
35
36 // check if file got saved
37 fileInfo, err := os.Stat(tmpPath)
38 assert.NoError(t, err)
39 assert.False(t, fileInfo.IsDir(), "Expected a file, not a directory")
40}
41
42func TestProvider_loadProvidersWithIssues(t *testing.T) {
43 client := &mockProviderClient{shouldFail: true}
44 tmpPath := t.TempDir() + "/providers.json"
45 // store providers to a temporary file
46 oldProviders := []provider.Provider{
47 {
48 Name: "OldProvider",
49 },
50 }
51 data, err := json.Marshal(oldProviders)
52 if err != nil {
53 t.Fatalf("Failed to marshal old providers: %v", err)
54 }
55
56 err = os.WriteFile(tmpPath, data, 0o644)
57 if err != nil {
58 t.Fatalf("Failed to write old providers to file: %v", err)
59 }
60 providers, err := loadProviders(tmpPath, client)
61 assert.NoError(t, err)
62 assert.NotNil(t, providers)
63 assert.Len(t, providers, 1)
64 assert.Equal(t, "OldProvider", providers[0].Name, "Expected to keep old provider when loading fails")
65}
66
67func TestProvider_loadProvidersWithIssuesAndNoCache(t *testing.T) {
68 client := &mockProviderClient{shouldFail: true}
69 tmpPath := t.TempDir() + "/providers.json"
70 providers, err := loadProviders(tmpPath, client)
71 assert.Error(t, err)
72 assert.Nil(t, providers, "Expected nil providers when loading fails and no cache exists")
73}
74