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}