1
Fork 0

Add failing test for #198

This commit is contained in:
viktorstrate 2021-11-06 12:23:47 +01:00
parent 91a208b1b9
commit b467f2ca61
No known key found for this signature in database
GPG Key ID: 3F855605109C1E8A
8 changed files with 128 additions and 14 deletions

View File

@ -19,6 +19,7 @@ require (
github.com/joho/godotenv v1.3.0 github.com/joho/godotenv v1.3.0
github.com/mattn/go-sqlite3 v1.14.6 // indirect github.com/mattn/go-sqlite3 v1.14.6 // indirect
github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect
github.com/otiai10/copy v1.6.0 // indirect
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/sabhiram/go-gitignore v0.0.0-20201211210132-54b8a0bf510f github.com/sabhiram/go-gitignore v0.0.0-20201211210132-54b8a0bf510f
github.com/stretchr/objx v0.3.0 // indirect github.com/stretchr/objx v0.3.0 // indirect

View File

@ -437,6 +437,12 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI= github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI=
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ=
github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q=
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=

View File

@ -343,7 +343,7 @@ func (r *mutationResolver) UserRemoveRootAlbum(ctx context.Context, userID int,
} }
// Reload faces as media might have been deleted // Reload faces as media might have been deleted
if face_detection.GlobalFaceDetector == nil { if face_detection.GlobalFaceDetector != nil {
if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(r.Database); err != nil { if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(r.Database); err != nil {
return nil, err return nil, err
} }

View File

@ -126,7 +126,7 @@ func deleteOldUserAlbums(db *gorm.DB, scannedAlbums []*models.Album, user *model
} }
// Reload faces after deleting albums // Reload faces after deleting albums
if face_detection.GlobalFaceDetector == nil { if face_detection.GlobalFaceDetector != nil {
if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(db); err != nil { if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(db); err != nil {
deleteErrors = append(deleteErrors, err) deleteErrors = append(deleteErrors, err)
} }

View File

@ -0,0 +1,81 @@
package scanner_test
import (
"os"
"path"
"testing"
"github.com/otiai10/copy"
"github.com/photoview/photoview/api/graphql/models"
"github.com/photoview/photoview/api/test_utils"
"github.com/stretchr/testify/assert"
)
func TestCleanupMedia(t *testing.T) {
test_utils.FilesystemTest(t)
db := test_utils.DatabaseTest(t)
test_dir := t.TempDir()
copy.Copy("./test_data", test_dir)
countAllMedia := func() int {
var all_media []*models.Media
if !assert.NoError(t, db.Find(&all_media).Error) {
return -1
}
return len(all_media)
}
countAllMediaURLs := func() int {
var all_media_urls []*models.MediaURL
if !assert.NoError(t, db.Find(&all_media_urls).Error) {
return -1
}
return len(all_media_urls)
}
pass := "1234"
user1, err := models.RegisterUser(db, "user1", &pass, true)
if !assert.NoError(t, err) {
return
}
user2, err := models.RegisterUser(db, "user2", &pass, true)
if !assert.NoError(t, err) {
return
}
root_album := models.Album{
Title: "root album",
Path: test_dir,
}
if !assert.NoError(t, db.Save(&root_album).Error) {
return
}
err = db.Model(user1).Association("Albums").Append(&root_album)
if !assert.NoError(t, err) {
return
}
err = db.Model(user2).Association("Albums").Append(&root_album)
if !assert.NoError(t, err) {
return
}
test_utils.RunScannerOnUser(t, db, user1)
assert.Equal(t, 9, countAllMedia())
assert.Equal(t, 18, countAllMediaURLs())
// move faces directory
assert.NoError(t, os.Rename(path.Join(test_dir, "faces"), path.Join(test_dir, "faces_moved")))
test_utils.RunScannerAll(t, db)
assert.Equal(t, 9, countAllMedia())
assert.Equal(t, 18, countAllMediaURLs())
// remove faces_moved directory
assert.NoError(t, os.RemoveAll(path.Join(test_dir, "faces_moved")))
test_utils.RunScannerAll(t, db)
assert.Equal(t, 3, countAllMedia())
assert.Equal(t, 6, countAllMediaURLs())
}

View File

@ -6,7 +6,6 @@ import (
"time" "time"
"github.com/photoview/photoview/api/graphql/models" "github.com/photoview/photoview/api/graphql/models"
"github.com/photoview/photoview/api/scanner"
"github.com/photoview/photoview/api/scanner/face_detection" "github.com/photoview/photoview/api/scanner/face_detection"
"github.com/photoview/photoview/api/test_utils" "github.com/photoview/photoview/api/test_utils"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -40,20 +39,11 @@ func TestFullScan(t *testing.T) {
return return
} }
if !assert.NoError(t, scanner.InitializeScannerQueue(db)) {
return
}
if !assert.NoError(t, face_detection.InitializeFaceDetector(db)) { if !assert.NoError(t, face_detection.InitializeFaceDetector(db)) {
return return
} }
if !assert.NoError(t, scanner.AddUserToQueue(user)) { test_utils.RunScannerOnUser(t, db, user)
return
}
// wait for all jobs to finish
scanner.CloseScannerQueue()
var all_media []*models.Media var all_media []*models.Media
if !assert.NoError(t, db.Find(&all_media).Error) { if !assert.NoError(t, db.Find(&all_media).Error) {

View File

@ -23,7 +23,7 @@ func getPhotoviewIgnore(ignorePath string) ([]string, error) {
// Open .photoviewignore file, if exists // Open .photoviewignore file, if exists
photoviewIgnoreFile, err := os.Open(path.Join(ignorePath, ".photoviewignore")) photoviewIgnoreFile, err := os.Open(path.Join(ignorePath, ".photoviewignore"))
if err != nil { if err != nil {
if err == os.ErrNotExist { if os.IsNotExist(err) {
return photoviewIgnore, nil return photoviewIgnore, nil
} }
return photoviewIgnore, err return photoviewIgnore, err

View File

@ -0,0 +1,36 @@
package test_utils
import (
"testing"
"github.com/photoview/photoview/api/graphql/models"
"github.com/photoview/photoview/api/scanner"
"github.com/stretchr/testify/assert"
"gorm.io/gorm"
)
func RunScannerOnUser(t *testing.T, db *gorm.DB, user *models.User) {
if !assert.NoError(t, scanner.InitializeScannerQueue(db)) {
return
}
if !assert.NoError(t, scanner.AddUserToQueue(user)) {
return
}
// wait for all jobs to finish
scanner.CloseScannerQueue()
}
func RunScannerAll(t *testing.T, db *gorm.DB) {
if !assert.NoError(t, scanner.InitializeScannerQueue(db)) {
return
}
if !assert.NoError(t, scanner.AddAllToQueue()) {
return
}
// wait for all jobs to finish
scanner.CloseScannerQueue()
}