Files
zeronline 545329ac40
CI / Server (Go) (push) Has been cancelled
CI / Web (Next.js) (push) Has been cancelled
CI / Mobile (React Native) (push) Has been cancelled
CI / Admin (React) (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
修改页面
2026-06-25 16:33:32 +08:00

102 lines
2.5 KiB
Go

package services
import (
"testing"
"github.com/stretchr/testify/suite"
)
type UserServiceTestSuite struct {
ServiceTestSuite
}
func TestUserServiceSuite(t *testing.T) {
suite.Run(t, new(UserServiceTestSuite))
}
func (s *UserServiceTestSuite) TestRegisterByPhone() {
user, err := s.svc.RegisterByPhone("13800138000")
s.Require().NoError(err)
s.NotEmpty(user.ID)
s.Equal("13800138000", *user.Phone)
s.Equal(0, user.Points)
}
func (s *UserServiceTestSuite) TestRegisterByPhone_Duplicate() {
_, err := s.svc.RegisterByPhone("13800138001")
s.Require().NoError(err)
_, err = s.svc.RegisterByPhone("13800138001")
s.Error(err)
s.Contains(err.Error(), "已注册")
}
func (s *UserServiceTestSuite) TestGetByPhone() {
created, err := s.svc.RegisterByPhone("13800138002")
s.Require().NoError(err)
found, err := s.svc.GetByPhone("13800138002")
s.Require().NoError(err)
s.Equal(created.ID, found.ID)
}
func (s *UserServiceTestSuite) TestGetByPhone_NotFound() {
_, err := s.svc.GetByPhone("13800999999")
s.Error(err)
}
func (s *UserServiceTestSuite) TestGetByID() {
created, err := s.svc.RegisterByPhone("13800138003")
s.Require().NoError(err)
found, err := s.svc.GetByID(created.ID)
s.Require().NoError(err)
s.Equal(*created.Phone, *found.Phone)
}
func (s *UserServiceTestSuite) TestUpdateProfile() {
user, err := s.svc.RegisterByPhone("13800138004")
s.Require().NoError(err)
updated, err := s.svc.UpdateProfile(user.ID, map[string]interface{}{
"nickname": "TestUser",
"bio": "Hello",
})
s.Require().NoError(err)
s.Equal("TestUser", *updated.Nickname)
s.Equal("Hello", *updated.Bio)
}
func (s *UserServiceTestSuite) TestUpdateProfile_RejectInvalidFields() {
user, err := s.svc.RegisterByPhone("13800138005")
s.Require().NoError(err)
updated, err := s.svc.UpdateProfile(user.ID, map[string]interface{}{
"points": 9999, // points is not in the allowed list
})
s.Require().NoError(err)
s.Equal(0, updated.Points) // should not have changed
}
func (s *UserServiceTestSuite) TestDeleteAccount() {
user, err := s.svc.RegisterByPhone("13800138006")
s.Require().NoError(err)
err = s.svc.DeleteAccount(user.ID)
s.Require().NoError(err)
// After delete, the user still exists but fields are cleared
deleted, err := s.svc.GetByID(user.ID)
s.Require().NoError(err)
s.Nil(deleted.Phone)
s.Nil(deleted.Nickname)
}
func (s *UserServiceTestSuite) TestHashAndCheckPassword() {
hash, err := HashPassword("my-secret-pwd")
s.Require().NoError(err)
s.NotEmpty(hash)
s.True(CheckPassword(hash, "my-secret-pwd"))
s.False(CheckPassword(hash, "wrong-password"))
}