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  }