62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package model
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/bjarneo/cliamp/internal/playback"
|
|
"github.com/bjarneo/cliamp/playlist"
|
|
)
|
|
|
|
type fakeNotifier struct {
|
|
updates []playback.State
|
|
seeked []time.Duration
|
|
}
|
|
|
|
func (f *fakeNotifier) Update(state playback.State) {
|
|
f.updates = append(f.updates, state)
|
|
}
|
|
|
|
func (f *fakeNotifier) Seeked(position time.Duration) {
|
|
f.seeked = append(f.seeked, position)
|
|
}
|
|
|
|
func TestAttachNotifierPublishesCurrentPlaybackState(t *testing.T) {
|
|
pl := playlist.New()
|
|
pl.Add(playlist.Track{
|
|
Title: "Song",
|
|
Artist: "Artist",
|
|
Album: "Album",
|
|
Path: "/tmp/song.mp3",
|
|
})
|
|
|
|
notifier := &fakeNotifier{}
|
|
m := Model{
|
|
player: &fakeEngine{},
|
|
playlist: pl,
|
|
}
|
|
|
|
next, _ := m.Update(AttachNotifier(notifier))
|
|
nextModel := next.(Model)
|
|
if nextModel.notifier != notifier {
|
|
t.Fatal("notifier was not attached to model")
|
|
}
|
|
if len(notifier.updates) != 1 {
|
|
t.Fatalf("notifier update count = %d, want 1", len(notifier.updates))
|
|
}
|
|
|
|
want := playback.State{
|
|
Status: playback.StatusPlaying,
|
|
Track: playback.Track{
|
|
Title: "Song",
|
|
Artist: "Artist",
|
|
Album: "Album",
|
|
URL: "/tmp/song.mp3",
|
|
Duration: time.Hour,
|
|
},
|
|
}
|
|
if got := notifier.updates[0]; got != want {
|
|
t.Fatalf("notifier update = %#v, want %#v", got, want)
|
|
}
|
|
}
|