Test: share/storage/user model

pull/247/head
HFO4 4 years ago
parent 0253b4e5b6
commit 0502a0f212

@ -143,3 +143,47 @@ func TestBeforeShareDownload(t *testing.T) {
asserts.False(c.IsAborted())
}
}
func TestShareOwner(t *testing.T) {
asserts := assert.New(t)
rec := httptest.NewRecorder()
testFunc := ShareOwner()
// 未登录
{
c, _ := gin.CreateTestContext(rec)
testFunc(c)
asserts.True(c.IsAborted())
c, _ = gin.CreateTestContext(rec)
c.Set("share", &model.Share{})
testFunc(c)
asserts.True(c.IsAborted())
}
// 非用户所创建分享
{
c, _ := gin.CreateTestContext(rec)
testFunc(c)
asserts.True(c.IsAborted())
c, _ = gin.CreateTestContext(rec)
c.Set("share", &model.Share{User: model.User{Model: gorm.Model{ID: 1}}})
c.Set("user", &model.User{})
testFunc(c)
asserts.True(c.IsAborted())
}
// 正常
{
c, _ := gin.CreateTestContext(rec)
testFunc(c)
asserts.True(c.IsAborted())
c, _ = gin.CreateTestContext(rec)
c.Set("share", &model.Share{})
c.Set("user", &model.User{})
testFunc(c)
asserts.False(c.IsAborted())
}
}

@ -67,6 +67,11 @@ func (share *Share) IsAvailable() bool {
return false
}
// 检查创建者状态
if share.Creator().Status != Active {
return false
}
// 检查源对象是否存在
var sourceID uint
if share.IsDir {
@ -81,11 +86,6 @@ func (share *Share) IsAvailable() bool {
return false
}
// 检查创建者状态
if share.Creator().Status != Active {
return false
}
return true
}

@ -114,6 +114,17 @@ func TestShare_IsAvailable(t *testing.T) {
asserts.True(share.IsAvailable())
asserts.NoError(mock.ExpectationsWereMet())
}
// 用户被封禁
{
share := Share{
RemainDownloads: -1,
SourceID: 2,
IsDir: true,
User: User{Status: Baned},
}
asserts.False(share.IsAvailable())
}
}
func TestShare_GetCreator(t *testing.T) {
@ -320,3 +331,64 @@ func TestShare_Viewed(t *testing.T) {
asserts.NoError(mock.ExpectationsWereMet())
asserts.EqualValues(1, share.Views)
}
func TestShare_UpdateAndDelete(t *testing.T) {
asserts := assert.New(t)
share := Share{}
{
mock.ExpectBegin()
mock.ExpectExec("UPDATE(.+)").
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
err := share.Update(map[string]interface{}{"id": 1})
asserts.NoError(mock.ExpectationsWereMet())
asserts.NoError(err)
}
{
mock.ExpectBegin()
mock.ExpectExec("UPDATE(.+)").
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
err := share.Delete()
asserts.NoError(mock.ExpectationsWereMet())
asserts.NoError(err)
}
{
mock.ExpectBegin()
mock.ExpectExec("UPDATE(.+)").
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
err := DeleteShareBySourceIDs([]uint{1}, true)
asserts.NoError(mock.ExpectationsWereMet())
asserts.NoError(err)
}
}
func TestListShares(t *testing.T) {
asserts := assert.New(t)
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2).AddRow(2))
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1).AddRow(2))
res, total := ListShares(1, 1, 10, "desc", true)
asserts.NoError(mock.ExpectationsWereMet())
asserts.Len(res, 2)
asserts.Equal(2, total)
}
func TestSearchShares(t *testing.T) {
asserts := assert.New(t)
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
mock.ExpectQuery("SELECT(.+)").
WithArgs("", sqlmock.AnyArg(), "%1%2%").
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
res, total := SearchShares(1, 10, "id", "1 2")
asserts.NoError(mock.ExpectationsWereMet())
asserts.Len(res, 1)
asserts.Equal(1, total)
}

@ -1,6 +1,7 @@
package model
import (
"errors"
"github.com/DATA-DOG/go-sqlmock"
"github.com/jinzhu/gorm"
"github.com/stretchr/testify/assert"
@ -37,3 +38,49 @@ func TestUser_GetAvailablePackSize(t *testing.T) {
}
}
func TestStoragePack_Create(t *testing.T) {
asserts := assert.New(t)
pack := &StoragePack{}
// 成功
{
mock.ExpectBegin()
mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
id, err := pack.Create()
asserts.NoError(mock.ExpectationsWereMet())
asserts.Equal(uint(1), id)
asserts.NoError(err)
}
// 失败
{
mock.ExpectBegin()
mock.ExpectExec("INSERT(.+)").WillReturnError(errors.New("error"))
mock.ExpectRollback()
id, err := pack.Create()
asserts.NoError(mock.ExpectationsWereMet())
asserts.Equal(uint(0), id)
asserts.Error(err)
}
}
func TestGetExpiredStoragePack(t *testing.T) {
asserts := assert.New(t)
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}))
res := GetExpiredStoragePack()
asserts.NoError(mock.ExpectationsWereMet())
asserts.Len(res, 0)
}
func TestStoragePack_Delete(t *testing.T) {
asserts := assert.New(t)
pack := &StoragePack{}
mock.ExpectBegin()
mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
asserts.NoError(pack.Delete())
asserts.NoError(mock.ExpectationsWereMet())
}

@ -62,6 +62,58 @@ func TestGetUserByID(t *testing.T) {
asserts.Equal(User{}, user)
}
func TestGetActiveUserByID(t *testing.T) {
asserts := assert.New(t)
cache.Deletes([]string{"1"}, "policy_")
//找到用户时
userRows := sqlmock.NewRows([]string{"id", "deleted_at", "email", "options", "group_id"}).
AddRow(1, nil, "admin@cloudreve.org", "{}", 1)
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(userRows)
groupRows := sqlmock.NewRows([]string{"id", "name", "policies"}).
AddRow(1, "管理员", "[1]")
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(groupRows)
policyRows := sqlmock.NewRows([]string{"id", "name"}).
AddRow(1, "默认存储策略")
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(policyRows)
user, err := GetActiveUserByID(1)
asserts.NoError(err)
asserts.Equal(User{
Model: gorm.Model{
ID: 1,
DeletedAt: nil,
},
Email: "admin@cloudreve.org",
Options: "{}",
GroupID: 1,
Group: Group{
Model: gorm.Model{
ID: 1,
},
Name: "管理员",
Policies: "[1]",
PolicyList: []uint{1},
},
Policy: Policy{
Model: gorm.Model{
ID: 1,
},
OptionsSerialized: PolicyOption{
FileType: []string{},
},
Name: "默认存储策略",
},
}, user)
//未找到用户时
mock.ExpectQuery("^SELECT (.+)").WillReturnError(errors.New("not found"))
user, err = GetActiveUserByID(1)
asserts.Error(err)
asserts.Equal(User{}, user)
}
func TestUser_SetPassword(t *testing.T) {
asserts := assert.New(t)
user := User{}
@ -387,3 +439,14 @@ func TestUser_IsAnonymous(t *testing.T) {
user.ID = 1
asserts.False(user.IsAnonymous())
}
func TestUser_SetStatus(t *testing.T) {
asserts := assert.New(t)
user := User{}
mock.ExpectBegin()
mock.ExpectExec("UPDATE(.+)").WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
user.SetStatus(Baned)
asserts.NoError(mock.ExpectationsWereMet())
asserts.Equal(Baned, user.Status)
}

@ -0,0 +1,15 @@
package model
import (
"github.com/DATA-DOG/go-sqlmock"
"github.com/stretchr/testify/assert"
"testing"
)
func TestGetWebdavByPassword(t *testing.T) {
asserts := assert.New(t)
mock.ExpectQuery("SELECT(.+)").WillReturnRows(sqlmock.NewRows([]string{"id"}))
_, err := GetWebdavByPassword("e", 1)
asserts.NoError(mock.ExpectationsWereMet())
asserts.Error(err)
}
Loading…
Cancel
Save