mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-11-04 04:47:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			189 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package filesystem
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"github.com/DATA-DOG/go-sqlmock"
 | 
						|
	model "github.com/HFO4/cloudreve/models"
 | 
						|
	"github.com/HFO4/cloudreve/pkg/conf"
 | 
						|
	"github.com/HFO4/cloudreve/pkg/filesystem/response"
 | 
						|
	"github.com/HFO4/cloudreve/pkg/util"
 | 
						|
	"github.com/jinzhu/gorm"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	testMock "github.com/stretchr/testify/mock"
 | 
						|
	"image"
 | 
						|
	"image/jpeg"
 | 
						|
	"os"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func CreateTestImage() *os.File {
 | 
						|
	file, err := os.Create("TestFileSystem_GenerateThumbnail.jpeg")
 | 
						|
	alpha := image.NewAlpha(image.Rect(0, 0, 500, 200))
 | 
						|
	jpeg.Encode(file, alpha, nil)
 | 
						|
	if err != nil {
 | 
						|
		fmt.Println(err)
 | 
						|
	}
 | 
						|
	_, _ = file.Seek(0, 0)
 | 
						|
	return file
 | 
						|
}
 | 
						|
 | 
						|
func TestFileSystem_GetThumb(t *testing.T) {
 | 
						|
	asserts := assert.New(t)
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	// 正常
 | 
						|
	{
 | 
						|
		fs := FileSystem{
 | 
						|
			User: &model.User{
 | 
						|
				Model: gorm.Model{ID: 1},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		testHandler := new(FileHeaderMock)
 | 
						|
		testHandler.On("Thumb", testMock.Anything, "123.jpg").Return(&response.ContentResponse{URL: "123"}, nil)
 | 
						|
		fs.Handler = testHandler
 | 
						|
		mock.ExpectQuery("SELECT(.+)").
 | 
						|
			WithArgs(10, 1).
 | 
						|
			WillReturnRows(
 | 
						|
				sqlmock.NewRows(
 | 
						|
					[]string{"id", "pic_info", "source_name", "policy_id"}).
 | 
						|
					AddRow(10, "10,10", "123.jpg", 154),
 | 
						|
			)
 | 
						|
		mock.ExpectQuery("SELECT(.+)").
 | 
						|
			WillReturnRows(
 | 
						|
				sqlmock.NewRows(
 | 
						|
					[]string{"id", "type"}).
 | 
						|
					AddRow(154, "mock"),
 | 
						|
			)
 | 
						|
 | 
						|
		res, err := fs.GetThumb(ctx, 10)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
		testHandler.AssertExpectations(t)
 | 
						|
		asserts.NoError(err)
 | 
						|
		asserts.Equal("123", res.URL)
 | 
						|
	}
 | 
						|
 | 
						|
	// 文件不存在
 | 
						|
	{
 | 
						|
		fs := FileSystem{
 | 
						|
			User: &model.User{
 | 
						|
				Model: gorm.Model{ID: 1},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		mock.ExpectQuery("SELECT(.+)").
 | 
						|
			WithArgs(10, 1).
 | 
						|
			WillReturnRows(
 | 
						|
				sqlmock.NewRows(
 | 
						|
					[]string{"id", "pic_info", "source_name"}),
 | 
						|
			)
 | 
						|
 | 
						|
		_, err := fs.GetThumb(ctx, 10)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
		asserts.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFileSystem_GenerateThumbnail(t *testing.T) {
 | 
						|
	asserts := assert.New(t)
 | 
						|
	fs := FileSystem{
 | 
						|
		User: &model.User{
 | 
						|
			Model: gorm.Model{ID: 1},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	ctx := context.Background()
 | 
						|
 | 
						|
	// 成功
 | 
						|
	{
 | 
						|
		src := CreateTestImage()
 | 
						|
		testHandler := new(FileHeaderMock)
 | 
						|
		testHandler.On("Get", testMock.Anything, "TestFileSystem_GenerateThumbnail.jpeg").Return(src, nil)
 | 
						|
		fs.Handler = testHandler
 | 
						|
 | 
						|
		mock.ExpectBegin()
 | 
						|
		mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
 | 
						|
		mock.ExpectCommit()
 | 
						|
 | 
						|
		file := &model.File{
 | 
						|
			Model:      gorm.Model{ID: 1},
 | 
						|
			Name:       "123.jpg",
 | 
						|
			SourceName: "TestFileSystem_GenerateThumbnail.jpeg",
 | 
						|
		}
 | 
						|
 | 
						|
		fs.GenerateThumbnail(ctx, file)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
		testHandler.AssertExpectations(t)
 | 
						|
		asserts.True(util.Exists("TestFileSystem_GenerateThumbnail.jpeg" + conf.ThumbConfig.FileSuffix))
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	// 成功,不进行数据库更新
 | 
						|
	{
 | 
						|
		src := CreateTestImage()
 | 
						|
		testHandler := new(FileHeaderMock)
 | 
						|
		testHandler.On("Get", testMock.Anything, "TestFileSystem_GenerateThumbnail.jpeg").Return(src, nil)
 | 
						|
		fs.Handler = testHandler
 | 
						|
 | 
						|
		file := &model.File{
 | 
						|
			Name:       "123.jpg",
 | 
						|
			SourceName: "TestFileSystem_GenerateThumbnail.jpeg",
 | 
						|
		}
 | 
						|
 | 
						|
		fs.GenerateThumbnail(ctx, file)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
		testHandler.AssertExpectations(t)
 | 
						|
		asserts.True(util.Exists("TestFileSystem_GenerateThumbnail.jpeg" + conf.ThumbConfig.FileSuffix))
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	// 更新信息失败后删除文件
 | 
						|
	{
 | 
						|
		src := CreateTestImage()
 | 
						|
		testHandler := new(FileHeaderMock)
 | 
						|
		testHandler.On("Get", testMock.Anything, "TestFileSystem_GenerateThumbnail.jpeg").Return(src, nil)
 | 
						|
		testHandler.On("Delete", testMock.Anything, testMock.Anything).Return([]string{}, nil)
 | 
						|
		fs.Handler = testHandler
 | 
						|
 | 
						|
		mock.ExpectBegin()
 | 
						|
		mock.ExpectExec("UPDATE(.+)").WillReturnError(errors.New("error"))
 | 
						|
		mock.ExpectRollback()
 | 
						|
 | 
						|
		file := &model.File{
 | 
						|
			Model:      gorm.Model{ID: 1},
 | 
						|
			Name:       "123.jpg",
 | 
						|
			SourceName: "TestFileSystem_GenerateThumbnail.jpeg",
 | 
						|
		}
 | 
						|
 | 
						|
		fs.GenerateThumbnail(ctx, file)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
		testHandler.AssertExpectations(t)
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	// 不能生成缩略图
 | 
						|
	{
 | 
						|
		file := &model.File{
 | 
						|
			Model:      gorm.Model{ID: 1},
 | 
						|
			Name:       "123.123",
 | 
						|
			SourceName: "TestFileSystem_GenerateThumbnail.jpeg",
 | 
						|
		}
 | 
						|
 | 
						|
		fs.GenerateThumbnail(ctx, file)
 | 
						|
		asserts.NoError(mock.ExpectationsWereMet())
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
func TestFileSystem_GenerateThumbnailSize(t *testing.T) {
 | 
						|
	asserts := assert.New(t)
 | 
						|
	fs := FileSystem{
 | 
						|
		User: &model.User{
 | 
						|
			Model: gorm.Model{ID: 1},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	asserts.NotPanics(func() {
 | 
						|
		_, _ = fs.GenerateThumbnailSize(0, 0)
 | 
						|
	})
 | 
						|
 | 
						|
}
 |