package model import ( "cloudreve/pkg/serializer" "encoding/json" "github.com/DATA-DOG/go-sqlmock" "github.com/jinzhu/gorm" "github.com/pkg/errors" "github.com/stretchr/testify/assert" "testing" ) func TestGetUserByID(t *testing.T) { asserts := assert.New(t) //找到用户时 rows := sqlmock.NewRows([]string{"id", "deleted_at", "email"}). AddRow(1, nil, "admin@cloudreve.org") mock.ExpectQuery("^SELECT (.+)").WillReturnRows(rows) user, err := GetUserByID(1) asserts.NoError(err) asserts.Equal(User{ Model: gorm.Model{ ID: 1, DeletedAt: nil, }, Email: "admin@cloudreve.org", }, user) //未找到用户时 mock.ExpectQuery("^SELECT (.+)").WillReturnError(errors.New("not found")) user, err = GetUserByID(1) asserts.Error(err) asserts.Equal(User{}, user) } func TestUser_SetPassword(t *testing.T) { asserts := assert.New(t) user := User{} err := user.SetPassword("Cause Sega does what nintendon't") asserts.NoError(err) asserts.NotEmpty(user.Password) } func TestUser_CheckPassword(t *testing.T) { asserts := assert.New(t) user := User{} err := user.SetPassword("Cause Sega does what nintendon't") asserts.NoError(err) //密码正确 res, err := user.CheckPassword("Cause Sega does what nintendon't") asserts.NoError(err) asserts.True(res) //密码错误 res, err = user.CheckPassword("Cause Sega does what Nintendon't") asserts.NoError(err) asserts.False(res) //密码字段为空 user = User{} res, err = user.CheckPassword("Cause Sega does what nintendon't") asserts.Error(err) asserts.False(res) } func TestNewUser(t *testing.T) { asserts := assert.New(t) newUser := NewUser() asserts.IsType(User{}, newUser) asserts.NotEmpty(newUser.Avatar) asserts.NotEmpty(newUser.Options) } func TestUser_AfterFind(t *testing.T) { asserts := assert.New(t) newUser := NewUser() err := newUser.AfterFind() expected := serializer.UserOption{} err = json.Unmarshal([]byte(newUser.Options), &expected) asserts.NoError(err) asserts.Equal(expected, newUser.OptionsSerialized) }