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)
|
query := db.Model(models.Album{}).Where("id IN (?)", userAlbumIDs)
|
||||||
|
|
||||||
if onlyRoot != nil && *onlyRoot {
|
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")
|
query = query.Where("parent_album_id IS NULL")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if showEmpty == nil || !*showEmpty {
|
if showEmpty == nil || !*showEmpty {
|
||||||
subQuery := db.Model(&models.Media{}).Where("album_id = albums.id")
|
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