mirror of
https://github.com/navidrome/navidrome.git
synced 2025-07-14 15:41:18 +03:00
92 lines
1.9 KiB
Go
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)
|