2025-04-01 10:38:02 +09:00

79 lines
2.7 KiB
Go

package fakes
import (
"context"
"strings"
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
type FakeProvisioningStore struct {
Calls []Call
Records map[int64]map[string]models.Provenance
GetProvenanceFunc func(ctx context.Context, o models.Provisionable, org int64) (models.Provenance, error)
GetProvenancesFunc func(ctx context.Context, orgID int64, resourceType string) (map[string]models.Provenance, error)
SetProvenanceFunc func(ctx context.Context, o models.Provisionable, org int64, p models.Provenance) error
DeleteProvenanceFunc func(ctx context.Context, o models.Provisionable, org int64) error
}
func NewFakeProvisioningStore() *FakeProvisioningStore {
return &FakeProvisioningStore{
Records: map[int64]map[string]models.Provenance{},
}
}
func (f *FakeProvisioningStore) GetProvenance(ctx context.Context, o models.Provisionable, org int64) (models.Provenance, error) {
f.Calls = append(f.Calls, Call{MethodName: "GetProvenance", Arguments: []any{ctx, o, org}})
if f.GetProvenanceFunc != nil {
return f.GetProvenanceFunc(ctx, o, org)
}
if val, ok := f.Records[org]; ok {
if prov, ok := val[o.ResourceID()+o.ResourceType()]; ok {
return prov, nil
}
}
return models.ProvenanceNone, nil
}
func (f *FakeProvisioningStore) GetProvenances(ctx context.Context, orgID int64, resourceType string) (map[string]models.Provenance, error) {
f.Calls = append(f.Calls, Call{MethodName: "GetProvenances", Arguments: []any{ctx, orgID, resourceType}})
if f.GetProvenancesFunc != nil {
return f.GetProvenancesFunc(ctx, orgID, resourceType)
}
results := make(map[string]models.Provenance)
if val, ok := f.Records[orgID]; ok {
for k, v := range val {
if strings.HasSuffix(k, resourceType) {
results[strings.TrimSuffix(k, resourceType)] = v
}
}
}
return results, nil
}
func (f *FakeProvisioningStore) SetProvenance(ctx context.Context, o models.Provisionable, org int64, p models.Provenance) error {
f.Calls = append(f.Calls, Call{MethodName: "SetProvenance", Arguments: []any{ctx, o, org, p}})
if f.SetProvenanceFunc != nil {
return f.SetProvenanceFunc(ctx, o, org, p)
}
if _, ok := f.Records[org]; !ok {
f.Records[org] = map[string]models.Provenance{}
}
if val, ok := f.Records[org]; ok {
delete(val, o.ResourceID()+o.ResourceType())
}
f.Records[org][o.ResourceID()+o.ResourceType()] = p
return nil
}
func (f *FakeProvisioningStore) DeleteProvenance(ctx context.Context, o models.Provisionable, org int64) error {
f.Calls = append(f.Calls, Call{MethodName: "DeleteProvenance", Arguments: []any{ctx, o, org}})
if f.DeleteProvenanceFunc != nil {
return f.DeleteProvenanceFunc(ctx, o, org)
}
if val, ok := f.Records[org]; ok {
delete(val, o.ResourceID()+o.ResourceType())
}
return nil
}