From 06bcb3d6ebbffb59f40cb535c9ff91e5bcd7df62 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Thu, 5 Dec 2019 17:22:43 +0800 Subject: [PATCH] Test: user.afterCreate --- models/setting.go | 9 +++-- models/setting_test.go | 9 +++++ models/user_test.go | 87 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/models/setting.go b/models/setting.go index 0eb809b..1e6f783 100644 --- a/models/setting.go +++ b/models/setting.go @@ -1,6 +1,7 @@ package model import ( + "github.com/HFO4/cloudreve/pkg/cache" "github.com/jinzhu/gorm" ) @@ -30,19 +31,21 @@ func GetSettingByName(name string) string { var setting Setting // 优先从缓存中查找 - if optionValue, ok := settingCache[name]; ok { - return optionValue + cacheKey := "setting_" + name + if optionValue, ok := cache.Store.Get(cacheKey); ok { + return optionValue.(string) } // 尝试数据库中查找 result := DB.Where("name = ?", name).First(&setting) if result.Error == nil { - settingCache[setting.Name] = setting.Value + _ = cache.Store.Set(cacheKey, setting.Value) return setting.Value } return "" } // GetSettingByNames 用多个 Name 获取设置值 +// TODO 其他设置获取也使用缓存 func GetSettingByNames(names []string) map[string]string { var queryRes []Setting res := make(map[string]string) diff --git a/models/setting_test.go b/models/setting_test.go index c1f0854..ae3fd8a 100644 --- a/models/setting_test.go +++ b/models/setting_test.go @@ -116,3 +116,12 @@ func TestGetSettingByName(t *testing.T) { asserts.NoError(mock.ExpectationsWereMet()) } + +func TestIsTrueVal(t *testing.T) { + asserts := assert.New(t) + + asserts.True(IsTrueVal("1")) + asserts.True(IsTrueVal("true")) + asserts.False(IsTrueVal("0")) + asserts.False(IsTrueVal("false")) +} diff --git a/models/user_test.go b/models/user_test.go index e15a57a..3b17663 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -218,4 +218,91 @@ func TestUser_DeductionCapacity(t *testing.T) { asserts.Equal(false, newUser.IncreaseStorage(1)) asserts.Equal(uint64(100), newUser.Storage) + + asserts.True(newUser.IncreaseStorage(0)) +} + +func TestUser_DeductionStorage(t *testing.T) { + asserts := assert.New(t) + + // 减少零 + { + user := User{Storage: 1} + asserts.True(user.DeductionStorage(0)) + asserts.Equal(uint64(1), user.Storage) + } + // 正常 + { + user := User{ + Model: gorm.Model{ID: 1}, + Storage: 10, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WithArgs(5, 1).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + + asserts.True(user.DeductionStorage(5)) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Equal(uint64(5), user.Storage) + } + + // 减少的超出可用的 + { + user := User{ + Model: gorm.Model{ID: 1}, + Storage: 10, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WithArgs(0, 1).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + + asserts.False(user.DeductionStorage(20)) + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Equal(uint64(0), user.Storage) + } +} + +func TestUser_IncreaseStorageWithoutCheck(t *testing.T) { + asserts := assert.New(t) + + // 增加零 + { + user := User{} + user.IncreaseStorageWithoutCheck(0) + asserts.Equal(uint64(0), user.Storage) + } + + // 减少零 + { + user := User{ + Model: gorm.Model{ID: 1}, + } + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)").WithArgs(10, 1).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + + user.IncreaseStorageWithoutCheck(10) + asserts.Equal(uint64(10), user.Storage) + } +} + +func TestGetUserByEmail(t *testing.T) { + asserts := assert.New(t) + + mock.ExpectQuery("SELECT(.+)").WithArgs("abslant@foxmail.com").WillReturnRows(sqlmock.NewRows([]string{"id", "email"})) + _, err := GetUserByEmail("abslant@foxmail.com") + + asserts.NoError(mock.ExpectationsWereMet()) + asserts.Error(err) +} + +func TestUser_AfterCreate(t *testing.T) { + asserts := assert.New(t) + user := User{Model: gorm.Model{ID: 1}} + mock.ExpectBegin() + mock.ExpectExec("INSERT(.+)").WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + err := user.AfterCreate(DB) + asserts.NoError(err) + asserts.NoError(mock.ExpectationsWereMet()) }