package app import ( "context" "reflect" "testing" "time" sharedcache "github.com/geo-platform/tenant-api/internal/shared/cache" ) type recordingCache struct { deletedKeys []string deletedPrefixes []string } func (c *recordingCache) Get(context.Context, string) ([]byte, error) { return nil, sharedcache.ErrNotFound } func (c *recordingCache) GetMulti(context.Context, []string) (map[string][]byte, error) { return map[string][]byte{}, nil } func (c *recordingCache) Set(context.Context, string, []byte, time.Duration) error { return nil } func (c *recordingCache) SetMulti(context.Context, []sharedcache.Item) error { return nil } func (c *recordingCache) Delete(_ context.Context, key string) error { c.deletedKeys = append(c.deletedKeys, key) return nil } func (c *recordingCache) DeleteMany(_ context.Context, keys []string) error { c.deletedKeys = append(c.deletedKeys, keys...) return nil } func (c *recordingCache) DeletePrefix(_ context.Context, prefix string) error { c.deletedPrefixes = append(c.deletedPrefixes, prefix) return nil } func TestKolSubscriptionInvalidateAccessCaches(t *testing.T) { cache := &recordingCache{} svc := NewKolSubscriptionService(nil, nil).WithCache(cache) svc.invalidateAccessCaches(context.Background(), 42) if want := []string{"workspace:kol_cards:42"}; !reflect.DeepEqual(cache.deletedKeys, want) { t.Fatalf("deleted keys = %v, want %v", cache.deletedKeys, want) } wantPrefixes := []string{ "kol:subscription_prompt:list:42:", "kol:subscription_prompt:schema:42:", } if !reflect.DeepEqual(cache.deletedPrefixes, wantPrefixes) { t.Fatalf("deleted prefixes = %v, want %v", cache.deletedPrefixes, wantPrefixes) } }