supabase-cli/internal/utils/credentials/store_mock.go

69 lines
1.5 KiB
Go

package credentials
import (
"github.com/zalando/go-keyring"
)
type mockProvider struct {
mockStore map[string]map[string]string
mockError error
}
// Get retrieves the password for a project from the mock store.
func (m *mockProvider) Get(project string) (string, error) {
if m.mockError != nil {
return "", m.mockError
}
if pass, ok := m.mockStore[namespace][project]; ok {
return pass, nil
}
return "", keyring.ErrNotFound
}
// Set stores the password for a project in the mock store.
func (m *mockProvider) Set(project, password string) error {
if m.mockError != nil {
return m.mockError
}
if m.mockStore == nil {
m.mockStore = make(map[string]map[string]string)
}
if m.mockStore[namespace] == nil {
m.mockStore[namespace] = make(map[string]string)
}
m.mockStore[namespace][project] = password
return nil
}
// Delete removes the password for a project from the mock store.
func (m *mockProvider) Delete(project string) error {
if m.mockError != nil {
return m.mockError
}
if _, ok := m.mockStore[namespace][project]; ok {
delete(m.mockStore[namespace], project)
return nil
}
return keyring.ErrNotFound
}
// DeleteAll removes all passwords from the mock store.
func (m *mockProvider) DeleteAll() error {
if m.mockError != nil {
return m.mockError
}
delete(m.mockStore, namespace)
return nil
}
func MockInit() func() {
oldStore := StoreProvider
teardown := func() {
StoreProvider = oldStore
}
StoreProvider = &mockProvider{
mockStore: map[string]map[string]string{},
}
return teardown
}