github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/task/recycle_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 TestRecycleTask_Props(t *testing.T) { 14 asserts := assert.New(t) 15 task := &RecycleTask{ 16 User: &model.User{}, 17 } 18 asserts.NotEmpty(task.Props()) 19 asserts.Equal(RecycleTaskType, task.Type()) 20 asserts.EqualValues(0, task.Creator()) 21 asserts.Nil(task.Model()) 22 } 23 24 func TestRecycleTask_SetStatus(t *testing.T) { 25 asserts := assert.New(t) 26 task := &RecycleTask{ 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 TestRecycleTask_SetError(t *testing.T) { 40 asserts := assert.New(t) 41 task := &RecycleTask{ 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 TestNewRecycleTask(t *testing.T) { 58 asserts := assert.New(t) 59 60 // 成功 61 { 62 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 63 mock.ExpectBegin() 64 mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) 65 mock.ExpectCommit() 66 job, err := NewRecycleTask(&model.Download{ 67 Model: gorm.Model{ID: 1}, 68 GID: "test_g_id", 69 Parent: "/", 70 UserID: 1, 71 NodeID: 1, 72 }) 73 asserts.NoError(mock.ExpectationsWereMet()) 74 asserts.NotNil(job) 75 asserts.NoError(err) 76 } 77 78 // 失败 79 { 80 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 81 mock.ExpectBegin() 82 mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) 83 mock.ExpectRollback() 84 job, err := NewRecycleTask(&model.Download{ 85 Model: gorm.Model{ID: 1}, 86 GID: "test_g_id", 87 Parent: "test/not_exist", 88 UserID: 1, 89 NodeID: 1, 90 }) 91 asserts.NoError(mock.ExpectationsWereMet()) 92 asserts.Nil(job) 93 asserts.Error(err) 94 } 95 } 96 97 func TestNewRecycleTaskFromModel(t *testing.T) { 98 asserts := assert.New(t) 99 100 // 成功 101 { 102 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 103 job, err := NewRecycleTaskFromModel(&model.Task{Props: "{}"}) 104 asserts.NoError(mock.ExpectationsWereMet()) 105 asserts.NoError(err) 106 asserts.NotNil(job) 107 } 108 109 // JSON解析失败 110 { 111 mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1)) 112 job, err := NewRecycleTaskFromModel(&model.Task{Props: "?"}) 113 asserts.NoError(mock.ExpectationsWereMet()) 114 asserts.Error(err) 115 asserts.Nil(job) 116 } 117 }