github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/task/transfer_test.go (about) 1 package task 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/DATA-DOG/go-sqlmock" 8 model "github.com/cloudreve/Cloudreve/v3/models" 9 "github.com/jinzhu/gorm" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestTransferTask_Props(t *testing.T) { 14 asserts := assert.New(t) 15 task := &TransferTask{ 16 User: &model.User{}, 17 } 18 asserts.NotEmpty(task.Props()) 19 asserts.Equal(TransferTaskType, task.Type()) 20 asserts.EqualValues(0, task.Creator()) 21 asserts.Nil(task.Model()) 22 } 23 24 func TestTransferTask_SetStatus(t *testing.T) { 25 asserts := assert.New(t) 26 task := &TransferTask{ 27 User: &model.User{}, 28 TaskModel: &model.Task{ 29 Model: gorm.Model{ID: 1}, 30 }, 31 } 32 mock.ExpectBegin() 33 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 34 mock.ExpectCommit() 35 task.SetStatus(3) 36 asserts.NoError(mock.ExpectationsWereMet()) 37 } 38 39 func TestTransferTask_SetError(t *testing.T) { 40 asserts := assert.New(t) 41 task := &TransferTask{ 42 User: &model.User{}, 43 TaskModel: &model.Task{ 44 Model: gorm.Model{ID: 1}, 45 }, 46 } 47 48 mock.ExpectBegin() 49 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 50 mock.ExpectCommit() 51 52 task.SetErrorMsg("error", nil) 53 asserts.NoError(mock.ExpectationsWereMet()) 54 asserts.Equal("error", task.GetError().Msg) 55 } 56 57 func TestTransferTask_Do(t *testing.T) { 58 asserts := assert.New(t) 59 task := &TransferTask{ 60 TaskModel: &model.Task{ 61 Model: gorm.Model{ID: 1}, 62 }, 63 } 64 65 // 无法创建文件系统 66 { 67 task.TaskProps.Parent = "test/not_exist" 68 task.User = &model.User{ 69 Policy: model.Policy{ 70 Type: "unknown", 71 }, 72 } 73 mock.ExpectBegin() 74 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 75 1)) 76 mock.ExpectCommit() 77 task.Do() 78 asserts.NoError(mock.ExpectationsWereMet()) 79 asserts.NotEmpty(task.GetError().Msg) 80 } 81 82 // 上传出错 83 { 84 task.User = &model.User{ 85 Policy: model.Policy{ 86 Type: "mock", 87 }, 88 } 89 task.TaskProps.Src = []string{"test/not_exist"} 90 task.TaskProps.Parent = "test/not_exist" 91 // 更新错误 92 mock.ExpectBegin() 93 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 94 1)) 95 mock.ExpectCommit() 96 task.Do() 97 asserts.NoError(mock.ExpectationsWereMet()) 98 asserts.NotEmpty(task.GetError().Msg) 99 } 100 101 // 替换目录前缀 102 { 103 task.User = &model.User{ 104 Policy: model.Policy{ 105 Type: "mock", 106 }, 107 } 108 task.TaskProps.Src = []string{"test/not_exist"} 109 task.TaskProps.Parent = "test/not_exist" 110 task.TaskProps.TrimPath = true 111 // 更新错误 112 mock.ExpectBegin() 113 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 114 1)) 115 mock.ExpectCommit() 116 task.Do() 117 asserts.NoError(mock.ExpectationsWereMet()) 118 asserts.NotEmpty(task.GetError().Msg) 119 } 120 } 121 122 func TestNewTransferTask(t *testing.T) { 123 asserts := assert.New(t) 124 125 // 成功 126 { 127 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 128 mock.ExpectBegin() 129 mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 130 mock.ExpectCommit() 131 job, err := NewTransferTask(1, []string{}, "/", "/", false, 0, nil) 132 asserts.NoError(mock.ExpectationsWereMet()) 133 asserts.NotNil(job) 134 asserts.NoError(err) 135 } 136 137 // 失败 138 { 139 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 140 mock.ExpectBegin() 141 mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) 142 mock.ExpectRollback() 143 job, err := NewTransferTask(1, []string{}, "/", "/", false, 0, nil) 144 asserts.NoError(mock.ExpectationsWereMet()) 145 asserts.Nil(job) 146 asserts.Error(err) 147 } 148 } 149 150 func TestNewTransferTaskFromModel(t *testing.T) { 151 asserts := assert.New(t) 152 153 // 成功 154 { 155 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 156 job, err := NewTransferTaskFromModel(&model.Task{Props: "{}"}) 157 asserts.NoError(mock.ExpectationsWereMet()) 158 asserts.NoError(err) 159 asserts.NotNil(job) 160 } 161 162 // JSON解析失败 163 { 164 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 165 job, err := NewTransferTaskFromModel(&model.Task{Props: "?"}) 166 asserts.NoError(mock.ExpectationsWereMet()) 167 asserts.Error(err) 168 asserts.Nil(job) 169 } 170 }