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 }