You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Koito/internal/mbz/mock.go

98 lines
2.7 KiB

package mbz
import (
"context"
"fmt"
"slices"
"github.com/google/uuid"
)
// implements a mock caller
type MbzMockCaller struct {
Artists map[uuid.UUID]*MusicBrainzArtist
ReleaseGroups map[uuid.UUID]*MusicBrainzReleaseGroup
Releases map[uuid.UUID]*MusicBrainzRelease
Tracks map[uuid.UUID]*MusicBrainzTrack
}
func (m *MbzMockCaller) GetReleaseGroup(ctx context.Context, id uuid.UUID) (*MusicBrainzReleaseGroup, error) {
releaseGroup, exists := m.ReleaseGroups[id]
if !exists {
return nil, fmt.Errorf("release group with ID %s not found", id)
}
return releaseGroup, nil
}
func (m *MbzMockCaller) GetRelease(ctx context.Context, id uuid.UUID) (*MusicBrainzRelease, error) {
release, exists := m.Releases[id]
if !exists {
return nil, fmt.Errorf("release group with ID %s not found", id)
}
return release, nil
}
func (m *MbzMockCaller) GetReleaseTitles(ctx context.Context, RGID uuid.UUID) ([]string, error) {
rg, exists := m.ReleaseGroups[RGID]
if !exists {
return nil, fmt.Errorf("release with ID %s not found", RGID)
}
var titles []string
for _, release := range rg.Releases {
if !slices.Contains(titles, release.Title) {
titles = append(titles, release.Title)
}
}
return titles, nil
}
func (m *MbzMockCaller) GetTrack(ctx context.Context, id uuid.UUID) (*MusicBrainzTrack, error) {
track, exists := m.Tracks[id]
if !exists {
return nil, fmt.Errorf("track with ID %s not found", id)
}
return track, nil
}
func (m *MbzMockCaller) GetArtistPrimaryAliases(ctx context.Context, id uuid.UUID) ([]string, error) {
artist, exists := m.Artists[id]
if !exists {
return nil, fmt.Errorf("artist with ID %s not found", id)
}
name := artist.Name
ss := make([]string, len(artist.Aliases)+1)
ss[0] = name
for i, alias := range artist.Aliases {
ss[i+1] = alias.Name
}
return ss, nil
}
func (m *MbzMockCaller) Shutdown() {}
type MbzErrorCaller struct{}
func (m *MbzErrorCaller) GetReleaseGroup(ctx context.Context, id uuid.UUID) (*MusicBrainzReleaseGroup, error) {
return nil, fmt.Errorf("error: GetReleaseGroup not implemented")
}
func (m *MbzErrorCaller) GetRelease(ctx context.Context, id uuid.UUID) (*MusicBrainzRelease, error) {
return nil, fmt.Errorf("error: GetRelease not implemented")
}
func (m *MbzErrorCaller) GetReleaseTitles(ctx context.Context, RGID uuid.UUID) ([]string, error) {
return nil, fmt.Errorf("error: GetReleaseTitles not implemented")
}
func (m *MbzErrorCaller) GetTrack(ctx context.Context, id uuid.UUID) (*MusicBrainzTrack, error) {
return nil, fmt.Errorf("error: GetTrack not implemented")
}
func (m *MbzErrorCaller) GetArtistPrimaryAliases(ctx context.Context, id uuid.UUID) ([]string, error) {
return nil, fmt.Errorf("error: GetArtistPrimaryAliases not implemented")
}
func (m *MbzErrorCaller) Shutdown() {}