navidrome/tests/mock_folder_repo.go
copilot-swe-agent[bot] e3a18d33fc Format code and fix linting issues
Co-authored-by: deluan <331353+deluan@users.noreply.github.com>
2025-05-22 11:57:00 +00:00

92 lines
1.9 KiB
Go

package tests
import (
"time"
"github.com/navidrome/navidrome/model"
)
type MockFolderRepo struct {
model.FolderRepository
Data map[string]*model.Folder
All []model.Folder
Options model.QueryOptions
}
func CreateMockFolderRepo() *MockFolderRepo {
return &MockFolderRepo{
Data: make(map[string]*model.Folder),
}
}
func (m *MockFolderRepo) SetData(folders []model.Folder) {
m.Data = make(map[string]*model.Folder, len(folders))
m.All = folders
for i := range m.All {
m.Data[m.All[i].ID] = &m.All[i]
}
}
func (m *MockFolderRepo) Get(id string) (*model.Folder, error) {
if d, ok := m.Data[id]; ok {
return d, nil
}
return nil, model.ErrNotFound
}
func (m *MockFolderRepo) GetByPath(lib model.Library, path string) (*model.Folder, error) {
for _, f := range m.All {
if f.LibraryID == lib.ID && f.Path+"/"+f.Name == path {
return &f, nil
}
}
return nil, model.ErrNotFound
}
func (m *MockFolderRepo) GetAll(qo ...model.QueryOptions) ([]model.Folder, error) {
if len(qo) > 0 {
m.Options = qo[0]
}
return m.All, nil
}
func (m *MockFolderRepo) CountAll(...model.QueryOptions) (int64, error) {
return int64(len(m.All)), nil
}
func (m *MockFolderRepo) Put(folder *model.Folder) error {
m.Data[folder.ID] = folder
return nil
}
func (m *MockFolderRepo) GetLastUpdates(lib model.Library) (map[string]time.Time, error) {
updates := make(map[string]time.Time)
for _, f := range m.All {
if f.LibraryID == lib.ID {
updates[f.Path+"/"+f.Name] = f.UpdateAt
}
}
return updates, nil
}
func (m *MockFolderRepo) MarkMissing(missing bool, ids ...string) error {
for _, id := range ids {
if f, ok := m.Data[id]; ok {
f.Missing = missing
}
}
return nil
}
func (m *MockFolderRepo) GetTouchedWithPlaylists() (model.FolderCursor, error) {
return func(yield func(model.Folder, error) bool) {
for _, f := range m.All {
if !yield(f, nil) {
break
}
}
}, nil
}
var _ model.FolderRepository = (*MockFolderRepo)(nil)