1package config
 2
 3import (
 4	"encoding/json"
 5	"os"
 6	"testing"
 7
 8	"github.com/charmbracelet/catwalk/pkg/catwalk"
 9	"github.com/stretchr/testify/require"
10)
11
12type emptyProviderClient struct{}
13
14func (m *emptyProviderClient) GetProviders() ([]catwalk.Provider, error) {
15	return []catwalk.Provider{}, nil
16}
17
18func TestProvider_loadProvidersEmptyResult(t *testing.T) {
19	// TODO: revert this test when beta is done
20	t.Skip("skip until beta is done")
21	client := &emptyProviderClient{}
22	tmpPath := t.TempDir() + "/providers.json"
23
24	providers, err := loadProviders(false, client, tmpPath)
25	require.Contains(t, err.Error(), "Crush was unable to fetch an updated list of providers")
26	require.Empty(t, providers)
27	require.Len(t, providers, 0)
28
29	// Check that no cache file was created for empty results
30	require.NoFileExists(t, tmpPath, "Cache file should not exist for empty results")
31}
32
33func TestProvider_loadProvidersEmptyCache(t *testing.T) {
34	t.Skip("skip until beta is done")
35	client := &mockProviderClient{shouldFail: false}
36	tmpPath := t.TempDir() + "/providers.json"
37
38	// Create an empty cache file
39	emptyProviders := []catwalk.Provider{}
40	data, err := json.Marshal(emptyProviders)
41	require.NoError(t, err)
42	require.NoError(t, os.WriteFile(tmpPath, data, 0o644))
43
44	// Should refresh and get real providers instead of using empty cache
45	providers, err := loadProviders(false, client, tmpPath)
46	require.NoError(t, err)
47	require.NotNil(t, providers)
48	require.Len(t, providers, 1)
49	require.Equal(t, "Mock", providers[0].Name)
50}