test(thumb): new changes in filesystem pkg
This commit is contained in:
@@ -5,8 +5,11 @@ import (
|
||||
"errors"
|
||||
model "github.com/cloudreve/Cloudreve/v3/models"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/cache"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/mocks/thumbmock"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/request"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/thumb"
|
||||
testMock "github.com/stretchr/testify/mock"
|
||||
"testing"
|
||||
|
||||
@@ -14,30 +17,104 @@ import (
|
||||
)
|
||||
|
||||
func TestFileSystem_GetThumb(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
a := assert.New(t)
|
||||
fs := &FileSystem{User: &model.User{}}
|
||||
|
||||
// 非图像文件
|
||||
// file not found
|
||||
{
|
||||
fs.SetTargetFile(&[]model.File{{}})
|
||||
_, err := fs.GetThumb(context.Background(), 1)
|
||||
asserts.Equal(err, ErrObjectNotExist)
|
||||
mock.ExpectQuery("SELECT(.+)").WillReturnError(errors.New("error"))
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
a.ErrorIs(err, ErrObjectNotExist)
|
||||
a.Nil(res)
|
||||
a.NoError(mock.ExpectationsWereMet())
|
||||
}
|
||||
|
||||
// 成功
|
||||
// thumb not exist
|
||||
{
|
||||
cache.Set("setting_thumb_width", "10", 0)
|
||||
cache.Set("setting_thumb_height", "10", 0)
|
||||
cache.Set("setting_preview_timeout", "50", 0)
|
||||
testHandller2 := new(FileHeaderMock)
|
||||
testHandller2.On("Thumb", testMock.Anything, "").Return(&response.ContentResponse{}, nil)
|
||||
fs.CleanTargets()
|
||||
fs.SetTargetFile(&[]model.File{{PicInfo: "1,1", Policy: model.Policy{Type: "mock"}}})
|
||||
fs.SetTargetFile(&[]model.File{{
|
||||
MetadataSerialized: map[string]string{
|
||||
model.ThumbStatusMetadataKey: model.ThumbStatusNotAvailable,
|
||||
},
|
||||
Policy: model.Policy{Type: "mock"},
|
||||
}})
|
||||
fs.FileTarget[0].Policy.ID = 1
|
||||
fs.Handler = testHandller2
|
||||
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
asserts.NoError(err)
|
||||
asserts.EqualValues(50, res.MaxAge)
|
||||
a.ErrorIs(err, ErrObjectNotExist)
|
||||
a.Nil(res)
|
||||
}
|
||||
|
||||
// thumb not initialized, also failed to generate
|
||||
{
|
||||
fs.CleanTargets()
|
||||
fs.SetTargetFile(&[]model.File{{
|
||||
Policy: model.Policy{Type: "mock"},
|
||||
Size: 31457281,
|
||||
}})
|
||||
testHandller2 := new(FileHeaderMock)
|
||||
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
||||
fs.Handler = testHandller2
|
||||
fs.FileTarget[0].Policy.ID = 1
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
a.Contains(err.Error(), "file too large")
|
||||
a.Nil(res.Content)
|
||||
}
|
||||
|
||||
// thumb not initialized, failed to get source
|
||||
{
|
||||
fs.CleanTargets()
|
||||
fs.SetTargetFile(&[]model.File{{
|
||||
Policy: model.Policy{Type: "mock"},
|
||||
}})
|
||||
testHandller2 := new(FileHeaderMock)
|
||||
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
||||
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, errors.New("error"))
|
||||
fs.Handler = testHandller2
|
||||
fs.FileTarget[0].Policy.ID = 1
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
a.Contains(err.Error(), "error")
|
||||
a.Nil(res.Content)
|
||||
}
|
||||
|
||||
// thumb not initialized, no available generators
|
||||
{
|
||||
thumb.Generators = []thumb.Generator{}
|
||||
fs.CleanTargets()
|
||||
fs.SetTargetFile(&[]model.File{{
|
||||
Policy: model.Policy{Type: "local"},
|
||||
}})
|
||||
testHandller2 := new(FileHeaderMock)
|
||||
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
||||
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil)
|
||||
fs.Handler = testHandller2
|
||||
fs.FileTarget[0].Policy.ID = 1
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
a.ErrorIs(err, thumb.ErrNotAvailable)
|
||||
a.Nil(res)
|
||||
}
|
||||
|
||||
// thumb not initialized, thumb generated but cannot be open
|
||||
{
|
||||
mockGenerator := &thumbmock.GeneratorMock{}
|
||||
thumb.Generators = []thumb.Generator{mockGenerator}
|
||||
fs.CleanTargets()
|
||||
fs.SetTargetFile(&[]model.File{{
|
||||
Policy: model.Policy{Type: "mock"},
|
||||
}})
|
||||
cache.Set("setting_thumb_vips_enabled", "1", 0)
|
||||
testHandller2 := new(FileHeaderMock)
|
||||
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
||||
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil)
|
||||
mockGenerator.On("Generate", testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything).
|
||||
Return(&thumb.Result{Path: "not_exit_thumb"}, nil)
|
||||
|
||||
fs.Handler = testHandller2
|
||||
fs.FileTarget[0].Policy.ID = 1
|
||||
res, err := fs.GetThumb(context.Background(), 1)
|
||||
a.Contains(err.Error(), "failed to open temp thumb")
|
||||
a.Nil(res.Content)
|
||||
testHandller2.AssertExpectations(t)
|
||||
mockGenerator.AssertExpectations(t)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +133,7 @@ func TestFileSystem_GenerateThumbnail(t *testing.T) {
|
||||
// 无法生成缩略图
|
||||
{
|
||||
fs.SetTargetFile(&[]model.File{{}})
|
||||
fs.GenerateThumbnail(context.Background(), &model.File{})
|
||||
fs.generateThumbnail(context.Background(), &model.File{})
|
||||
}
|
||||
|
||||
// 无法获取文件数据
|
||||
@@ -64,7 +141,7 @@ func TestFileSystem_GenerateThumbnail(t *testing.T) {
|
||||
testHandller := new(FileHeaderMock)
|
||||
testHandller.On("Get", testMock.Anything, "").Return(request.NopRSCloser{}, errors.New("error"))
|
||||
fs.Handler = testHandller
|
||||
fs.GenerateThumbnail(context.Background(), &model.File{Name: "test.png"})
|
||||
fs.generateThumbnail(context.Background(), &model.File{Name: "test.png"})
|
||||
testHandller.AssertExpectations(t)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user