1package config
2
3import (
4 "context"
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(context.Context, string) ([]catwalk.Provider, error) {
15 return []catwalk.Provider{}, nil
16}
17
18// TestCatwalkSync_GetEmptyResultFromClient tests that when the client returns
19// an empty list, we fall back to cached providers and return an error.
20func TestCatwalkSync_GetEmptyResultFromClient(t *testing.T) {
21 t.Parallel()
22
23 tmpDir := t.TempDir()
24 path := tmpDir + "/providers.json"
25
26 syncer := &catwalkSync{}
27 client := &emptyProviderClient{}
28
29 syncer.Init(client, path, true)
30
31 providers, err := syncer.Get(t.Context())
32 require.Error(t, err)
33 require.Contains(t, err.Error(), "empty providers list from catwalk")
34 require.NotEmpty(t, providers) // Should have embedded providers as fallback.
35
36 // Check that no cache file was created for empty results.
37 _, statErr := os.Stat(path)
38 require.True(t, os.IsNotExist(statErr), "Cache file should not exist for empty results")
39}