add a test for scan tag errors

This commit is contained in:
sentriz
2022-02-24 16:04:59 +00:00
committed by Senan Kelly
parent 599636663d
commit d3d2ed3469
3 changed files with 41 additions and 2 deletions

View File

@@ -75,6 +75,10 @@ func (m *MockFS) ScanAndClean() *scanner.Context {
return ctx
}
func (m *MockFS) ScanAndCleanErr() (*scanner.Context, error) {
return m.scanner.ScanAndClean(scanner.ScanOptions{})
}
func (m *MockFS) ResetDates() {
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 {
@@ -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) {
abspath := filepath.Join(m.dir, path)
if err := os.RemoveAll(abspath); err != nil {

View File

@@ -101,7 +101,7 @@ func (s *Scanner) ScanAndClean(opts ScanOptions) (*Context, error) {
}
if c.errs.Len() > 0 {
return nil, c.errs
return c, c.errs
}
return c, nil

View File

@@ -1,6 +1,7 @@
package scanner_test
import (
"errors"
"fmt"
"io/ioutil"
"log"
@@ -12,8 +13,10 @@ import (
_ "github.com/jinzhu/gorm/dialects/sqlite"
"github.com/matryer/is"
"go.senan.xyz/gonic/multierr"
"go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/mockfs"
"go.senan.xyz/gonic/server/scanner"
)
func TestMain(m *testing.M) {
@@ -32,7 +35,7 @@ func TestTableCounts(t *testing.T) {
var tracks int
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
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.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
}