108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
package actions_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/photoview/photoview/api/graphql/models"
|
|
"github.com/photoview/photoview/api/graphql/models/actions"
|
|
"github.com/photoview/photoview/api/test_utils"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestShareToken(t *testing.T) {
|
|
db := test_utils.DatabaseTest(t)
|
|
|
|
password := "1234"
|
|
user, err := models.RegisterUser(db, "user", &password, false)
|
|
assert.NoError(t, err)
|
|
|
|
rootAlbum := models.Album{
|
|
Title: "root",
|
|
Path: "/photos",
|
|
}
|
|
|
|
assert.NoError(t, db.Save(&rootAlbum).Error)
|
|
|
|
childAlbum := models.Album{
|
|
Title: "subalbum",
|
|
Path: "/photos/subalbum",
|
|
ParentAlbumID: &rootAlbum.ID,
|
|
}
|
|
|
|
assert.NoError(t, db.Save(&childAlbum).Error)
|
|
|
|
assert.NoError(t, db.Model(&user).Association("Albums").Append(&rootAlbum))
|
|
assert.NoError(t, db.Model(&user).Association("Albums").Append(&childAlbum))
|
|
|
|
media := []models.Media{
|
|
{
|
|
Title: "pic1",
|
|
Path: "/photos/pic1",
|
|
AlbumID: rootAlbum.ID,
|
|
},
|
|
{
|
|
Title: "pic3",
|
|
Path: "/photos/subalbum/pic3",
|
|
AlbumID: childAlbum.ID,
|
|
},
|
|
{
|
|
Title: "pic4",
|
|
Path: "/photos/subalbum/pic4",
|
|
AlbumID: childAlbum.ID,
|
|
},
|
|
}
|
|
|
|
assert.NoError(t, db.Save(&media).Error)
|
|
|
|
expireTime := time.Unix(1632866400, 0)
|
|
sharePassword := "secretSharePassword"
|
|
|
|
var mediaShare *models.ShareToken
|
|
var albumShare *models.ShareToken
|
|
|
|
t.Run("Add album share", func(t *testing.T) {
|
|
share, err := actions.AddAlbumShare(db, user, rootAlbum.ID, &expireTime, nil)
|
|
albumShare = share
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, share)
|
|
|
|
assert.NotEmpty(t, share.Value)
|
|
assert.NotNil(t, share.AlbumID)
|
|
assert.Nil(t, share.MediaID)
|
|
})
|
|
|
|
t.Run("Add media share", func(t *testing.T) {
|
|
share, err := actions.AddMediaShare(db, user, rootAlbum.ID, &expireTime, &sharePassword)
|
|
mediaShare = share
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, share)
|
|
|
|
assert.NotEmpty(t, share.Value)
|
|
assert.NotNil(t, share.MediaID)
|
|
assert.Nil(t, share.AlbumID)
|
|
})
|
|
|
|
t.Run("Delete share token", func(t *testing.T) {
|
|
deletedShare, err := actions.DeleteShareToken(db, user.ID, mediaShare.Value)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, mediaShare.ID, deletedShare.ID)
|
|
})
|
|
|
|
t.Run("Protect share token", func(t *testing.T) {
|
|
|
|
assert.Empty(t, albumShare.Password)
|
|
|
|
share, err := actions.ProtectShareToken(db, user.ID, albumShare.Value, &sharePassword)
|
|
assert.NoError(t, err)
|
|
assert.NotEmpty(t, share.Password)
|
|
|
|
share, err = actions.ProtectShareToken(db, user.ID, albumShare.Value, nil)
|
|
assert.NoError(t, err)
|
|
assert.Empty(t, share.Password)
|
|
})
|
|
}
|