github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/task/decompress_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 TestDecompressTask_Props(t *testing.T) { 14 asserts := assert.New(t) 15 task := &DecompressTask{ 16 User: &model.User{}, 17 } 18 asserts.NotEmpty(task.Props()) 19 asserts.Equal(DecompressTaskType, task.Type()) 20 asserts.EqualValues(0, task.Creator()) 21 asserts.Nil(task.Model()) 22 } 23 24 func TestDecompressTask_SetStatus(t *testing.T) { 25 asserts := assert.New(t) 26 task := &DecompressTask{ 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 TestDecompressTask_SetError(t *testing.T) { 40 asserts := assert.New(t) 41 task := &DecompressTask{ 42 User: &model.User{}, 43 TaskModel: &model.Task{ 44 Model: gorm.Model{ID: 1}, 45 }, 46 zipPath: "test/TestCompressTask_SetError", 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 TestDecompressTask_Do(t *testing.T) { 58 asserts := assert.New(t) 59 task := &DecompressTask{ 60 TaskModel: &model.Task{ 61 Model: gorm.Model{ID: 1}, 62 }, 63 } 64 65 // 无法创建文件系统 66 { 67 task.User = &model.User{ 68 Policy: model.Policy{ 69 Type: "unknown", 70 }, 71 } 72 mock.ExpectBegin() 73 mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 74 1)) 75 mock.ExpectCommit() 76 task.Do() 77 asserts.NoError(mock.ExpectationsWereMet()) 78 asserts.NotEmpty(task.GetError().Msg) 79 } 80 81 // 压缩文件不存在 82 { 83 task.User = &model.User{ 84 Policy: model.Policy{ 85 Type: "mock", 86 }, 87 } 88 task.TaskProps.Src = "test" 89 task.Do() 90 asserts.NotEmpty(task.GetError().Msg) 91 } 92 } 93 94 func TestNewDecompressTask(t *testing.T) { 95 asserts := assert.New(t) 96 97 // 成功 98 { 99 mock.ExpectBegin() 100 mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 101 mock.ExpectCommit() 102 job, err := NewDecompressTask(&model.User{}, "/", "/", "utf-8") 103 asserts.NoError(mock.ExpectationsWereMet()) 104 asserts.NotNil(job) 105 asserts.NoError(err) 106 } 107 108 // 失败 109 { 110 mock.ExpectBegin() 111 mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) 112 mock.ExpectRollback() 113 job, err := NewDecompressTask(&model.User{}, "/", "/", "utf-8") 114 asserts.NoError(mock.ExpectationsWereMet()) 115 asserts.Nil(job) 116 asserts.Error(err) 117 } 118 } 119 120 func TestNewDecompressTaskFromModel(t *testing.T) { 121 asserts := assert.New(t) 122 123 // 成功 124 { 125 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 126 job, err := NewDecompressTaskFromModel(&model.Task{Props: "{}"}) 127 asserts.NoError(mock.ExpectationsWereMet()) 128 asserts.NoError(err) 129 asserts.NotNil(job) 130 } 131 132 // JSON解析失败 133 { 134 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 135 job, err := NewDecompressTaskFromModel(&model.Task{Props: ""}) 136 asserts.NoError(mock.ExpectationsWereMet()) 137 asserts.Error(err) 138 asserts.Nil(job) 139 } 140 }