github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/task/compress_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/cloudreve/Cloudreve/v3/pkg/cache" 10 "github.com/cloudreve/Cloudreve/v3/pkg/util" 11 "github.com/jinzhu/gorm" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestCompressTask_Props(t *testing.T) { 16 asserts := assert.New(t) 17 task := &CompressTask{ 18 User: &model.User{}, 19 } 20 asserts.NotEmpty(task.Props()) 21 asserts.Equal(CompressTaskType, task.Type()) 22 asserts.EqualValues(0, task.Creator()) 23 asserts.Nil(task.Model()) 24 } 25 26 func TestCompressTask_SetStatus(t *testing.T) { 27 asserts := assert.New(t) 28 task := &CompressTask{ 29 User: &model.User{}, 30 TaskModel: &model.Task{ 31 Model: gorm.Model{ID: 1}, 32 }, 33 } 34 mock.ExpectBegin() 35 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 36 mock.ExpectCommit() 37 task.SetStatus(3) 38 asserts.NoError(mock.ExpectationsWereMet()) 39 } 40 41 func TestCompressTask_SetError(t *testing.T) { 42 asserts := assert.New(t) 43 task := &CompressTask{ 44 User: &model.User{}, 45 TaskModel: &model.Task{ 46 Model: gorm.Model{ID: 1}, 47 }, 48 zipPath: "test/TestCompressTask_SetError", 49 } 50 zipFile, _ := util.CreatNestedFile("test/TestCompressTask_SetError") 51 zipFile.Close() 52 53 mock.ExpectBegin() 54 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 55 mock.ExpectCommit() 56 57 task.SetErrorMsg("error") 58 asserts.NoError(mock.ExpectationsWereMet()) 59 asserts.False(util.Exists("test/TestCompressTask_SetError")) 60 asserts.Equal("error", task.GetError().Msg) 61 } 62 63 func TestCompressTask_Do(t *testing.T) { 64 asserts := assert.New(t) 65 task := &CompressTask{ 66 TaskModel: &model.Task{ 67 Model: gorm.Model{ID: 1}, 68 }, 69 } 70 71 // 无法创建文件系统 72 { 73 task.User = &model.User{ 74 Policy: model.Policy{ 75 Type: "unknown", 76 }, 77 } 78 mock.ExpectBegin() 79 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 80 1)) 81 mock.ExpectCommit() 82 task.Do() 83 asserts.NoError(mock.ExpectationsWereMet()) 84 asserts.NotEmpty(task.GetError().Msg) 85 } 86 87 // 压缩出错 88 { 89 task.User = &model.User{ 90 Policy: model.Policy{ 91 Type: "mock", 92 }, 93 } 94 task.TaskProps.Dirs = []uint{1} 95 // 更新进度 96 mock.ExpectBegin() 97 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 98 1)) 99 mock.ExpectCommit() 100 // 查找目录 101 mock.ExpectQuery("SELECT(.+)").WillReturnError(errors.New("error")) 102 // 更新错误 103 mock.ExpectBegin() 104 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 105 1)) 106 mock.ExpectCommit() 107 task.Do() 108 asserts.NoError(mock.ExpectationsWereMet()) 109 asserts.NotEmpty(task.GetError().Msg) 110 } 111 112 // 上传出错 113 { 114 task.User = &model.User{ 115 Policy: model.Policy{ 116 Type: "mock", 117 MaxSize: 1, 118 }, 119 } 120 task.TaskProps.Dirs = []uint{1} 121 cache.Set("setting_temp_path", "test", 0) 122 // 更新进度 123 mock.ExpectBegin() 124 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 125 1)) 126 mock.ExpectCommit() 127 // 查找目录 128 mock.ExpectQuery("SELECT(.+)folders"). 129 WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 130 // 查找文件 131 mock.ExpectQuery("SELECT(.+)files"). 132 WillReturnRows(sqlmock.NewRows([]string{"id"})) 133 // 查找子文件 134 mock.ExpectQuery("SELECT(.+)files"). 135 WillReturnRows(sqlmock.NewRows([]string{"id"})) 136 // 查找子目录 137 mock.ExpectQuery("SELECT(.+)folders"). 138 WillReturnRows(sqlmock.NewRows([]string{"id"})) 139 // 更新错误 140 mock.ExpectBegin() 141 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 142 1)) 143 mock.ExpectCommit() 144 task.Do() 145 asserts.NoError(mock.ExpectationsWereMet()) 146 asserts.NotEmpty(task.GetError().Msg) 147 asserts.True(util.IsEmpty(util.RelativePath("test/compress"))) 148 } 149 } 150 151 func TestNewCompressTask(t *testing.T) { 152 asserts := assert.New(t) 153 154 // 成功 155 { 156 mock.ExpectBegin() 157 mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 158 mock.ExpectCommit() 159 job, err := NewCompressTask(&model.User{}, "/", []uint{12}, []uint{}) 160 asserts.NoError(mock.ExpectationsWereMet()) 161 asserts.NotNil(job) 162 asserts.NoError(err) 163 } 164 165 // 失败 166 { 167 mock.ExpectBegin() 168 mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) 169 mock.ExpectRollback() 170 job, err := NewCompressTask(&model.User{}, "/", []uint{12}, []uint{}) 171 asserts.NoError(mock.ExpectationsWereMet()) 172 asserts.Nil(job) 173 asserts.Error(err) 174 } 175 } 176 177 func TestNewCompressTaskFromModel(t *testing.T) { 178 asserts := assert.New(t) 179 180 // 成功 181 { 182 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 183 job, err := NewCompressTaskFromModel(&model.Task{Props: "{}"}) 184 asserts.NoError(mock.ExpectationsWereMet()) 185 asserts.NoError(err) 186 asserts.NotNil(job) 187 } 188 189 // JSON解析失败 190 { 191 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 192 job, err := NewCompressTaskFromModel(&model.Task{Props: ""}) 193 asserts.NoError(mock.ExpectationsWereMet()) 194 asserts.Error(err) 195 asserts.Nil(job) 196 } 197 }