Feat: basic file validator

This commit is contained in:
HFO4
2019-11-16 16:05:10 +08:00
parent 003274162b
commit 79caf635f9
9 changed files with 178 additions and 6 deletions

View File

@@ -54,6 +54,24 @@ type UserOption struct {
WebDAVKey string `json:"webdav_key"`
}
// DeductionCapacity 扣除用户容量配额
func (user *User) DeductionCapacity(size uint64) bool {
if size <= user.GetRemainingCapacity() {
user.Storage += size
DB.Save(user)
return true
}
return false
}
// GetRemainingCapacity 获取剩余配额
func (user *User) GetRemainingCapacity() uint64 {
if user.Group.MaxStorage <= user.Storage {
return 0
}
return user.Group.MaxStorage - user.Storage
}
// GetPolicyID 获取用户当前的上传策略ID
func (user *User) GetPolicyID() uint {
// 用户未指定时,返回可用的第一个

View File

@@ -164,3 +164,55 @@ func TestUser_GetPolicyID(t *testing.T) {
asserts.Equal(testCase.expected, newUser.GetPolicyID(), "测试用例 #%d 未通过", key)
}
}
func TestUser_GetRemainingCapacity(t *testing.T) {
asserts := assert.New(t)
newUser := NewUser()
newUser.Group.MaxStorage = 100
asserts.Equal(uint64(100), newUser.GetRemainingCapacity())
newUser.Group.MaxStorage = 100
newUser.Storage = 1
asserts.Equal(uint64(99), newUser.GetRemainingCapacity())
newUser.Group.MaxStorage = 100
newUser.Storage = 100
asserts.Equal(uint64(0), newUser.GetRemainingCapacity())
newUser.Group.MaxStorage = 100
newUser.Storage = 200
asserts.Equal(uint64(0), newUser.GetRemainingCapacity())
}
func TestUser_DeductionCapacity(t *testing.T) {
asserts := assert.New(t)
userRows := sqlmock.NewRows([]string{"id", "deleted_at", "storage", "options", "group_id"}).
AddRow(1, nil, 0, "{}", 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)
newUser, err := GetUserByID(1)
newUser.Group.MaxStorage = 100
asserts.NoError(err)
asserts.NoError(mock.ExpectationsWereMet())
asserts.Equal(false, newUser.DeductionCapacity(101))
asserts.Equal(uint64(0), newUser.Storage)
asserts.Equal(true, newUser.DeductionCapacity(1))
asserts.Equal(uint64(1), newUser.Storage)
asserts.Equal(true, newUser.DeductionCapacity(99))
asserts.Equal(uint64(100), newUser.Storage)
asserts.Equal(false, newUser.DeductionCapacity(1))
asserts.Equal(uint64(100), newUser.Storage)
}