精简后的项目:仅保留 api/ui 源码、文档、构建依赖
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package resolvers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/photoview/photoview/api/graphql/auth"
|
||||
"github.com/photoview/photoview/api/graphql/models"
|
||||
"github.com/photoview/photoview/api/scanner/face_detection"
|
||||
"github.com/photoview/photoview/api/test_utils"
|
||||
)
|
||||
|
||||
func TestCombineFaceGroups(t *testing.T) {
|
||||
test_utils.FilesystemTest(t)
|
||||
db := test_utils.DatabaseTest(t)
|
||||
face_detection.InitializeFaceDetector(db)
|
||||
pass := "1234"
|
||||
user, err := models.RegisterUser(db, "test_user", &pass, true)
|
||||
if err != nil {
|
||||
t.Fatal("register user error:", err)
|
||||
}
|
||||
db.AutoMigrate(&models.ImageFace{}, &models.FaceGroup{}, &models.Media{}, &models.Album{})
|
||||
tests := []struct {
|
||||
name string
|
||||
dest int
|
||||
src []int
|
||||
}{
|
||||
{
|
||||
name: "merge multiple combinations with duplicates",
|
||||
dest: 1,
|
||||
src: []int{2, 3},
|
||||
},
|
||||
{
|
||||
name: "merge two combinations with duplicates",
|
||||
dest: 1,
|
||||
src: []int{2},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
||||
db.Exec("DELETE FROM image_faces")
|
||||
db.Exec("DELETE FROM face_groups")
|
||||
db.Exec("DELETE FROM media")
|
||||
db.Exec("DELETE FROM albums")
|
||||
|
||||
testAlbum := models.Album{Title: "Test Album"}
|
||||
if err := db.Create(&testAlbum).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testMedia := []models.Media{
|
||||
{Model: models.Model{ID: 1}, Path: "test1", AlbumID: testAlbum.ID},
|
||||
{Model: models.Model{ID: 2}, Path: "test2", AlbumID: testAlbum.ID},
|
||||
{Model: models.Model{ID: 3}, Path: "test3", AlbumID: testAlbum.ID},
|
||||
{Model: models.Model{ID: 4}, Path: "test4", AlbumID: testAlbum.ID},
|
||||
}
|
||||
if err := db.Create(&testMedia).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testFaceGroup := []models.FaceGroup{
|
||||
{Model: models.Model{ID: 1}},
|
||||
{Model: models.Model{ID: 2}},
|
||||
{Model: models.Model{ID: 3}},
|
||||
{Model: models.Model{ID: 4}},
|
||||
}
|
||||
if err := db.Create(&testFaceGroup).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testDataList := []models.ImageFace{
|
||||
{FaceGroupID: 1, MediaID: 1},
|
||||
{FaceGroupID: 1, MediaID: 2},
|
||||
{FaceGroupID: 1, MediaID: 3},
|
||||
{FaceGroupID: 2, MediaID: 3},
|
||||
{FaceGroupID: 2, MediaID: 4},
|
||||
{FaceGroupID: 3, MediaID: 4},
|
||||
{FaceGroupID: 3, MediaID: 1},
|
||||
}
|
||||
if err := db.Create(&testDataList).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
r := &mutationResolver{
|
||||
Resolver: &Resolver{
|
||||
database: db,
|
||||
},
|
||||
}
|
||||
ctx := auth.AddUserToContext(context.Background(), user)
|
||||
|
||||
combineFace, err := r.CombineFaceGroups(ctx, tt.dest, tt.src)
|
||||
if err != nil {
|
||||
t.Fatal("test CombineFaceGroups err:", err)
|
||||
}
|
||||
|
||||
m := make(map[int]struct{})
|
||||
for _, imageface := range combineFace.ImageFaces {
|
||||
if _, ok := m[imageface.MediaID]; ok {
|
||||
t.Fatal("filtering failed at", imageface.MediaID)
|
||||
}
|
||||
m[imageface.MediaID] = struct{}{}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user