add a test for scan tag errors
This commit is contained in:
@@ -75,6 +75,10 @@ func (m *MockFS) ScanAndClean() *scanner.Context {
|
|||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MockFS) ScanAndCleanErr() (*scanner.Context, error) {
|
||||||
|
return m.scanner.ScanAndClean(scanner.ScanOptions{})
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MockFS) ResetDates() {
|
func (m *MockFS) ResetDates() {
|
||||||
t := time.Date(2020, 0, 0, 0, 0, 0, 0, time.UTC)
|
t := time.Date(2020, 0, 0, 0, 0, 0, 0, time.UTC)
|
||||||
if err := m.db.Model(db.Album{}).Updates(db.Album{CreatedAt: t, UpdatedAt: t, ModifiedAt: t}).Error; err != nil {
|
if err := m.db.Model(db.Album{}).Updates(db.Album{CreatedAt: t, UpdatedAt: t, ModifiedAt: t}).Error; err != nil {
|
||||||
@@ -119,6 +123,10 @@ func (m *MockFS) addItems(prefix string, covers bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MockFS) NumTracks() int {
|
||||||
|
return len(m.tagReader.paths)
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MockFS) RemoveAll(path string) {
|
func (m *MockFS) RemoveAll(path string) {
|
||||||
abspath := filepath.Join(m.dir, path)
|
abspath := filepath.Join(m.dir, path)
|
||||||
if err := os.RemoveAll(abspath); err != nil {
|
if err := os.RemoveAll(abspath); err != nil {
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ func (s *Scanner) ScanAndClean(opts ScanOptions) (*Context, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.errs.Len() > 0 {
|
if c.errs.Len() > 0 {
|
||||||
return nil, c.errs
|
return c, c.errs
|
||||||
}
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package scanner_test
|
package scanner_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@@ -12,8 +13,10 @@ import (
|
|||||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||||
"github.com/matryer/is"
|
"github.com/matryer/is"
|
||||||
|
|
||||||
|
"go.senan.xyz/gonic/multierr"
|
||||||
"go.senan.xyz/gonic/server/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/mockfs"
|
"go.senan.xyz/gonic/server/mockfs"
|
||||||
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
@@ -32,7 +35,7 @@ func TestTableCounts(t *testing.T) {
|
|||||||
|
|
||||||
var tracks int
|
var tracks int
|
||||||
is.NoErr(m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
is.NoErr(m.DB().Model(&db.Track{}).Count(&tracks).Error) // not all tracks
|
||||||
is.Equal(tracks, 3*3*3) // not all tracks
|
is.Equal(tracks, m.NumTracks())
|
||||||
|
|
||||||
var albums int
|
var albums int
|
||||||
is.NoErr(m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
is.NoErr(m.DB().Model(&db.Album{}).Count(&albums).Error) // not all albums
|
||||||
@@ -483,3 +486,31 @@ func TestArtistHasCover(t *testing.T) {
|
|||||||
is.NoErr(m.DB().Where("name=?", "artist-0").First(&artistWithout).Error)
|
is.NoErr(m.DB().Where("name=?", "artist-0").First(&artistWithout).Error)
|
||||||
is.Equal(artistWithout.Cover, "")
|
is.Equal(artistWithout.Cover, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTagErrors(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
is := is.New(t)
|
||||||
|
m := mockfs.New(t)
|
||||||
|
defer m.CleanUp()
|
||||||
|
|
||||||
|
m.AddItemsWithCovers()
|
||||||
|
m.SetTags("artist-1/album-0/track-0.flac", func(tags *mockfs.Tags) error {
|
||||||
|
return scanner.ErrReadingTags
|
||||||
|
})
|
||||||
|
m.SetTags("artist-1/album-1/track-0.flac", func(tags *mockfs.Tags) error {
|
||||||
|
return scanner.ErrReadingTags
|
||||||
|
})
|
||||||
|
|
||||||
|
var errs *multierr.Err
|
||||||
|
ctx, err := m.ScanAndCleanErr()
|
||||||
|
is.True(errors.As(err, &errs))
|
||||||
|
is.Equal(errs.Len(), 2) // we have 2 dir errors
|
||||||
|
is.Equal(ctx.SeenTracks(), m.NumTracks()-(3*2)) // we saw all tracks bar 2 album contents
|
||||||
|
is.Equal(ctx.SeenTracksNew(), m.NumTracks()-(3*2)) // we have all tracks bar 2 album contents
|
||||||
|
|
||||||
|
ctx, err = m.ScanAndCleanErr()
|
||||||
|
is.True(errors.As(err, &errs))
|
||||||
|
is.Equal(errs.Len(), 2) // we have 2 dir errors
|
||||||
|
is.Equal(ctx.SeenTracks(), m.NumTracks()-(3*2)) // we saw all tracks bar 2 album contents
|
||||||
|
is.Equal(ctx.SeenTracksNew(), 0) // we have no new tracks
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user