github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/models/task_test.go (about)

     1  package model
     2  
     3  import (
     4  	"errors"
     5  	"github.com/DATA-DOG/go-sqlmock"
     6  	"github.com/jinzhu/gorm"
     7  	"github.com/stretchr/testify/assert"
     8  	"testing"
     9  )
    10  
    11  func TestTask_Create(t *testing.T) {
    12  	asserts := assert.New(t)
    13  	// 成功
    14  	{
    15  		mock.ExpectBegin()
    16  		mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    17  		mock.ExpectCommit()
    18  		task := Task{Props: "1"}
    19  		id, err := task.Create()
    20  		asserts.NoError(mock.ExpectationsWereMet())
    21  		asserts.NoError(err)
    22  		asserts.EqualValues(1, id)
    23  	}
    24  
    25  	// 失败
    26  	{
    27  		mock.ExpectBegin()
    28  		mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error"))
    29  		mock.ExpectRollback()
    30  		task := Task{Props: "1"}
    31  		id, err := task.Create()
    32  		asserts.NoError(mock.ExpectationsWereMet())
    33  		asserts.Error(err)
    34  		asserts.EqualValues(0, id)
    35  	}
    36  }
    37  
    38  func TestTask_SetError(t *testing.T) {
    39  	asserts := assert.New(t)
    40  	task := Task{
    41  		Model: gorm.Model{ID: 1},
    42  	}
    43  	mock.ExpectBegin()
    44  	mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    45  	mock.ExpectCommit()
    46  	asserts.NoError(task.SetError("error"))
    47  	asserts.NoError(mock.ExpectationsWereMet())
    48  }
    49  
    50  func TestTask_SetStatus(t *testing.T) {
    51  	asserts := assert.New(t)
    52  	task := Task{
    53  		Model: gorm.Model{ID: 1},
    54  	}
    55  	mock.ExpectBegin()
    56  	mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    57  	mock.ExpectCommit()
    58  	asserts.NoError(task.SetStatus(1))
    59  	asserts.NoError(mock.ExpectationsWereMet())
    60  }
    61  
    62  func TestTask_SetProgress(t *testing.T) {
    63  	asserts := assert.New(t)
    64  	task := Task{
    65  		Model: gorm.Model{ID: 1},
    66  	}
    67  	mock.ExpectBegin()
    68  	mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    69  	mock.ExpectCommit()
    70  	asserts.NoError(task.SetProgress(1))
    71  	asserts.NoError(mock.ExpectationsWereMet())
    72  }
    73  
    74  func TestGetTasksByID(t *testing.T) {
    75  	asserts := assert.New(t)
    76  	mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
    77  	res, err := GetTasksByID(1)
    78  	asserts.NoError(mock.ExpectationsWereMet())
    79  	asserts.NoError(err)
    80  	asserts.EqualValues(1, res.ID)
    81  }
    82  
    83  func TestListTasks(t *testing.T) {
    84  	asserts := assert.New(t)
    85  
    86  	mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(5))
    87  	mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(5))
    88  
    89  	res, total := ListTasks(1, 1, 10, "")
    90  	asserts.NoError(mock.ExpectationsWereMet())
    91  	asserts.EqualValues(5, total)
    92  	asserts.Len(res, 1)
    93  }
    94  
    95  func TestGetTasksByStatus(t *testing.T) {
    96  	a := assert.New(t)
    97  
    98  	mock.ExpectQuery("SELECT(.+)").
    99  		WithArgs(1, 2).
   100  		WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
   101  	res := GetTasksByStatus(1, 2)
   102  	a.NoError(mock.ExpectationsWereMet())
   103  	a.Len(res, 1)
   104  }