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