diff --git a/models/download.go b/models/download.go index 4cd1597..72d69b7 100644 --- a/models/download.go +++ b/models/download.go @@ -74,7 +74,7 @@ func GetDownloadsByStatus(status ...int) []Download { // GetDownloadByGid 根据GID和用户ID查找下载 func GetDownloadByGid(gid string, uid uint) (*Download, error) { download := &Download{} - result := DB.Where("user_id = ? and g_id = ?", uid, gid).Find(download) + result := DB.Where("user_id = ? and g_id = ?", uid, gid).First(download) return download, result.Error } diff --git a/models/download_test.go b/models/download_test.go new file mode 100644 index 0000000..f0a43b1 --- /dev/null +++ b/models/download_test.go @@ -0,0 +1,142 @@ +package model + +import ( + "errors" + "github.com/DATA-DOG/go-sqlmock" + "github.com/jinzhu/gorm" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestDownload_Create(t *testing.T) { + asserts := assert.New(t) + + // 成功 + { + mock.ExpectBegin() + mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + download := Download{GID: "1"} + id, err := download.Create() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + asserts.EqualValues(1, id) + } + + // 失败 + { + mock.ExpectBegin() + mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) + mock.ExpectRollback() + download := Download{GID: "1"} + id, err := download.Create() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + asserts.EqualValues(0, id) + } +} + +func TestDownload_AfterFind(t *testing.T) { + asserts := assert.New(t) + + // 成功 + { + download := Download{Attrs: `{"gid":"123"}`} + err := download.AfterFind() + asserts.NoError(err) + asserts.Equal("123", download.StatusInfo.Gid) + } + + // 忽略空值 + { + download := Download{Attrs: ``} + err := download.AfterFind() + asserts.NoError(err) + asserts.Equal("", download.StatusInfo.Gid) + } + + // 解析失败 + { + download := Download{Attrs: `?`} + err := download.BeforeSave() + asserts.Error(err) + asserts.Equal("", download.StatusInfo.Gid) + } +} + +func TestDownload_Save(t *testing.T) { + asserts := assert.New(t) + + // 成功 + { + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + download := Download{ + Model: gorm.Model{ + ID: 1, + }, + Attrs: `{"gid":"123"}`, + } + err := download.Save() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + asserts.Equal("123", download.StatusInfo.Gid) + } + + // 失败 + { + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WillReturnError(errors.New("error")) + mock.ExpectRollback() + download := Download{ + Model: gorm.Model{ + ID: 1, + }, + } + err := download.Save() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + } +} + +func TestGetDownloadsByStatus(t *testing.T) { + asserts := assert.New(t) + + mock.ExpectQuery("SELECT(.+)").WithArgs(0, 1).WillReturnRows(sqlmock.NewRows([]string{"gid"}).AddRow("0").AddRow("1")) + res := GetDownloadsByStatus(0, 1) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Len(res, 2) +} + +func TestGetDownloadByGid(t *testing.T) { + asserts := assert.New(t) + + mock.ExpectQuery("SELECT(.+)").WithArgs(2, "gid").WillReturnRows(sqlmock.NewRows([]string{"g_id"}).AddRow("1")) + res, err := GetDownloadByGid("gid", 2) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + asserts.Equal(res.GID, "1") +} + +func TestDownload_GetOwner(t *testing.T) { + asserts := assert.New(t) + + // 已经有User对象 + { + download := &Download{User: &User{Nick: "nick"}} + user := download.GetOwner() + asserts.NotNil(user) + asserts.Equal("nick", user.Nick) + } + + // 无User对象 + { + download := &Download{UserID: 3} + mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"nick"}).AddRow("nick")) + user := download.GetOwner() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NotNil(user) + asserts.Equal("nick", user.Nick) + } +} diff --git a/models/task_test.go b/models/task_test.go new file mode 100644 index 0000000..9978641 --- /dev/null +++ b/models/task_test.go @@ -0,0 +1,72 @@ +package model + +import ( + "errors" + "github.com/DATA-DOG/go-sqlmock" + "github.com/jinzhu/gorm" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestTask_Create(t *testing.T) { + asserts := assert.New(t) + // 成功 + { + mock.ExpectBegin() + mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + task := Task{Props: "1"} + id, err := task.Create() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + asserts.EqualValues(1, id) + } + + // 失败 + { + mock.ExpectBegin() + mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error")) + mock.ExpectRollback() + task := Task{Props: "1"} + id, err := task.Create() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) + asserts.EqualValues(0, id) + } +} + +func TestTask_SetError(t *testing.T) { + asserts := assert.New(t) + task := Task{ + Model: gorm.Model{ID: 1}, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + asserts.NoError(task.SetError("error")) + asserts.NoError(mock.ExpectationsWereMet()) +} + +func TestTask_SetStatus(t *testing.T) { + asserts := assert.New(t) + task := Task{ + Model: gorm.Model{ID: 1}, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + asserts.NoError(task.SetStatus(1)) + asserts.NoError(mock.ExpectationsWereMet()) +} + +func TestTask_SetProgress(t *testing.T) { + asserts := assert.New(t) + task := Task{ + Model: gorm.Model{ID: 1}, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + asserts.NoError(task.SetProgress(1)) + asserts.NoError(mock.ExpectationsWereMet()) +}