Test: filesystem/Preview

pull/247/head
HFO4 5 years ago
parent 8a262a15d5
commit 35c2a5c977

@ -68,7 +68,6 @@ func GetPolicyByID(ID interface{}) (Policy, error) {
} }
// IsDirectlyPreview 返回此策略下文件是否可以直接预览(不需要重定向) // IsDirectlyPreview 返回此策略下文件是否可以直接预览(不需要重定向)
// TODO 测试
func (policy *Policy) IsDirectlyPreview() bool { func (policy *Policy) IsDirectlyPreview() bool {
return policy.Type == "local" return policy.Type == "local"
} }

@ -133,3 +133,11 @@ func TestPolicy_GenerateFileName(t *testing.T) {
testPolicy.FileNameRule = "{uid}123{originname}" testPolicy.FileNameRule = "{uid}123{originname}"
asserts.Equal("1123{filename}{.suffix}", testPolicy.GenerateFileName(1, "")) asserts.Equal("1123{filename}{.suffix}", testPolicy.GenerateFileName(1, ""))
} }
func TestPolicy_IsDirectlyPreview(t *testing.T) {
asserts := assert.New(t)
policy := Policy{Type: "local"}
asserts.True(policy.IsDirectlyPreview())
policy.Type = "remote"
asserts.False(policy.IsDirectlyPreview())
}

@ -88,7 +88,6 @@ func (fs *FileSystem) GetPhysicalFileContent(ctx context.Context, path string) (
} }
// Preview 预览文件 // Preview 预览文件
// TODO 测试
func (fs *FileSystem) Preview(ctx context.Context, path string) (*response.ContentResponse, error) { func (fs *FileSystem) Preview(ctx context.Context, path string) (*response.ContentResponse, error) {
err := fs.resetFileIfNotExist(ctx, path) err := fs.resetFileIfNotExist(ctx, path)
if err != nil { if err != nil {
@ -106,6 +105,7 @@ func (fs *FileSystem) Preview(ctx context.Context, path string) (*response.Conte
Content: resp, Content: resp,
}, nil }, nil
} }
// 否则重定向到签名的预览URL // 否则重定向到签名的预览URL
ttl, err := strconv.ParseInt(model.GetSettingByName("preview_timeout"), 10, 64) ttl, err := strconv.ParseInt(model.GetSettingByName("preview_timeout"), 10, 64)
if err != nil { if err != nil {
@ -116,12 +116,10 @@ func (fs *FileSystem) Preview(ctx context.Context, path string) (*response.Conte
err, err,
) )
} }
previewURL, err := fs.signURL(ctx, &fs.FileTarget[0], ttl, false) previewURL, err := fs.signURL(ctx, &fs.FileTarget[0], ttl, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &response.ContentResponse{ return &response.ContentResponse{
Redirect: true, Redirect: true,
URL: previewURL, URL: previewURL,

@ -403,14 +403,14 @@ func TestFileSystem_GetDownloadURL(t *testing.T) {
WithArgs(1). WithArgs(1).
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id", "name", "policy_id"}).AddRow(1, "1.txt", 1)) mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id", "name", "policy_id"}).AddRow(1, "1.txt", 1))
// 相关设置
mock.ExpectQuery("SELECT(.+)").WithArgs("download_timeout").WillReturnRows(sqlmock.NewRows([]string{"id", "value"}).AddRow(1, "20"))
// 查找上传策略 // 查找上传策略
mock.ExpectQuery("SELECT(.+)"). mock.ExpectQuery("SELECT(.+)").
WillReturnRows( WillReturnRows(
sqlmock.NewRows([]string{"id", "type", "is_origin_link_enable"}). sqlmock.NewRows([]string{"id", "type", "is_origin_link_enable"}).
AddRow(35, "local", true), AddRow(35, "local", true),
) )
// 相关设置
mock.ExpectQuery("SELECT(.+)").WithArgs("download_timeout").WillReturnRows(sqlmock.NewRows([]string{"id", "value"}).AddRow(1, "20"))
mock.ExpectQuery("SELECT(.+)").WithArgs("siteURL").WillReturnRows(sqlmock.NewRows([]string{"id", "value"}).AddRow(1, "https://cloudreve.org")) mock.ExpectQuery("SELECT(.+)").WithArgs("siteURL").WillReturnRows(sqlmock.NewRows([]string{"id", "value"}).AddRow(1, "https://cloudreve.org"))
downloadURL, err := fs.GetDownloadURL(ctx, "/1.txt", "download_timeout") downloadURL, err := fs.GetDownloadURL(ctx, "/1.txt", "download_timeout")
asserts.NoError(mock.ExpectationsWereMet()) asserts.NoError(mock.ExpectationsWereMet())
@ -490,3 +490,105 @@ func TestFileSystem_GetPhysicalFileContent(t *testing.T) {
asserts.NotNil(rs) asserts.NotNil(rs)
} }
} }
func TestFileSystem_Preview(t *testing.T) {
asserts := assert.New(t)
ctx := context.Background()
// 文件不存在
{
fs := FileSystem{
User: &model.User{},
}
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}))
resp, err := fs.Preview(ctx, "/1.txt")
asserts.NoError(mock.ExpectationsWereMet())
asserts.Error(err)
asserts.Nil(resp)
}
// 直接返回文件内容,找不到文件
{
fs := FileSystem{
User: &model.User{},
}
fs.FileTarget = []model.File{
{
PolicyID: 1,
Policy: model.Policy{
Model: gorm.Model{ID: 1},
Type: "local",
},
},
}
resp, err := fs.Preview(ctx, "/1.txt")
asserts.Error(err)
asserts.Nil(resp)
}
// 直接返回文件内容
{
fs := FileSystem{
User: &model.User{},
}
fs.FileTarget = []model.File{
{
SourceName: "tests/file1.txt",
PolicyID: 1,
Policy: model.Policy{
Model: gorm.Model{ID: 1},
Type: "local",
},
},
}
resp, err := fs.Preview(ctx, "/1.txt")
asserts.NoError(err)
asserts.NotNil(resp)
asserts.False(resp.Redirect)
asserts.NoError(resp.Content.Close())
}
// 需要重定向,无法解析有效期设置
{
fs := FileSystem{
User: &model.User{},
}
fs.FileTarget = []model.File{
{
SourceName: "tests/file1.txt",
PolicyID: 1,
Policy: model.Policy{
Model: gorm.Model{ID: 1},
Type: "remote",
},
},
}
asserts.NoError(cache.Set("setting_preview_timeout", "test", 0))
resp, err := fs.Preview(ctx, "/1.txt")
asserts.Error(err)
asserts.Nil(resp)
asserts.Equal(serializer.CodeInternalSetting, err.(serializer.AppError).Code)
}
// 需要重定向,成功
{
fs := FileSystem{
User: &model.User{},
}
fs.FileTarget = []model.File{
{
SourceName: "tests/file1.txt",
PolicyID: 1,
Policy: model.Policy{
Model: gorm.Model{ID: 1},
Type: "remote",
},
},
}
asserts.NoError(cache.Set("setting_preview_timeout", "233", 0))
resp, err := fs.Preview(ctx, "/1.txt")
asserts.NoError(err)
asserts.NotNil(resp)
asserts.True(resp.Redirect)
}
}

Loading…
Cancel
Save