provider_empty_test.go

 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}