From 2dcf1664a6df8c342f7e30a0bfed7b6fe0a0b692 Mon Sep 17 00:00:00 2001 From: vvisionnn <0xEFEFEF@gmail.com> Date: Mon, 25 Apr 2022 20:23:53 +0800 Subject: [PATCH] fix: keep update at column when rename --- models/file.go | 2 +- models/file_test.go | 8 +++++--- models/folder.go | 5 +---- models/folder_test.go | 36 +++++++++++++++++++++++++++++++++++ pkg/filesystem/manage_test.go | 21 ++++++++++---------- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/models/file.go b/models/file.go index 3a125fa..656ce4c 100644 --- a/models/file.go +++ b/models/file.go @@ -266,7 +266,7 @@ func GetFilesByUploadSession(sessionID string, uid uint) (*File, error) { // Rename 重命名文件 func (file *File) Rename(new string) error { - return DB.Model(&file).Update("name", new).Error + return DB.Model(&file).UpdateColumn("name", new).Error } // UpdatePicInfo 更新文件的图像信息 diff --git a/models/file_test.go b/models/file_test.go index 19fdacb..68bf89c 100644 --- a/models/file_test.go +++ b/models/file_test.go @@ -2,11 +2,12 @@ package model import ( "errors" + "testing" + "time" + "github.com/DATA-DOG/go-sqlmock" "github.com/jinzhu/gorm" "github.com/stretchr/testify/assert" - "testing" - "time" ) func TestFile_Create(t *testing.T) { @@ -425,10 +426,11 @@ func TestGetFilesByUploadSession(t *testing.T) { func TestFile_Updates(t *testing.T) { asserts := assert.New(t) file := File{Model: gorm.Model{ID: 1}} + // rename { mock.ExpectBegin() - mock.ExpectExec("UPDATE(.+)").WithArgs("newName", sqlmock.AnyArg(), 1).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectExec("UPDATE(.+)files(.+)SET(.+)").WithArgs("newName", 1).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() err := file.Rename("newName") asserts.NoError(mock.ExpectationsWereMet()) diff --git a/models/folder.go b/models/folder.go index 251c127..4a89494 100644 --- a/models/folder.go +++ b/models/folder.go @@ -300,10 +300,7 @@ func (folder *Folder) MoveFolderTo(dirs []uint, dstFolder *Folder) error { // Rename 重命名目录 func (folder *Folder) Rename(new string) error { - if err := DB.Model(&folder).Update("name", new).Error; err != nil { - return err - } - return nil + return DB.Model(&folder).UpdateColumn("name", new).Error } /* diff --git a/models/folder_test.go b/models/folder_test.go index f3137b3..7f12a73 100644 --- a/models/folder_test.go +++ b/models/folder_test.go @@ -585,3 +585,39 @@ func TestTraceRoot(t *testing.T) { asserts.NoError(mock.ExpectationsWereMet()) } } + +func TestFolder_Rename(t *testing.T) { + asserts := assert.New(t) + folder := Folder{ + Model: gorm.Model{ + ID: 1, + }, + Name: "test_name", + OwnerID: 1, + Position: "/test", + } + + // 成功 + { + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)folders(.+)SET(.+)"). + WithArgs("test_name_new", 1). + WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + err := folder.Rename("test_name_new") + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + } + + // 出现错误 + { + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)folders(.+)SET(.+)"). + WithArgs("test_name_new", 1). + WillReturnError(errors.New("error")) + mock.ExpectRollback() + err := folder.Rename("test_name_new") + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + } +} diff --git a/pkg/filesystem/manage_test.go b/pkg/filesystem/manage_test.go index 03cf94e..7465bec 100644 --- a/pkg/filesystem/manage_test.go +++ b/pkg/filesystem/manage_test.go @@ -3,11 +3,12 @@ package filesystem import ( "context" "errors" - "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response" - testMock "github.com/stretchr/testify/mock" "os" "testing" + "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response" + testMock "github.com/stretchr/testify/mock" + "github.com/DATA-DOG/go-sqlmock" model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/cache" @@ -670,8 +671,8 @@ func TestFileSystem_Rename(t *testing.T) { WithArgs(10, 1). WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(10, "old.text")) mock.ExpectBegin() - mock.ExpectExec("UPDATE(.+)files(.+)"). - WithArgs("new.txt", sqlmock.AnyArg(), 10). + mock.ExpectExec("UPDATE(.+)files(.+)SET(.+)"). + WithArgs("new.txt", 10). WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() err := fs.Rename(ctx, []uint{}, []uint{10}, "new.txt") @@ -696,8 +697,8 @@ func TestFileSystem_Rename(t *testing.T) { WithArgs(10, 1). WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(10, "old.text")) mock.ExpectBegin() - mock.ExpectExec("UPDATE(.+)files(.+)"). - WithArgs("new.txt", sqlmock.AnyArg(), 10). + mock.ExpectExec("UPDATE(.+)files(.+)SET(.+)"). + WithArgs("new.txt", 10). WillReturnError(errors.New("error")) mock.ExpectRollback() err := fs.Rename(ctx, []uint{}, []uint{10}, "new.txt") @@ -712,8 +713,8 @@ func TestFileSystem_Rename(t *testing.T) { WithArgs(10, 1). WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(10, "old")) mock.ExpectBegin() - mock.ExpectExec("UPDATE(.+)folders(.+)"). - WithArgs("new", sqlmock.AnyArg(), 10). + mock.ExpectExec("UPDATE(.+)folders(.+)SET(.+)"). + WithArgs("new", 10). WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() err := fs.Rename(ctx, []uint{10}, []uint{}, "new") @@ -738,8 +739,8 @@ func TestFileSystem_Rename(t *testing.T) { WithArgs(10, 1). WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(10, "old")) mock.ExpectBegin() - mock.ExpectExec("UPDATE(.+)folders(.+)"). - WithArgs("new", sqlmock.AnyArg(), 10). + mock.ExpectExec("UPDATE(.+)folders(.+)SET(.+)"). + WithArgs("new", 10). WillReturnError(errors.New("error")) mock.ExpectRollback() err := fs.Rename(ctx, []uint{10}, []uint{}, "new")