github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/models/download_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 TestDownload_Create(t *testing.T) {
    12  	asserts := assert.New(t)
    13  
    14  	// 成功
    15  	{
    16  		mock.ExpectBegin()
    17  		mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    18  		mock.ExpectCommit()
    19  		download := Download{GID: "1"}
    20  		id, err := download.Create()
    21  		asserts.NoError(mock.ExpectationsWereMet())
    22  		asserts.NoError(err)
    23  		asserts.EqualValues(1, id)
    24  	}
    25  
    26  	// 失败
    27  	{
    28  		mock.ExpectBegin()
    29  		mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error"))
    30  		mock.ExpectRollback()
    31  		download := Download{GID: "1"}
    32  		id, err := download.Create()
    33  		asserts.NoError(mock.ExpectationsWereMet())
    34  		asserts.Error(err)
    35  		asserts.EqualValues(0, id)
    36  	}
    37  }
    38  
    39  func TestDownload_AfterFind(t *testing.T) {
    40  	asserts := assert.New(t)
    41  
    42  	// 成功
    43  	{
    44  		download := Download{Attrs: `{"gid":"123"}`}
    45  		err := download.AfterFind()
    46  		asserts.NoError(err)
    47  		asserts.Equal("123", download.StatusInfo.Gid)
    48  	}
    49  
    50  	// 忽略空值
    51  	{
    52  		download := Download{Attrs: ``}
    53  		err := download.AfterFind()
    54  		asserts.NoError(err)
    55  		asserts.Equal("", download.StatusInfo.Gid)
    56  	}
    57  
    58  	// 解析失败
    59  	{
    60  		download := Download{Attrs: `?`}
    61  		err := download.BeforeSave()
    62  		asserts.Error(err)
    63  		asserts.Equal("", download.StatusInfo.Gid)
    64  	}
    65  
    66  }
    67  
    68  func TestDownload_Save(t *testing.T) {
    69  	asserts := assert.New(t)
    70  
    71  	// 成功
    72  	{
    73  		mock.ExpectBegin()
    74  		mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
    75  		mock.ExpectCommit()
    76  		download := Download{
    77  			Model: gorm.Model{
    78  				ID: 1,
    79  			},
    80  			Attrs: `{"gid":"123"}`,
    81  		}
    82  		err := download.Save()
    83  		asserts.NoError(mock.ExpectationsWereMet())
    84  		asserts.NoError(err)
    85  		asserts.Equal("123", download.StatusInfo.Gid)
    86  	}
    87  
    88  	// 失败
    89  	{
    90  		mock.ExpectBegin()
    91  		mock.ExpectExec("UPDATE(.+)").WillReturnError(errors.New("error"))
    92  		mock.ExpectRollback()
    93  		download := Download{
    94  			Model: gorm.Model{
    95  				ID: 1,
    96  			},
    97  		}
    98  		err := download.Save()
    99  		asserts.NoError(mock.ExpectationsWereMet())
   100  		asserts.Error(err)
   101  	}
   102  }
   103  
   104  func TestGetDownloadsByStatus(t *testing.T) {
   105  	asserts := assert.New(t)
   106  
   107  	mock.ExpectQuery("SELECT(.+)").WithArgs(0, 1).WillReturnRows(sqlmock.NewRows([]string{"gid"}).AddRow("0").AddRow("1"))
   108  	res := GetDownloadsByStatus(0, 1)
   109  	asserts.NoError(mock.ExpectationsWereMet())
   110  	asserts.Len(res, 2)
   111  }
   112  
   113  func TestGetDownloadByGid(t *testing.T) {
   114  	asserts := assert.New(t)
   115  
   116  	mock.ExpectQuery("SELECT(.+)").WithArgs(2, "gid").WillReturnRows(sqlmock.NewRows([]string{"g_id"}).AddRow("1"))
   117  	res, err := GetDownloadByGid("gid", 2)
   118  	asserts.NoError(mock.ExpectationsWereMet())
   119  	asserts.NoError(err)
   120  	asserts.Equal(res.GID, "1")
   121  }
   122  
   123  func TestDownload_GetOwner(t *testing.T) {
   124  	asserts := assert.New(t)
   125  
   126  	// 已经有User对象
   127  	{
   128  		download := &Download{User: &User{Nick: "nick"}}
   129  		user := download.GetOwner()
   130  		asserts.NotNil(user)
   131  		asserts.Equal("nick", user.Nick)
   132  	}
   133  
   134  	// 无User对象
   135  	{
   136  		download := &Download{UserID: 3}
   137  		mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"nick"}).AddRow("nick"))
   138  		user := download.GetOwner()
   139  		asserts.NoError(mock.ExpectationsWereMet())
   140  		asserts.NotNil(user)
   141  		asserts.Equal("nick", user.Nick)
   142  	}
   143  }
   144  
   145  func TestGetDownloadsByStatusAndUser(t *testing.T) {
   146  	asserts := assert.New(t)
   147  
   148  	// 列出全部
   149  	{
   150  		mock.ExpectQuery("SELECT(.+)").WithArgs(1, 1, 2).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2).AddRow(3))
   151  		res := GetDownloadsByStatusAndUser(0, 1, 1, 2)
   152  		asserts.NoError(mock.ExpectationsWereMet())
   153  		asserts.Len(res, 2)
   154  	}
   155  
   156  	// 列出全部,分页
   157  	{
   158  		mock.ExpectQuery("SELECT(.+)DESC(.+)").WithArgs(1, 1, 2).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2).AddRow(3))
   159  		res := GetDownloadsByStatusAndUser(2, 1, 1, 2)
   160  		asserts.NoError(mock.ExpectationsWereMet())
   161  		asserts.Len(res, 2)
   162  	}
   163  }
   164  
   165  func TestDownload_Delete(t *testing.T) {
   166  	asserts := assert.New(t)
   167  	share := Download{}
   168  
   169  	{
   170  		mock.ExpectBegin()
   171  		mock.ExpectExec("UPDATE(.+)").
   172  			WillReturnResult(sqlmock.NewResult(1, 1))
   173  		mock.ExpectCommit()
   174  		err := share.Delete()
   175  		asserts.NoError(mock.ExpectationsWereMet())
   176  		asserts.NoError(err)
   177  	}
   178  
   179  }
   180  
   181  func TestDownload_GetNodeID(t *testing.T) {
   182  	a := assert.New(t)
   183  	record := Download{}
   184  
   185  	// compatible with 3.4
   186  	a.EqualValues(1, record.GetNodeID())
   187  
   188  	record.NodeID = 5
   189  	a.EqualValues(5, record.GetNodeID())
   190  }