Merge pull request #644 from photoview/fix-485
Expand root album to its children, if user only has a single root album.
This commit is contained in:
commit
88da2644a8
|
@ -23,8 +23,25 @@ func MyAlbums(db *gorm.DB, user *models.User, order *models.Ordering, paginate *
|
|||
query := db.Model(models.Album{}).Where("id IN (?)", userAlbumIDs)
|
||||
|
||||
if onlyRoot != nil && *onlyRoot {
|
||||
|
||||
var singleRootAlbumID int = -1
|
||||
for _, album := range user.Albums {
|
||||
if album.ParentAlbumID == nil {
|
||||
if singleRootAlbumID == -1 {
|
||||
singleRootAlbumID = album.ID
|
||||
} else {
|
||||
singleRootAlbumID = -1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if singleRootAlbumID != -1 && len(user.Albums) > 1 {
|
||||
query = query.Where("parent_album_id = ?", singleRootAlbumID)
|
||||
} else {
|
||||
query = query.Where("parent_album_id IS NULL")
|
||||
}
|
||||
}
|
||||
|
||||
if showEmpty == nil || !*showEmpty {
|
||||
subQuery := db.Model(&models.Media{}).Where("album_id = albums.id")
|
||||
|
|
|
@ -206,3 +206,64 @@ func TestAlbumCover(t *testing.T) {
|
|||
})
|
||||
|
||||
}
|
||||
|
||||
func TestAlbumsSingleRootExpand(t *testing.T) {
|
||||
db := test_utils.DatabaseTest(t)
|
||||
boolFalse := false
|
||||
boolTrue := true
|
||||
|
||||
unrelatedAlbum := models.Album{
|
||||
Title: "unrelated_album",
|
||||
Path: "/another_place",
|
||||
}
|
||||
err := db.Create(&unrelatedAlbum).Error
|
||||
assert.NoError(t, err)
|
||||
|
||||
user, err := models.RegisterUser(db, "user", nil, false)
|
||||
assert.NoError(t, err)
|
||||
|
||||
rootAlbum := models.Album{
|
||||
Title: "root",
|
||||
Path: "/root",
|
||||
}
|
||||
|
||||
err = db.Model(&user).Association("Albums").Replace(&rootAlbum)
|
||||
assert.NoError(t, err)
|
||||
|
||||
t.Run("Single root album, no children", func(t *testing.T) {
|
||||
returnedAlbums, err := actions.MyAlbums(db, user, nil, nil, &boolTrue, &boolTrue, &boolFalse)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Len(t, returnedAlbums, 1)
|
||||
})
|
||||
|
||||
childAlbums := []models.Album{
|
||||
{
|
||||
Title: "child1",
|
||||
Path: "/root/child1",
|
||||
ParentAlbumID: &rootAlbum.ID,
|
||||
},
|
||||
{
|
||||
Title: "child2",
|
||||
Path: "/root/child2",
|
||||
ParentAlbumID: &rootAlbum.ID,
|
||||
},
|
||||
{
|
||||
Title: "child3",
|
||||
Path: "/root/child3",
|
||||
ParentAlbumID: &rootAlbum.ID,
|
||||
},
|
||||
}
|
||||
|
||||
err = db.Model(&user).Association("Albums").Append(&childAlbums)
|
||||
assert.NoError(t, err)
|
||||
|
||||
t.Run("Single root album, multiple children", func(t *testing.T) {
|
||||
|
||||
returnedAlbums, err := actions.MyAlbums(db, user, nil, nil, &boolTrue, &boolTrue, &boolFalse)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Len(t, returnedAlbums, 3)
|
||||
})
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue