diff --git a/store/store_test.go b/store/store_test.go index 83ed38e5cce31eaf74b5c17ec92dd4c8de24eaa0..ceddf7e50f7c4e46d07ce8658d8d0ba9dfeb4c2f 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -27,7 +27,6 @@ import ( "reflect" "strconv" "testing" - "time" //"github.com/jinzhu/gorm" ) @@ -569,197 +568,3 @@ func TestFilesSourceHash(t *testing.T) { t.Fatalf("file should now have hash set to %q but has %q", hash, file.Source.Hash) } } - -// Playlists -// - -type playlistTestEntry struct { - uri string - duration *float64 -} - -func generateTestPlaylist(entries ...playlistTestEntry) (p Playlist) { - for _, entry := range entries { - e := PlaylistEntry{URI: entry.uri, Duration: entry.duration} - p.Entries = append(p.Entries, e) - } - return p -} - -func TestPlaylistsListCreateDelete(t *testing.T) { - store := newTestStore(t) - - playlists, err := store.ListPlaylists(testShowID, -1, -1) - if err != nil { - t.Fatalf("listing playlists of test show failed: %v", err) - } - if len(playlists) != 0 { - t.Fatalf("a newly created store should contain no playlists in test show but ListPlaylists returned: %v", playlists) - } - - playlists, err = store.ListPlaylists(uint64(0), -1, -1) - if err != nil { - t.Fatalf("listing playlists of not existing show shouldn't throw an error but returned: %v", err) - } - if len(playlists) != 0 { - t.Fatalf("listing playlists of not existing show should return and empty list but ListPlaylists returned: %v", playlists) - } - - in := generateTestPlaylist(playlistTestEntry{"audioin://1", nil}, playlistTestEntry{"http://stream.example.com/live.mp", nil}) - testPlaylist, err := store.CreatePlaylist(testShowID, in) - if err != ErrPlaylistHasMultipleNullDurationEntries { - t.Fatalf("creating playlist with more than one non-file entry without duration should fail with specific error but returned: %v", err) - } - testDuration := time.Second.Seconds() - in = generateTestPlaylist(playlistTestEntry{"audioin://1", &testDuration}, playlistTestEntry{"http://stream.example.com/live.mp", nil}) - testPlaylist, err = store.CreatePlaylist(testShowID, in) - if err != nil { - t.Fatalf("creating playlist in test show failed: %v", err) - } - - playlists, err = store.ListPlaylists(testShowID, -1, -1) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if len(playlists) != 1 { - t.Fatalf("ListPlaylists should return a single playlist but returned: %v", playlists) - } - - in1 := generateTestPlaylist(playlistTestEntry{"audioin://1", &testDuration}, playlistTestEntry{"http://stream.example.com/live.mp3", nil}) - _, err = store.CreatePlaylist(testShow1, in1) - if err != nil { - t.Fatalf("creating playlist in not existing show shouldn't throw an error but CreatePlaylist returned: %v", err) - } - in2 := generateTestPlaylist(playlistTestEntry{"https://stream.example.com/other.ogg", &testDuration}, playlistTestEntry{"audioin://2", nil}) - _, err = store.CreatePlaylist(testShow1, in2) - if err != nil { - t.Fatalf("creating playlist in not existing show shouldn't throw an error but CreatePlaylist returned: %v", err) - } - - shows, err := store.ListShows() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - checkShows(t, shows, []uint64{testShowID, testShow1}) - - playlists, err = store.ListPlaylists(testShow1, -1, -1) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if len(playlists) != 2 { - t.Fatalf("ListPlaylists should return two playlists but returned: %v", playlists) - } - - // clean up so next test can run with a clean DB, TODO: remove as soon as newTestStore() can re-init the DB - if err = store.DeleteShow(testShow1); err != nil { - t.Fatalf("unexpected error: %v", err) - } - - if err = store.DeletePlaylist(testShowID, testPlaylist.ID); err != nil { - t.Fatalf("deleting playlist %d of show '%d' failed: %v", testPlaylist.ID, testShowID, err) - } -} - -func TestPlaylistsCreateAndGet(t *testing.T) { - store := newTestStore(t) - - f := File{Size: 12345} - f.Source.URI = testSourceURI1 - f.Metadata.Artist = testFileArtist1 - f.Metadata.Album = testFileAlbum1 - f.Metadata.Title = testFileTitle1 - file1, err := store.CreateFile(testShow1, f) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - if _, err := store.GetPlaylist(testShow1, 0); err != ErrNotFound { - t.Fatalf("getting playlist in not-existing show should return ErrNotFound, but GetPlaylist returned: %v", err) - } - - p := generateTestPlaylist(playlistTestEntry{"http://stream.example.com/stream.mp3", nil}) - p.Entries = append(p.Entries, PlaylistEntry{File: &File{ShowID: file1.ShowID, ID: file1.ID}}) - list1, err := store.CreatePlaylist(testShow1, p) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - if _, err := store.GetPlaylist(testShow1, list1.ID); err != nil { - t.Fatalf("getting existing playlist from store shouldn't return an error, but GetPlaylist returned: %v", err) - } - // TODO: check if playlists are equal - - p = generateTestPlaylist(playlistTestEntry{"http://stream.example.com/other.mp3", nil}, playlistTestEntry{fmt.Sprintf("file://%d/%d", file1.ShowID, file1.ID), nil}) - if _, err = store.CreatePlaylist(testShow1, p); err != nil { - t.Fatalf("unexpected error: %v", err) - } - - playlists, err := store.ListPlaylists(testShow1, -1, -1) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if len(playlists) != 2 { - t.Fatalf("ListPlaylists should return two playlists but returned: %v", playlists) - } - // TODO: check playlists contains both lists -} - -// TODO: add test for pagination in store.ListePlaylists() - -// File usage -func TestFileUsage(t *testing.T) { - store := newTestStore(t) - - file := &File{Size: 12345} - file.Source.URI = testSourceURI1 - file.Metadata.Artist = testFileArtist1 - file.Metadata.Album = testFileAlbum1 - file.Metadata.Title = testFileTitle1 - file, err := store.CreateFile(testShow1, *file) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - lists, err := store.GetFileUsage(file.ShowID, file.ID) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if len(lists) != 0 { - t.Fatalf("file should be in use by any playlist but got %d entries in usage list", len(lists)) - } - - p := generateTestPlaylist(playlistTestEntry{"http://stream.example.com/stream.mp3", nil}) - p.Entries = append(p.Entries, PlaylistEntry{File: &File{ShowID: file.ShowID, ID: file.ID}}) - list, err := store.CreatePlaylist(testShow1, p) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - lists, err = store.GetFileUsage(file.ShowID, file.ID) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if len(lists) != 1 { - t.Fatalf("file should be used by exactly one playlist but got %d entries in usage list", len(lists)) - } - if lists[0].ID != list.ID { - t.Fatalf("file should be in use by playlist %d but entries of usage list only contains: %d", list.ID, lists[0].ID) - } - - err = store.DeleteFile(file.ShowID, file.ID) - errInUse, ok := err.(*ErrFileInUse) - if !ok { - t.Fatalf("deleting file that is in use should return an error of type ErrFileInUs, but returned: %v (type: %t)", err, err) - } - if len(errInUse.Playlists) != 1 || errInUse.Playlists[0].ID != list.ID { - t.Fatalf("usage reports invalid playlist-list: %+v", errInUse.Playlists) - } - - if err = store.DeletePlaylist(list.ShowID, list.ID); err != nil { - t.Fatalf("unexpected error: %v", err) - } - - if err = store.DeleteFile(file.ShowID, file.ID); err != nil { - t.Fatalf("unexpected error: %v", err) - } -}