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  }