use package level require/assert in tests (#382)
This commit is contained in:
@@ -26,8 +26,6 @@ func TestGetSetting(t *testing.T) {
|
||||
key := SettingKey(randKey())
|
||||
value := "howdy"
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
testDB, err := NewMock()
|
||||
if err != nil {
|
||||
t.Fatalf("error creating db: %v", err)
|
||||
@@ -36,16 +34,16 @@ func TestGetSetting(t *testing.T) {
|
||||
t.Fatalf("error migrating db: %v", err)
|
||||
}
|
||||
|
||||
require.NoError(testDB.SetSetting(key, value))
|
||||
require.NoError(t, testDB.SetSetting(key, value))
|
||||
|
||||
actual, err := testDB.GetSetting(key)
|
||||
require.NoError(err)
|
||||
require.Equal(value, actual)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, value, actual)
|
||||
|
||||
require.NoError(testDB.SetSetting(key, value))
|
||||
require.NoError(t, testDB.SetSetting(key, value))
|
||||
actual, err = testDB.GetSetting(key)
|
||||
require.NoError(err)
|
||||
require.Equal(value, actual)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, value, actual)
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
|
||||
@@ -38,9 +38,8 @@ func TestPlaySkipReset(t *testing.T) {
|
||||
|
||||
t.Parallel()
|
||||
j := newJukebox(t)
|
||||
require := require.New(t)
|
||||
|
||||
require.NoError(j.SetPlaylist([]string{
|
||||
require.NoError(t, j.SetPlaylist([]string{
|
||||
testPath("tr_0.mp3"),
|
||||
testPath("tr_1.mp3"),
|
||||
testPath("tr_2.mp3"),
|
||||
@@ -49,56 +48,56 @@ func TestPlaySkipReset(t *testing.T) {
|
||||
}))
|
||||
|
||||
status, err := j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(0, status.CurrentIndex)
|
||||
require.Equal(testPath("tr_0.mp3"), status.CurrentFilename)
|
||||
require.Equal(5, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, status.CurrentIndex)
|
||||
require.Equal(t, testPath("tr_0.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 5, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
items, err := j.GetPlaylist()
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
itemsSorted := append([]string(nil), items...)
|
||||
sort.Strings(itemsSorted)
|
||||
require.Equal(itemsSorted, items)
|
||||
require.Equal(t, itemsSorted, items)
|
||||
|
||||
require.NoError(j.Play())
|
||||
require.NoError(t, j.Play())
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
require.NoError(j.Pause())
|
||||
require.NoError(t, j.Pause())
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(false, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, false, status.Playing)
|
||||
|
||||
require.NoError(j.Play())
|
||||
require.NoError(t, j.Play())
|
||||
|
||||
// skip to 2
|
||||
require.NoError(j.SkipToPlaylistIndex(2, 0))
|
||||
require.NoError(t, j.SkipToPlaylistIndex(2, 0))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(2, status.CurrentIndex)
|
||||
require.Equal(testPath("tr_2.mp3"), status.CurrentFilename)
|
||||
require.Equal(5, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, status.CurrentIndex)
|
||||
require.Equal(t, testPath("tr_2.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 5, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
// skip to 3
|
||||
require.NoError(j.SkipToPlaylistIndex(3, 0))
|
||||
require.NoError(t, j.SkipToPlaylistIndex(3, 0))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(3, status.CurrentIndex)
|
||||
require.Equal(testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(5, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 3, status.CurrentIndex)
|
||||
require.Equal(t, testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 5, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
// just add one more by overwriting the playlist like some clients do
|
||||
// we should keep the current track unchaned if we find it
|
||||
require.NoError(j.SetPlaylist([]string{
|
||||
require.NoError(t, j.SetPlaylist([]string{
|
||||
"testdata/tr_0.mp3",
|
||||
"testdata/tr_1.mp3",
|
||||
"testdata/tr_2.mp3",
|
||||
@@ -108,24 +107,24 @@ func TestPlaySkipReset(t *testing.T) {
|
||||
}))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(3, status.CurrentIndex) // index unchanged
|
||||
require.Equal(testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(6, status.Length) // we added one more track
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 3, status.CurrentIndex) // index unchanged
|
||||
require.Equal(t, testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 6, status.Length) // we added one more track
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
// skip to 3 again
|
||||
require.NoError(j.SkipToPlaylistIndex(3, 0))
|
||||
require.NoError(t, j.SkipToPlaylistIndex(3, 0))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(3, status.CurrentIndex)
|
||||
require.Equal(testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(6, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 3, status.CurrentIndex)
|
||||
require.Equal(t, testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 6, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
// remove all but 3
|
||||
require.NoError(j.SetPlaylist([]string{
|
||||
require.NoError(t, j.SetPlaylist([]string{
|
||||
"testdata/tr_0.mp3",
|
||||
"testdata/tr_1.mp3",
|
||||
"testdata/tr_2.mp3",
|
||||
@@ -133,25 +132,25 @@ func TestPlaySkipReset(t *testing.T) {
|
||||
}))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(3, status.CurrentIndex) // index unchanged
|
||||
require.Equal(testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(4, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 3, status.CurrentIndex) // index unchanged
|
||||
require.Equal(t, testPath("tr_3.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 4, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
|
||||
// skip to 2 (5s long) in the middle of the track
|
||||
require.NoError(j.SkipToPlaylistIndex(2, 2))
|
||||
require.NoError(t, j.SkipToPlaylistIndex(2, 2))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(2, status.CurrentIndex) // index unchanged
|
||||
require.Equal(testPath("tr_2.mp3"), status.CurrentFilename)
|
||||
require.Equal(4, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.Equal(2, status.Position) // at new position
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 2, status.CurrentIndex) // index unchanged
|
||||
require.Equal(t, testPath("tr_2.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 4, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
require.Equal(t, 2, status.Position) // at new position
|
||||
|
||||
// overwrite completely
|
||||
require.NoError(j.SetPlaylist([]string{
|
||||
require.NoError(t, j.SetPlaylist([]string{
|
||||
"testdata/tr_5.mp3",
|
||||
"testdata/tr_6.mp3",
|
||||
"testdata/tr_7.mp3",
|
||||
@@ -160,33 +159,32 @@ func TestPlaySkipReset(t *testing.T) {
|
||||
}))
|
||||
|
||||
status, err = j.GetStatus()
|
||||
require.NoError(err)
|
||||
require.Equal(0, status.CurrentIndex) // index unchanged
|
||||
require.Equal(testPath("tr_5.mp3"), status.CurrentFilename)
|
||||
require.Equal(5, status.Length)
|
||||
require.Equal(true, status.Playing)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, status.CurrentIndex) // index unchanged
|
||||
require.Equal(t, testPath("tr_5.mp3"), status.CurrentFilename)
|
||||
require.Equal(t, 5, status.Length)
|
||||
require.Equal(t, true, status.Playing)
|
||||
}
|
||||
|
||||
func TestVolume(t *testing.T) {
|
||||
t.Parallel()
|
||||
j := newJukebox(t)
|
||||
require := require.New(t)
|
||||
|
||||
vol, err := j.GetVolumePct()
|
||||
require.NoError(err)
|
||||
require.Equal(100.0, vol)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 100.0, vol)
|
||||
|
||||
require.NoError(j.SetVolumePct(69.0))
|
||||
require.NoError(t, j.SetVolumePct(69.0))
|
||||
|
||||
vol, err = j.GetVolumePct()
|
||||
require.NoError(err)
|
||||
require.Equal(69.0, vol)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 69.0, vol)
|
||||
|
||||
require.NoError(j.SetVolumePct(0.0))
|
||||
require.NoError(t, j.SetVolumePct(0.0))
|
||||
|
||||
vol, err = j.GetVolumePct()
|
||||
require.NoError(err)
|
||||
require.Equal(0.0, vol)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0.0, vol)
|
||||
}
|
||||
|
||||
func testPath(path string) string {
|
||||
|
||||
@@ -10,20 +10,18 @@ import (
|
||||
func TestPlaylist(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
tmp := t.TempDir()
|
||||
store, err := playlist.NewStore(tmp)
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
playlistIDs, err := store.List()
|
||||
require.NoError(err)
|
||||
require.Empty(playlistIDs)
|
||||
require.NoError(t, err)
|
||||
require.Empty(t, playlistIDs)
|
||||
|
||||
for _, playlistID := range playlistIDs {
|
||||
playlist, err := store.Read(playlistID)
|
||||
require.NoError(err)
|
||||
require.NotZero(playlist.UpdatedAt)
|
||||
require.NoError(t, err)
|
||||
require.NotZero(t, playlist.UpdatedAt)
|
||||
}
|
||||
|
||||
before := playlist.Playlist{
|
||||
@@ -42,18 +40,18 @@ It has multiple lines 👍
|
||||
}
|
||||
|
||||
newPath := playlist.NewPath(before.UserID, before.Name)
|
||||
require.NoError(store.Write(newPath, &before))
|
||||
require.NoError(t, store.Write(newPath, &before))
|
||||
|
||||
after, err := store.Read(newPath)
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(after.UserID, before.UserID)
|
||||
require.Equal(after.Name, before.Name)
|
||||
require.Equal(after.Comment, before.Comment)
|
||||
require.Equal(after.Items, before.Items)
|
||||
require.Equal(after.IsPublic, before.IsPublic)
|
||||
require.Equal(t, after.UserID, before.UserID)
|
||||
require.Equal(t, after.Name, before.Name)
|
||||
require.Equal(t, after.Comment, before.Comment)
|
||||
require.Equal(t, after.Items, before.Items)
|
||||
require.Equal(t, after.IsPublic, before.IsPublic)
|
||||
|
||||
playlistIDs, err = store.List()
|
||||
require.NoError(err)
|
||||
require.True(len(playlistIDs) == 1)
|
||||
require.NoError(t, err)
|
||||
require.True(t, len(playlistIDs) == 1)
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ func TestPodcastsAndEpisodesWithSameName(t *testing.T) {
|
||||
t.Skip("requires network access")
|
||||
|
||||
m := mockfs.New(t)
|
||||
require := require.New(t)
|
||||
|
||||
base := t.TempDir()
|
||||
podcasts := New(m.DB(), base, m.TagReader())
|
||||
@@ -34,33 +33,33 @@ func TestPodcastsAndEpisodesWithSameName(t *testing.T) {
|
||||
}
|
||||
|
||||
podcast, err := podcasts.AddNewPodcast("file://testdata/rss.new", newFeed)
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(podcast.RootDir, filepath.Join(base, "InternetBox"))
|
||||
require.Equal(t, podcast.RootDir, filepath.Join(base, "InternetBox"))
|
||||
|
||||
podcast, err = podcasts.AddNewPodcast("file://testdata/rss.new", newFeed)
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// check we made a unique podcast name
|
||||
require.Equal(podcast.RootDir, filepath.Join(base, "InternetBox (1)"))
|
||||
require.Equal(t, podcast.RootDir, filepath.Join(base, "InternetBox (1)"))
|
||||
|
||||
podcastEpisodes, err := podcasts.GetNewestPodcastEpisodes(10)
|
||||
require.NoError(err)
|
||||
require.Greater(len(podcastEpisodes), 0)
|
||||
require.NoError(t, err)
|
||||
require.Greater(t, len(podcastEpisodes), 0)
|
||||
|
||||
var pe []*db.PodcastEpisode
|
||||
require.NoError(m.DB().Order("id").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
|
||||
require.Len(pe, 2)
|
||||
require.NoError(t, m.DB().Order("id").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
|
||||
require.Len(t, pe, 2)
|
||||
|
||||
require.NoError(podcasts.DownloadEpisode(pe[0].ID))
|
||||
require.NoError(podcasts.DownloadEpisode(pe[1].ID))
|
||||
require.NoError(t, podcasts.DownloadEpisode(pe[0].ID))
|
||||
require.NoError(t, podcasts.DownloadEpisode(pe[1].ID))
|
||||
|
||||
require.NoError(m.DB().Order("id").Preload("Podcast").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
|
||||
require.Len(pe, 2)
|
||||
require.NoError(t, m.DB().Order("id").Preload("Podcast").Find(&pe, "podcast_id=? AND title=?", podcast.ID, "Episode 126").Error)
|
||||
require.Len(t, pe, 2)
|
||||
|
||||
// check we made a unique podcast episode names
|
||||
require.Equal("InternetBoxEpisode126.mp3", pe[0].Filename)
|
||||
require.Equal("InternetBoxEpisode126 (1).mp3", pe[1].Filename)
|
||||
require.Equal(t, "InternetBoxEpisode126.mp3", pe[0].Filename)
|
||||
require.Equal(t, "InternetBoxEpisode126 (1).mp3", pe[1].Filename)
|
||||
}
|
||||
|
||||
func TestGetMoreRecentEpisodes(t *testing.T) {
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.senan.xyz/gonic/db"
|
||||
"go.senan.xyz/gonic/mockfs"
|
||||
@@ -26,72 +25,68 @@ func TestMain(m *testing.M) {
|
||||
|
||||
func TestTableCounts(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
m.ScanAndClean()
|
||||
|
||||
var tracks int
|
||||
assert.NoError(m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
||||
assert.Equal(tracks, m.NumTracks())
|
||||
assert.NoError(t, m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
||||
assert.Equal(t, tracks, m.NumTracks())
|
||||
|
||||
var albums int
|
||||
assert.NoError(m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
||||
assert.Equal(albums, 13) // not all albums
|
||||
assert.NoError(t, m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
||||
assert.Equal(t, albums, 13) // not all albums
|
||||
|
||||
var artists int
|
||||
assert.NoError(m.DB().Model(&db.Artist{}).Count(&artists).Error) // not all artists
|
||||
assert.Equal(artists, 3) // not all artists
|
||||
assert.NoError(t, m.DB().Model(&db.Artist{}).Count(&artists).Error) // not all artists
|
||||
assert.Equal(t, artists, 3) // not all artists
|
||||
}
|
||||
|
||||
func TestWithExcludePattern(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.NewWithExcludePattern(t, "\\/artist-1\\/|track-0.flac$")
|
||||
|
||||
m.AddItems()
|
||||
m.ScanAndClean()
|
||||
|
||||
var tracks int
|
||||
assert.NoError(m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
||||
assert.Equal(tracks, 12)
|
||||
assert.NoError(t, m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
||||
assert.Equal(t, tracks, 12)
|
||||
|
||||
var albums int
|
||||
assert.NoError(m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
||||
assert.Equal(albums, 10) // not all albums
|
||||
assert.NoError(t, m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
||||
assert.Equal(t, albums, 10) // not all albums
|
||||
|
||||
var artists int
|
||||
assert.NoError(m.DB().Model(&db.Artist{}).Count(&artists).Error) // not all artists
|
||||
assert.Equal(artists, 2) // not all artists
|
||||
assert.NoError(t, m.DB().Model(&db.Artist{}).Count(&artists).Error) // not all artists
|
||||
assert.Equal(t, artists, 2) // not all artists
|
||||
}
|
||||
|
||||
func TestParentID(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
m.ScanAndClean()
|
||||
|
||||
var nullParentAlbums []*db.Album
|
||||
require.NoError(m.DB().Where("parent_id IS NULL").Find(&nullParentAlbums).Error) // one parent_id=NULL which is root folder
|
||||
require.Equal(1, len(nullParentAlbums)) // one parent_id=NULL which is root folder
|
||||
require.Equal("", nullParentAlbums[0].LeftPath)
|
||||
require.Equal(".", nullParentAlbums[0].RightPath)
|
||||
assert.NoError(t, m.DB().Where("parent_id IS NULL").Find(&nullParentAlbums).Error) // one parent_id=NULL which is root folder
|
||||
assert.Equal(t, 1, len(nullParentAlbums)) // one parent_id=NULL which is root folder
|
||||
assert.Equal(t, "", nullParentAlbums[0].LeftPath)
|
||||
assert.Equal(t, ".", nullParentAlbums[0].RightPath)
|
||||
|
||||
require.Equal(gorm.ErrRecordNotFound, m.DB().Where("id=parent_id").Find(&db.Album{}).Error) // no self-referencing albums
|
||||
assert.Equal(t, gorm.ErrRecordNotFound, m.DB().Where("id=parent_id").Find(&db.Album{}).Error) // no self-referencing albums
|
||||
|
||||
var album db.Album
|
||||
var parent db.Album
|
||||
require.NoError(m.DB().Find(&album, "left_path=? AND right_path=?", "artist-0/", "album-0").Error) // album has parent ID
|
||||
require.NoError(m.DB().Find(&parent, "right_path=?", "artist-0").Error) // album has parent ID
|
||||
require.Equal(parent.ID, album.ParentID) // album has parent ID
|
||||
assert.NoError(t, m.DB().Find(&album, "left_path=? AND right_path=?", "artist-0/", "album-0").Error) // album has parent ID
|
||||
assert.NoError(t, m.DB().Find(&parent, "right_path=?", "artist-0").Error) // album has parent ID
|
||||
assert.Equal(t, parent.ID, album.ParentID) // album has parent ID
|
||||
}
|
||||
|
||||
func TestUpdatedCover(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
@@ -100,13 +95,12 @@ func TestUpdatedCover(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var album db.Album
|
||||
assert.NoError(m.DB().Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&album).Error) // album has cover
|
||||
assert.Equal(album.Cover, "cover.jpg") // album has cover
|
||||
assert.NoError(t, m.DB().Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&album).Error) // album has cover
|
||||
assert.Equal(t, album.Cover, "cover.jpg") // album has cover
|
||||
}
|
||||
|
||||
func TestCoverBeforeTracks(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddCover("artist-2/album-2/cover.jpg")
|
||||
@@ -115,21 +109,20 @@ func TestCoverBeforeTracks(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var album db.Album
|
||||
require.NoError(m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&album).Error) // album has cover
|
||||
require.Equal("cover.jpg", album.Cover) // album has cover
|
||||
assert.NoError(t, m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&album).Error) // album has cover
|
||||
assert.Equal(t, "cover.jpg", album.Cover) // album has cover
|
||||
|
||||
var albumArtist db.Artist
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", album.ID).Find(&albumArtist).Error) // album has cover
|
||||
require.Equal("artist-2", albumArtist.Name) // album artist
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", album.ID).Find(&albumArtist).Error) // album has cover
|
||||
assert.Equal(t, "artist-2", albumArtist.Name) // album artist
|
||||
|
||||
var tracks []*db.Track
|
||||
require.NoError(m.DB().Where("album_id=?", album.ID).Find(&tracks).Error) // album has tracks
|
||||
require.Equal(3, len(tracks)) // album has tracks
|
||||
assert.NoError(t, m.DB().Where("album_id=?", album.ID).Find(&tracks).Error) // album has tracks
|
||||
assert.Equal(t, 3, len(tracks)) // album has tracks
|
||||
}
|
||||
|
||||
func TestUpdatedTags(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddTrack("artist-10/album-10/track-10.flac")
|
||||
@@ -144,14 +137,14 @@ func TestUpdatedTags(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var track db.Track
|
||||
require.NoError(m.DB().Preload("Album").Where("filename=?", "track-10.flac").Find(&track).Error) // track has tags
|
||||
require.Equal("artist", track.TagTrackArtist) // track has tags
|
||||
require.Equal("album", track.Album.TagTitle) // track has tags
|
||||
require.Equal("title", track.TagTitle) // track has tags
|
||||
assert.NoError(t, m.DB().Preload("Album").Where("filename=?", "track-10.flac").Find(&track).Error) // track has tags
|
||||
assert.Equal(t, "artist", track.TagTrackArtist) // track has tags
|
||||
assert.Equal(t, "album", track.Album.TagTitle) // track has tags
|
||||
assert.Equal(t, "title", track.TagTitle) // track has tags
|
||||
|
||||
var trackArtistA db.Artist
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", track.AlbumID).Limit(1).Find(&trackArtistA).Error) // updated has tags
|
||||
require.Equal("album-artist", trackArtistA.Name) // track has tags
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", track.AlbumID).Limit(1).Find(&trackArtistA).Error) // updated has tags
|
||||
assert.Equal(t, "album-artist", trackArtistA.Name) // track has tags
|
||||
|
||||
m.SetTags("artist-10/album-10/track-10.flac", func(tags *mockfs.Tags) error {
|
||||
tags.RawArtist = "artist-upd"
|
||||
@@ -164,21 +157,20 @@ func TestUpdatedTags(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var updated db.Track
|
||||
require.NoError(m.DB().Preload("Album").Where("filename=?", "track-10.flac").Find(&updated).Error) // updated has tags
|
||||
require.Equal(track.ID, updated.ID) // updated has tags
|
||||
require.Equal("artist-upd", updated.TagTrackArtist) // updated has tags
|
||||
require.Equal("album-upd", updated.Album.TagTitle) // updated has tags
|
||||
require.Equal("title-upd", updated.TagTitle) // updated has tags
|
||||
assert.NoError(t, m.DB().Preload("Album").Where("filename=?", "track-10.flac").Find(&updated).Error) // updated has tags
|
||||
assert.Equal(t, track.ID, updated.ID) // updated has tags
|
||||
assert.Equal(t, "artist-upd", updated.TagTrackArtist) // updated has tags
|
||||
assert.Equal(t, "album-upd", updated.Album.TagTitle) // updated has tags
|
||||
assert.Equal(t, "title-upd", updated.TagTitle) // updated has tags
|
||||
|
||||
var trackArtistB db.Artist
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", track.AlbumID).Limit(1).Find(&trackArtistB).Error) // updated has tags
|
||||
require.Equal("album-artist-upd", trackArtistB.Name) // updated has tags
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.artist_id=artists.id").Where("album_artists.album_id=?", track.AlbumID).Limit(1).Find(&trackArtistB).Error) // updated has tags
|
||||
assert.Equal(t, "album-artist-upd", trackArtistB.Name) // updated has tags
|
||||
}
|
||||
|
||||
// https://github.com/sentriz/gonic/issues/225
|
||||
func TestUpdatedAlbumGenre(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
@@ -190,8 +182,8 @@ func TestUpdatedAlbumGenre(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var album db.Album
|
||||
require.NoError(m.DB().Preload("Genres").Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&album).Error)
|
||||
require.Equal([]string{"gen-a", "gen-b"}, album.GenreStrings())
|
||||
assert.NoError(t, m.DB().Preload("Genres").Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&album).Error)
|
||||
assert.Equal(t, []string{"gen-a", "gen-b"}, album.GenreStrings())
|
||||
|
||||
m.SetTags("artist-0/album-0/track-0.flac", func(tags *mockfs.Tags) error {
|
||||
tags.RawGenre = "gen-a-upd;gen-b-upd"
|
||||
@@ -201,46 +193,43 @@ func TestUpdatedAlbumGenre(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var updated db.Album
|
||||
require.NoError(m.DB().Preload("Genres").Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&updated).Error)
|
||||
require.Equal([]string{"gen-a-upd", "gen-b-upd"}, updated.GenreStrings())
|
||||
assert.NoError(t, m.DB().Preload("Genres").Where("left_path=? AND right_path=?", "artist-0/", "album-0").Find(&updated).Error)
|
||||
assert.Equal(t, []string{"gen-a-upd", "gen-b-upd"}, updated.GenreStrings())
|
||||
}
|
||||
|
||||
func TestDeleteAlbum(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
m.ScanAndClean()
|
||||
|
||||
assert.NoError(m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error) // album exists
|
||||
assert.NoError(t, m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error) // album exists
|
||||
|
||||
m.RemoveAll("artist-2/album-2")
|
||||
m.ScanAndClean()
|
||||
|
||||
assert.Equal(m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error, gorm.ErrRecordNotFound) // album doesn't exist
|
||||
assert.Equal(t, m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error, gorm.ErrRecordNotFound) // album doesn't exist
|
||||
}
|
||||
|
||||
func TestDeleteArtist(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
m.ScanAndClean()
|
||||
|
||||
assert.NoError(m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error) // album exists
|
||||
assert.NoError(t, m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error) // album exists
|
||||
|
||||
m.RemoveAll("artist-2")
|
||||
m.ScanAndClean()
|
||||
|
||||
assert.Equal(m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error, gorm.ErrRecordNotFound) // album doesn't exist
|
||||
assert.Equal(m.DB().Where("name=?", "artist-2").Find(&db.Artist{}).Error, gorm.ErrRecordNotFound) // artist doesn't exist
|
||||
assert.Equal(t, m.DB().Where("left_path=? AND right_path=?", "artist-2/", "album-2").Find(&db.Album{}).Error, gorm.ErrRecordNotFound) // album doesn't exist
|
||||
assert.Equal(t, m.DB().Where("name=?", "artist-2").Find(&db.Artist{}).Error, gorm.ErrRecordNotFound) // artist doesn't exist
|
||||
}
|
||||
|
||||
func TestGenres(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
albumGenre := func(artist, album, genre string) error {
|
||||
@@ -252,10 +241,10 @@ func TestGenres(t *testing.T) {
|
||||
Error
|
||||
}
|
||||
isAlbumGenre := func(artist, album, genreName string) {
|
||||
assert.NoError(albumGenre(artist, album, genreName))
|
||||
assert.NoError(t, albumGenre(artist, album, genreName))
|
||||
}
|
||||
isAlbumGenreMissing := func(artist, album, genreName string) {
|
||||
assert.Equal(albumGenre(artist, album, genreName), gorm.ErrRecordNotFound)
|
||||
assert.Equal(t, albumGenre(artist, album, genreName), gorm.ErrRecordNotFound)
|
||||
}
|
||||
|
||||
trackGenre := func(artist, album, filename, genreName string) error {
|
||||
@@ -268,20 +257,20 @@ func TestGenres(t *testing.T) {
|
||||
Error
|
||||
}
|
||||
isTrackGenre := func(artist, album, filename, genreName string) {
|
||||
assert.NoError(trackGenre(artist, album, filename, genreName))
|
||||
assert.NoError(t, trackGenre(artist, album, filename, genreName))
|
||||
}
|
||||
isTrackGenreMissing := func(artist, album, filename, genreName string) {
|
||||
assert.Equal(trackGenre(artist, album, filename, genreName), gorm.ErrRecordNotFound)
|
||||
assert.Equal(t, trackGenre(artist, album, filename, genreName), gorm.ErrRecordNotFound)
|
||||
}
|
||||
|
||||
genre := func(genre string) error {
|
||||
return m.DB().Where("name=?", genre).Find(&db.Genre{}).Error
|
||||
}
|
||||
isGenre := func(genreName string) {
|
||||
assert.NoError(genre(genreName))
|
||||
assert.NoError(t, genre(genreName))
|
||||
}
|
||||
isGenreMissing := func(genreName string) {
|
||||
assert.Equal(genre(genreName), gorm.ErrRecordNotFound)
|
||||
assert.Equal(t, genre(genreName), gorm.ErrRecordNotFound)
|
||||
}
|
||||
|
||||
m.AddItems()
|
||||
@@ -325,7 +314,6 @@ func TestGenres(t *testing.T) {
|
||||
|
||||
func TestMultiFolders(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.NewWithDirs(t, []string{"m-1", "m-2", "m-3"})
|
||||
|
||||
m.AddItemsPrefix("m-1")
|
||||
@@ -334,13 +322,13 @@ func TestMultiFolders(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var rootDirs []*db.Album
|
||||
require.NoError(m.DB().Where("parent_id IS NULL").Find(&rootDirs).Error)
|
||||
require.Equal(3, len(rootDirs))
|
||||
assert.NoError(t, m.DB().Where("parent_id IS NULL").Find(&rootDirs).Error)
|
||||
assert.Equal(t, 3, len(rootDirs))
|
||||
for i, r := range rootDirs {
|
||||
require.Equal(filepath.Join(m.TmpDir(), fmt.Sprintf("m-%d", i+1)), r.RootDir)
|
||||
require.Equal(0, r.ParentID)
|
||||
require.Equal("", r.LeftPath)
|
||||
require.Equal(".", r.RightPath)
|
||||
assert.Equal(t, filepath.Join(m.TmpDir(), fmt.Sprintf("m-%d", i+1)), r.RootDir)
|
||||
assert.Equal(t, 0, r.ParentID)
|
||||
assert.Equal(t, "", r.LeftPath)
|
||||
assert.Equal(t, ".", r.RightPath)
|
||||
}
|
||||
|
||||
m.AddCover("m-3/artist-0/album-0/cover.jpg")
|
||||
@@ -348,7 +336,7 @@ func TestMultiFolders(t *testing.T) {
|
||||
m.LogItems()
|
||||
|
||||
checkCover := func(root string, q string) {
|
||||
require.NoError(m.DB().Where(q, filepath.Join(m.TmpDir(), root)).Find(&db.Album{}).Error)
|
||||
assert.NoError(t, m.DB().Where(q, filepath.Join(m.TmpDir(), root)).Find(&db.Album{}).Error)
|
||||
}
|
||||
|
||||
checkCover("m-1", "root_dir=? AND cover IS NULL") // mf 1 no cover
|
||||
@@ -358,7 +346,6 @@ func TestMultiFolders(t *testing.T) {
|
||||
|
||||
func TestNewAlbumForExistingArtist(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
@@ -368,8 +355,8 @@ func TestNewAlbumForExistingArtist(t *testing.T) {
|
||||
m.LogArtists()
|
||||
|
||||
var artist db.Artist
|
||||
require.NoError(m.DB().Where("name=?", "artist-2").Find(&artist).Error) // find orig artist
|
||||
require.Greater(artist.ID, 0)
|
||||
assert.NoError(t, m.DB().Where("name=?", "artist-2").Find(&artist).Error) // find orig artist
|
||||
assert.Greater(t, artist.ID, 0)
|
||||
|
||||
for tr := 0; tr < 3; tr++ {
|
||||
m.AddTrack(fmt.Sprintf("artist-2/new-album/track-%d.mp3", tr))
|
||||
@@ -383,17 +370,16 @@ func TestNewAlbumForExistingArtist(t *testing.T) {
|
||||
}
|
||||
|
||||
var updated db.Artist
|
||||
require.NoError(m.DB().Where("name=?", "artist-2").Find(&updated).Error) // find updated artist
|
||||
require.Equal(updated.ID, artist.ID) // find updated artist
|
||||
assert.NoError(t, m.DB().Where("name=?", "artist-2").Find(&updated).Error) // find updated artist
|
||||
assert.Equal(t, updated.ID, artist.ID) // find updated artist
|
||||
|
||||
var all []*db.Artist
|
||||
require.NoError(m.DB().Find(&all).Error) // still only 3?
|
||||
require.Equal(3, len(all)) // still only 3?
|
||||
assert.NoError(t, m.DB().Find(&all).Error) // still only 3?
|
||||
assert.Equal(t, 3, len(all)) // still only 3?
|
||||
}
|
||||
|
||||
func TestMultiFolderWithSharedArtist(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.NewWithDirs(t, []string{"m-0", "m-1"})
|
||||
|
||||
const artistName = "artist-a"
|
||||
@@ -419,29 +405,29 @@ func TestMultiFolderWithSharedArtist(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var artist db.Artist
|
||||
require.NoError(m.DB().Where("name=?", artistName).First(&artist).Error)
|
||||
require.Equal(artistName, artist.Name)
|
||||
assert.NoError(t, m.DB().Where("name=?", artistName).First(&artist).Error)
|
||||
assert.Equal(t, artistName, artist.Name)
|
||||
|
||||
var artistAlbums []*db.Album
|
||||
require.NoError(m.DB().
|
||||
assert.NoError(t, m.DB().
|
||||
Select("*, count(sub.id) child_count, sum(sub.length) duration").
|
||||
Joins("JOIN album_artists ON album_artists.album_id=albums.id").
|
||||
Joins("LEFT JOIN tracks sub ON albums.id=sub.album_id").
|
||||
Where("album_artists.artist_id=?", artist.ID).
|
||||
Group("albums.id").
|
||||
Find(&artistAlbums).Error)
|
||||
require.Equal(2, len(artistAlbums))
|
||||
|
||||
assert.Equal(t, 2, len(artistAlbums))
|
||||
|
||||
for _, album := range artistAlbums {
|
||||
require.Greater(album.TagYear, 0)
|
||||
require.Greater(album.ChildCount, 0)
|
||||
require.Greater(album.Duration, 0)
|
||||
assert.Greater(t, album.TagYear, 0)
|
||||
assert.Greater(t, album.ChildCount, 0)
|
||||
assert.Greater(t, album.Duration, 0)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSymlinkedAlbum(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.NewWithDirs(t, []string{"scan"})
|
||||
|
||||
m.AddItemsPrefixWithCovers("temp")
|
||||
@@ -455,20 +441,19 @@ func TestSymlinkedAlbum(t *testing.T) {
|
||||
m.LogAlbums()
|
||||
|
||||
var track db.Track
|
||||
require.NoError(m.DB().Preload("Album.Parent").Find(&track).Error) // track exists
|
||||
require.NotNil(track.Album) // track has album
|
||||
require.NotZero(track.Album.Cover) // album has cover
|
||||
require.Equal("artist-sym", track.Album.Parent.RightPath) // artist is sym
|
||||
assert.NoError(t, m.DB().Preload("Album.Parent").Find(&track).Error) // track exists
|
||||
assert.NotNil(t, track.Album) // track has album
|
||||
assert.NotZero(t, track.Album.Cover) // album has cover
|
||||
assert.Equal(t, "artist-sym", track.Album.Parent.RightPath) // artist is sym
|
||||
|
||||
info, err := os.Stat(track.AbsPath())
|
||||
require.NoError(err) // track resolves
|
||||
require.False(info.IsDir()) // track resolves
|
||||
require.NotZero(info.ModTime()) // track resolves
|
||||
assert.NoError(t, err) // track resolves
|
||||
assert.False(t, info.IsDir()) // track resolves
|
||||
assert.NotZero(t, info.ModTime()) // track resolves
|
||||
}
|
||||
|
||||
func TestSymlinkedSubdiscs(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.NewWithDirs(t, []string{"scan"})
|
||||
|
||||
addItem := func(prefix, artist, album, disc, track string) {
|
||||
@@ -499,19 +484,18 @@ func TestSymlinkedSubdiscs(t *testing.T) {
|
||||
m.LogAlbums()
|
||||
|
||||
var track db.Track
|
||||
require.NoError(m.DB().Preload("Album.Parent").Find(&track).Error) // track exists
|
||||
require.NotNil(track.Album) // track has album
|
||||
require.Equal("album-sym", track.Album.Parent.RightPath) // artist is sym
|
||||
assert.NoError(t, m.DB().Preload("Album.Parent").Find(&track).Error) // track exists
|
||||
assert.NotNil(t, track.Album) // track has album
|
||||
assert.Equal(t, "album-sym", track.Album.Parent.RightPath) // artist is sym
|
||||
|
||||
info, err := os.Stat(track.AbsPath())
|
||||
require.NoError(err) // track resolves
|
||||
require.False(info.IsDir()) // track resolves
|
||||
require.NotZero(info.ModTime()) // track resolves
|
||||
assert.NoError(t, err) // track resolves
|
||||
assert.False(t, info.IsDir()) // track resolves
|
||||
assert.NotZero(t, info.ModTime()) // track resolves
|
||||
}
|
||||
|
||||
func TestTagErrors(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItemsWithCovers()
|
||||
@@ -524,26 +508,25 @@ func TestTagErrors(t *testing.T) {
|
||||
|
||||
ctx, err := m.ScanAndCleanErr()
|
||||
errs, ok := err.(interface{ Unwrap() []error })
|
||||
require.True(ok)
|
||||
assert.True(t, ok)
|
||||
|
||||
require.ErrorAs(err, &errs)
|
||||
require.Equal(2, len(errs.Unwrap())) // we have 2 dir errors
|
||||
require.Equal(m.NumTracks()-(3*2), ctx.SeenTracks()) // we saw all tracks bar 2 album contents
|
||||
require.Equal(m.NumTracks()-(3*2), ctx.SeenTracksNew()) // we have all tracks bar 2 album contents
|
||||
assert.ErrorAs(t, err, &errs)
|
||||
assert.Equal(t, 2, len(errs.Unwrap())) // we have 2 dir errors
|
||||
assert.Equal(t, m.NumTracks()-(3*2), ctx.SeenTracks()) // we saw all tracks bar 2 album contents
|
||||
assert.Equal(t, m.NumTracks()-(3*2), ctx.SeenTracksNew()) // we have all tracks bar 2 album contents
|
||||
|
||||
ctx, err = m.ScanAndCleanErr()
|
||||
errs, ok = err.(interface{ Unwrap() []error })
|
||||
require.True(ok)
|
||||
assert.True(t, ok)
|
||||
|
||||
require.Equal(2, len(errs.Unwrap())) // we have 2 dir errors
|
||||
require.Equal(m.NumTracks()-(3*2), ctx.SeenTracks()) // we saw all tracks bar 2 album contents
|
||||
require.Equal(0, ctx.SeenTracksNew()) // we have no new tracks
|
||||
assert.Equal(t, 2, len(errs.Unwrap())) // we have 2 dir errors
|
||||
assert.Equal(t, m.NumTracks()-(3*2), ctx.SeenTracks()) // we saw all tracks bar 2 album contents
|
||||
assert.Equal(t, 0, ctx.SeenTracksNew()) // we have no new tracks
|
||||
}
|
||||
|
||||
// https://github.com/sentriz/gonic/issues/185#issuecomment-1050092128
|
||||
func TestCompilationAlbumWithoutAlbumArtist(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
const pathArtist = "various-artists"
|
||||
@@ -566,43 +549,41 @@ func TestCompilationAlbumWithoutAlbumArtist(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var trackCount int
|
||||
require.NoError(m.DB().Model(&db.Track{}).Count(&trackCount).Error)
|
||||
require.Equal(5, trackCount)
|
||||
assert.NoError(t, m.DB().Model(&db.Track{}).Count(&trackCount).Error)
|
||||
assert.Equal(t, 5, trackCount)
|
||||
|
||||
var artists []*db.Artist
|
||||
require.NoError(m.DB().Find(&artists).Error)
|
||||
require.Equal(1, len(artists)) // we only have one album artist
|
||||
require.Equal("artist 0", artists[0].Name) // it came from the first track's fallback to artist tag
|
||||
assert.NoError(t, m.DB().Find(&artists).Error)
|
||||
assert.Equal(t, 1, len(artists)) // we only have one album artist
|
||||
assert.Equal(t, "artist 0", artists[0].Name) // it came from the first track's fallback to artist tag
|
||||
|
||||
var artistAlbums []*db.Album
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Where("album_artists.artist_id=?", artists[0].ID).Find(&artistAlbums).Error)
|
||||
require.Equal(1, len(artistAlbums)) // the artist has one album
|
||||
require.Equal(pathAlbum, artistAlbums[0].RightPath)
|
||||
require.Equal(pathArtist+"/", artistAlbums[0].LeftPath)
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Where("album_artists.artist_id=?", artists[0].ID).Find(&artistAlbums).Error)
|
||||
assert.Equal(t, 1, len(artistAlbums)) // the artist has one album
|
||||
assert.Equal(t, pathAlbum, artistAlbums[0].RightPath)
|
||||
assert.Equal(t, pathArtist+"/", artistAlbums[0].LeftPath)
|
||||
}
|
||||
|
||||
func TestIncrementalScanNoChangeNoUpdatedAt(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
|
||||
m.ScanAndClean()
|
||||
var albumA db.Album
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Order("updated_at DESC").Find(&albumA).Error)
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Order("updated_at DESC").Find(&albumA).Error)
|
||||
|
||||
m.ScanAndClean()
|
||||
var albumB db.Album
|
||||
require.NoError(m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Order("updated_at DESC").Find(&albumB).Error)
|
||||
assert.NoError(t, m.DB().Joins("JOIN album_artists ON album_artists.album_id=albums.id").Order("updated_at DESC").Find(&albumB).Error)
|
||||
|
||||
require.Equal(albumB.UpdatedAt, albumA.UpdatedAt)
|
||||
assert.Equal(t, albumB.UpdatedAt, albumA.UpdatedAt)
|
||||
}
|
||||
|
||||
// https://github.com/sentriz/gonic/issues/230
|
||||
func TestAlbumAndArtistSameNameWeirdness(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
const name = "same"
|
||||
@@ -620,13 +601,12 @@ func TestAlbumAndArtistSameNameWeirdness(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var albums []*db.Album
|
||||
assert.NoError(m.DB().Find(&albums).Error)
|
||||
assert.Equal(len(albums), 5) // root, 2 artists, 2 albums
|
||||
assert.NoError(t, m.DB().Find(&albums).Error)
|
||||
assert.Equal(t, len(albums), 5) // root, 2 artists, 2 albums
|
||||
}
|
||||
|
||||
func TestNoOrphanedGenres(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItems()
|
||||
@@ -642,13 +622,12 @@ func TestNoOrphanedGenres(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var genreCount int
|
||||
require.NoError(m.DB().Model(&db.Genre{}).Count(&genreCount).Error)
|
||||
require.Equal(0, genreCount)
|
||||
assert.NoError(t, m.DB().Model(&db.Genre{}).Count(&genreCount).Error)
|
||||
assert.Equal(t, 0, genreCount)
|
||||
}
|
||||
|
||||
func TestMultiArtistSupport(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItemsGlob("artist-0/album-[012]/track-0.*")
|
||||
@@ -671,17 +650,17 @@ func TestMultiArtistSupport(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var artists []*db.Artist
|
||||
require.NoError(m.DB().Find(&artists).Error)
|
||||
require.Len(artists, 3) // alan, liz, mercury
|
||||
assert.NoError(t, m.DB().Find(&artists).Error)
|
||||
assert.Len(t, artists, 3) // alan, liz, mercury
|
||||
|
||||
var albumArtists []*db.AlbumArtist
|
||||
require.NoError(m.DB().Find(&albumArtists).Error)
|
||||
require.Len(albumArtists, 5)
|
||||
assert.NoError(t, m.DB().Find(&albumArtists).Error)
|
||||
assert.Len(t, albumArtists, 5)
|
||||
|
||||
type row struct{ Artist, Albums string }
|
||||
state := func() []row {
|
||||
var table []row
|
||||
require.NoError(m.DB().
|
||||
assert.NoError(t, m.DB().
|
||||
Select("artists.name artist, group_concat(albums.tag_title, ';') albums").
|
||||
Model(db.Artist{}).
|
||||
Joins("JOIN album_artists ON album_artists.artist_id=artists.id").
|
||||
@@ -690,17 +669,17 @@ func TestMultiArtistSupport(t *testing.T) {
|
||||
Group("artists.id").
|
||||
Scan(&table).
|
||||
Error)
|
||||
|
||||
return table
|
||||
}
|
||||
|
||||
require.Equal(
|
||||
assert.Equal(t,
|
||||
[]row{
|
||||
{"Alan Vega", "Mutator;Dead Man"},
|
||||
{"Liz Lamere", "Mutator"},
|
||||
{"Mercury Rev", "Dead Man;Yerself Is Steam"},
|
||||
},
|
||||
state(),
|
||||
)
|
||||
state())
|
||||
|
||||
m.RemoveAll("artist-0/album-2")
|
||||
m.SetTags("artist-0/album-1/track-0.flac", func(tags *mockfs.Tags) error {
|
||||
@@ -711,24 +690,22 @@ func TestMultiArtistSupport(t *testing.T) {
|
||||
|
||||
m.ScanAndClean()
|
||||
|
||||
require.NoError(m.DB().Find(&artists).Error)
|
||||
require.Len(artists, 2) // alan, liz
|
||||
assert.NoError(t, m.DB().Find(&artists).Error)
|
||||
assert.Len(t, artists, 2) // alan, liz
|
||||
|
||||
require.NoError(m.DB().Find(&albumArtists).Error)
|
||||
require.Len(albumArtists, 3)
|
||||
assert.NoError(t, m.DB().Find(&albumArtists).Error)
|
||||
assert.Len(t, albumArtists, 3)
|
||||
|
||||
require.Equal(
|
||||
assert.Equal(t,
|
||||
[]row{
|
||||
{"Alan Vega", "Mutator;Dead Man"},
|
||||
{"Liz Lamere", "Mutator"},
|
||||
},
|
||||
state(),
|
||||
)
|
||||
state())
|
||||
}
|
||||
|
||||
func TestMultiArtistPreload(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := assert.New(t)
|
||||
m := mockfs.New(t)
|
||||
|
||||
m.AddItemsGlob("artist-0/album-[012]/track-0.*")
|
||||
@@ -751,32 +728,32 @@ func TestMultiArtistPreload(t *testing.T) {
|
||||
m.ScanAndClean()
|
||||
|
||||
var albums []*db.Album
|
||||
require.NoError(m.DB().Preload("Artists").Find(&albums).Error)
|
||||
require.GreaterOrEqual(len(albums), 3)
|
||||
assert.NoError(t, m.DB().Preload("Artists").Find(&albums).Error)
|
||||
assert.GreaterOrEqual(t, len(albums), 3)
|
||||
|
||||
for _, album := range albums {
|
||||
switch album.TagTitle {
|
||||
case "Mutator":
|
||||
require.Len(album.Artists, 2)
|
||||
assert.Len(t, album.Artists, 2)
|
||||
case "Dead Man":
|
||||
require.Len(album.Artists, 2)
|
||||
assert.Len(t, album.Artists, 2)
|
||||
case "Yerself Is Steam":
|
||||
require.Len(album.Artists, 1)
|
||||
assert.Len(t, album.Artists, 1)
|
||||
}
|
||||
}
|
||||
|
||||
var artists []*db.Artist
|
||||
require.NoError(m.DB().Preload("Albums").Find(&artists).Error)
|
||||
require.Equal(3, len(artists))
|
||||
assert.NoError(t, m.DB().Preload("Albums").Find(&artists).Error)
|
||||
assert.Equal(t, 3, len(artists))
|
||||
|
||||
for _, artist := range artists {
|
||||
switch artist.Name {
|
||||
case "Alan Vega":
|
||||
require.Len(artist.Albums, 2)
|
||||
assert.Len(t, artist.Albums, 2)
|
||||
case "Mercury Rev":
|
||||
require.Len(artist.Albums, 2)
|
||||
assert.Len(t, artist.Albums, 2)
|
||||
case "Liz Lamere":
|
||||
require.Len(artist.Albums, 1)
|
||||
assert.Len(t, artist.Albums, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,16 @@ func TestArtistGetInfo(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getInfo"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"Artist 1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.ArtistGetInfoResponse)
|
||||
@@ -35,8 +35,8 @@ func TestArtistGetInfo(t *testing.T) {
|
||||
actual, err := client.ArtistGetInfo("apiKey1", "Artist 1")
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.Equal(Artist{
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, Artist{
|
||||
XMLName: xml.Name{
|
||||
Local: "artist",
|
||||
},
|
||||
@@ -98,16 +98,16 @@ func TestArtistGetInfoClientRequestFails(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getInfo"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"Artist 1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
})}
|
||||
@@ -116,24 +116,24 @@ func TestArtistGetInfoClientRequestFails(t *testing.T) {
|
||||
actual, err := client.ArtistGetInfo("apiKey1", "Artist 1")
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Zero(actual)
|
||||
require.Error(t, err)
|
||||
require.Zero(t, actual)
|
||||
}
|
||||
|
||||
func TestArtistGetTopTracks(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getTopTracks"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.ArtistGetTopTracksResponse)
|
||||
@@ -143,8 +143,8 @@ func TestArtistGetTopTracks(t *testing.T) {
|
||||
actual, err := client.ArtistGetTopTracks("apiKey1", "artist1")
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.Equal(TopTracks{
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, TopTracks{
|
||||
Artist: "Artist 1",
|
||||
XMLName: xml.Name{
|
||||
Local: "toptracks",
|
||||
@@ -194,16 +194,16 @@ func TestArtistGetTopTracks_clientRequestFails(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getTopTracks"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
})}
|
||||
@@ -212,24 +212,24 @@ func TestArtistGetTopTracks_clientRequestFails(t *testing.T) {
|
||||
actual, err := client.ArtistGetTopTracks("apiKey1", "artist1")
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Zero(actual)
|
||||
require.Error(t, err)
|
||||
require.Zero(t, actual)
|
||||
}
|
||||
|
||||
func TestArtistGetSimilar(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getSimilar"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.ArtistGetSimilarResponse)
|
||||
@@ -239,8 +239,8 @@ func TestArtistGetSimilar(t *testing.T) {
|
||||
actual, err := client.ArtistGetSimilar("apiKey1", "artist1")
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.Equal(SimilarArtists{
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, SimilarArtists{
|
||||
XMLName: xml.Name{
|
||||
Local: "similarartists",
|
||||
},
|
||||
@@ -298,16 +298,16 @@ func TestArtistGetSimilar_clientRequestFails(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"artist.getSimilar"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
})}
|
||||
@@ -316,25 +316,25 @@ func TestArtistGetSimilar_clientRequestFails(t *testing.T) {
|
||||
actual, err := client.ArtistGetSimilar("apiKey1", "artist1")
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Zero(actual)
|
||||
require.Error(t, err)
|
||||
require.Zero(t, actual)
|
||||
}
|
||||
|
||||
func TestTrackGetSimilarTracks(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"track.getSimilar"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
"track": []string{"track1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.TrackGetSimilarResponse)
|
||||
@@ -344,8 +344,8 @@ func TestTrackGetSimilarTracks(t *testing.T) {
|
||||
actual, err := client.TrackGetSimilarTracks("apiKey1", "artist1", "track1")
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.Equal(SimilarTracks{
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, SimilarTracks{
|
||||
Artist: "Artist 1",
|
||||
Track: "Track 1",
|
||||
XMLName: xml.Name{
|
||||
@@ -392,17 +392,17 @@ func TestTrackGetSimilarTracks_clientRequestFails(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"track.getSimilar"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"artist": []string{"artist1"},
|
||||
"track": []string{"track1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
})}
|
||||
@@ -411,25 +411,25 @@ func TestTrackGetSimilarTracks_clientRequestFails(t *testing.T) {
|
||||
actual, err := client.TrackGetSimilarTracks("apiKey1", "artist1", "track1")
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Zero(actual)
|
||||
require.Error(t, err)
|
||||
require.Zero(t, actual)
|
||||
}
|
||||
|
||||
func TestGetSession(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"auth.getSession"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"api_sig": []string{"b872a708a0b8b1d9fc1230b1cb6493f8"},
|
||||
"token": []string{"token1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.GetSessionResponse)
|
||||
@@ -439,25 +439,25 @@ func TestGetSession(t *testing.T) {
|
||||
actual, err := client.GetSession("apiKey1", "secret1", "token1")
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.Equal("sessionKey1", actual)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "sessionKey1", actual)
|
||||
}
|
||||
|
||||
func TestGetSessioeClientRequestFails(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// arrange
|
||||
require := require.New(t)
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodGet, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodGet, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"method": []string{"auth.getSession"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
"api_sig": []string{"b872a708a0b8b1d9fc1230b1cb6493f8"},
|
||||
"token": []string{"token1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
})}
|
||||
@@ -466,8 +466,8 @@ func TestGetSessioeClientRequestFails(t *testing.T) {
|
||||
actual, err := client.GetSession("apiKey1", "secret1", "token1")
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Zero(actual)
|
||||
require.Error(t, err)
|
||||
require.Zero(t, actual)
|
||||
}
|
||||
|
||||
func TestGetParamSignature(t *testing.T) {
|
||||
|
||||
@@ -15,12 +15,11 @@ import (
|
||||
func TestScrobble(t *testing.T) {
|
||||
// arrange
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
testDB, err := db.NewMock()
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
err = testDB.Migrate(db.MigrationContext{})
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
testDB.SetSetting(db.LastFMAPIKey, "apiKey1")
|
||||
testDB.SetSetting(db.LastFMSecret, "secret1")
|
||||
@@ -46,8 +45,8 @@ func TestScrobble(t *testing.T) {
|
||||
stamp := time.Date(2023, 8, 12, 12, 34, 1, 200, time.UTC)
|
||||
|
||||
client := Client{mockclient.New(t, func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodPost, r.Method)
|
||||
require.Equal(url.Values{
|
||||
require.Equal(t, http.MethodPost, r.Method)
|
||||
require.Equal(t, url.Values{
|
||||
"album": []string{"album1"},
|
||||
"albumArtist": []string{"artist1"},
|
||||
"api_key": []string{"apiKey1"},
|
||||
@@ -61,8 +60,9 @@ func TestScrobble(t *testing.T) {
|
||||
"track": []string{"title1"},
|
||||
"trackNumber": []string{"1"},
|
||||
}, r.URL.Query())
|
||||
require.Equal("/2.0/", r.URL.Path)
|
||||
require.Equal(baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
require.Equal(t, "/2.0/", r.URL.Path)
|
||||
require.Equal(t, baseURL, "https://"+r.Host+r.URL.Path)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(mockclient.ArtistGetTopTracksResponse)
|
||||
@@ -74,13 +74,12 @@ func TestScrobble(t *testing.T) {
|
||||
err = scrobbler.Scrobble(user, track, stamp, true)
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestScrobbleReturnsWithoutLastFMSession(t *testing.T) {
|
||||
// arrange
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
scrobbler := Scrobbler{}
|
||||
|
||||
@@ -88,16 +87,15 @@ func TestScrobbleReturnsWithoutLastFMSession(t *testing.T) {
|
||||
err := scrobbler.Scrobble(&db.User{}, &db.Track{}, time.Now(), false)
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestScrobbleFailsWithoutLastFMAPIKey(t *testing.T) {
|
||||
// arrange
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
testDB, err := db.NewMock()
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
|
||||
user := &db.User{
|
||||
LastFMSession: "lastFMSession1",
|
||||
@@ -109,5 +107,5 @@ func TestScrobbleFailsWithoutLastFMAPIKey(t *testing.T) {
|
||||
err = scrobbler.Scrobble(user, &db.Track{}, time.Now(), false)
|
||||
|
||||
// assert
|
||||
require.Error(err)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
@@ -36,17 +36,16 @@ var submitListensRequest string
|
||||
|
||||
func TestScrobble(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
// arrange
|
||||
client, shutdown := httpClientMock(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodPost, r.Method)
|
||||
require.Equal("/1/submit-listens", r.URL.Path)
|
||||
require.Equal("application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal("Token token1", r.Header.Get("Authorization"))
|
||||
require.Equal(t, http.MethodPost, r.Method)
|
||||
require.Equal(t, "/1/submit-listens", r.URL.Path)
|
||||
require.Equal(t, "application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal(t, "Token token1", r.Header.Get("Authorization"))
|
||||
bodyBytes, err := io.ReadAll(r.Body)
|
||||
require.NoError(err)
|
||||
require.JSONEq(submitListensRequest, string(bodyBytes))
|
||||
require.NoError(t, err)
|
||||
require.JSONEq(t, submitListensRequest, string(bodyBytes))
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte(`{"accepted": 1}`))
|
||||
@@ -71,19 +70,18 @@ func TestScrobble(t *testing.T) {
|
||||
}, time.Unix(1683804525, 0), true)
|
||||
|
||||
// assert
|
||||
require.NoError(err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestScrobbleUnauthorized(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
// arrange
|
||||
client, shutdown := httpClientMock(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodPost, r.Method)
|
||||
require.Equal("/1/submit-listens", r.URL.Path)
|
||||
require.Equal("application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal("Token token1", r.Header.Get("Authorization"))
|
||||
require.Equal(t, http.MethodPost, r.Method)
|
||||
require.Equal(t, "/1/submit-listens", r.URL.Path)
|
||||
require.Equal(t, "application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal(t, "Token token1", r.Header.Get("Authorization"))
|
||||
|
||||
w.WriteHeader(http.StatusUnauthorized)
|
||||
w.Write([]byte(`{"code": 401, "error": "Invalid authorization token."}`))
|
||||
@@ -108,19 +106,18 @@ func TestScrobbleUnauthorized(t *testing.T) {
|
||||
}, time.Now(), true)
|
||||
|
||||
// assert
|
||||
require.ErrorIs(err, ErrListenBrainz)
|
||||
require.ErrorIs(t, err, ErrListenBrainz)
|
||||
}
|
||||
|
||||
func TestScrobbleServerError(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
||||
// arrange
|
||||
client, shutdown := httpClientMock(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
require.Equal(http.MethodPost, r.Method)
|
||||
require.Equal("/1/submit-listens", r.URL.Path)
|
||||
require.Equal("application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal("Token token1", r.Header.Get("Authorization"))
|
||||
require.Equal(t, http.MethodPost, r.Method)
|
||||
require.Equal(t, "/1/submit-listens", r.URL.Path)
|
||||
require.Equal(t, "application/json", r.Header.Get("Content-Type"))
|
||||
require.Equal(t, "Token token1", r.Header.Get("Authorization"))
|
||||
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
}))
|
||||
@@ -144,5 +141,5 @@ func TestScrobbleServerError(t *testing.T) {
|
||||
}, time.Now(), true)
|
||||
|
||||
// assert
|
||||
require.ErrorIs(err, ErrListenBrainz)
|
||||
require.ErrorIs(t, err, ErrListenBrainz)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user