|
|
|
package middleware
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http/httptest"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
|
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestShareAvailable(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
testFunc := ShareAvailable()
|
|
|
|
|
|
|
|
// 分享不存在
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Params = []gin.Param{
|
|
|
|
{"id", "empty"},
|
|
|
|
}
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 通过
|
|
|
|
{
|
|
|
|
conf.SystemConfig.HashIDSalt = ""
|
|
|
|
// 用户组
|
|
|
|
mock.ExpectQuery("SELECT(.+)groups(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(3))
|
|
|
|
mock.ExpectQuery("SELECT(.+)shares(.+)").
|
|
|
|
WillReturnRows(
|
|
|
|
sqlmock.NewRows(
|
|
|
|
[]string{"id", "remain_downloads", "source_id"}).
|
|
|
|
AddRow(1, 1, 2),
|
|
|
|
)
|
|
|
|
mock.ExpectQuery("SELECT(.+)files(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2))
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Params = []gin.Param{
|
|
|
|
{"id", "x9T4"},
|
|
|
|
}
|
|
|
|
testFunc(c)
|
|
|
|
asserts.NoError(mock.ExpectationsWereMet())
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
asserts.NotNil(c.Get("user"))
|
|
|
|
asserts.NotNil(c.Get("share"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestShareCanPreview(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
testFunc := ShareCanPreview()
|
|
|
|
|
|
|
|
// 无分享上下文
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 可以预览
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{PreviewEnabled: true})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 未开启预览
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{PreviewEnabled: false})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCheckShareUnlocked(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
testFunc := CheckShareUnlocked()
|
|
|
|
|
|
|
|
// 无分享上下文
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 无密码
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBeforeShareDownload(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
testFunc := BeforeShareDownload()
|
|
|
|
|
|
|
|
// 无分享上下文
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
|
|
|
|
c, _ = gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 用户不能下载
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
c.Set("user", &model.User{
|
|
|
|
Group: model.Group{OptionsSerialized: model.GroupOption{}},
|
|
|
|
})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 可以下载
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
c.Set("user", &model.User{
|
|
|
|
Model: gorm.Model{ID: 1},
|
|
|
|
Group: model.Group{OptionsSerialized: model.GroupOption{
|
|
|
|
ShareDownload: true,
|
|
|
|
}},
|
|
|
|
})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestShareOwner(t *testing.T) {
|
|
|
|
asserts := assert.New(t)
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
testFunc := ShareOwner()
|
|
|
|
|
|
|
|
// 未登录
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
|
|
|
|
c, _ = gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 非用户所创建分享
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
|
|
|
|
c, _ = gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{User: model.User{Model: gorm.Model{ID: 1}}})
|
|
|
|
c.Set("user", &model.User{})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 正常
|
|
|
|
{
|
|
|
|
c, _ := gin.CreateTestContext(rec)
|
|
|
|
testFunc(c)
|
|
|
|
asserts.True(c.IsAborted())
|
|
|
|
|
|
|
|
c, _ = gin.CreateTestContext(rec)
|
|
|
|
c.Set("share", &model.Share{})
|
|
|
|
c.Set("user", &model.User{})
|
|
|
|
testFunc(c)
|
|
|
|
asserts.False(c.IsAborted())
|
|
|
|
}
|
|
|
|
}
|