Refactor employee management

This commit is contained in:
Frudrax Cheng
2026-05-28 10:05:59 +08:00
parent f394d3a8bd
commit d3ee215f61
17 changed files with 5391 additions and 174 deletions
+55 -11
View File
@@ -13,18 +13,59 @@ import (
func TestUsersService_Create_Success(t *testing.T) {
svc := UsersService{}
dto, err := svc.Create(models.CreateUserDTO{
Username: "users_create_ok",
Password: "password123",
Name: "新技术员",
Email: "new@example.com",
Role: "technician",
Password: "password123",
Name: "新技术员",
Email: "new@example.com",
Phone: "13800000001",
EmployeeNo: "users_create_ok",
Position: "技术员",
Role: "technician",
})
assert.NoError(t, err)
assert.NotNil(t, dto)
assert.Equal(t, "users_create_ok", dto.Username)
assert.Equal(t, "technician", dto.Role)
assert.Equal(t, "13800000001", dto.Phone)
assert.Equal(t, "users_create_ok", dto.EmployeeNo)
assert.Len(t, dto.EmployeeSerials, 1)
database.DB.Unscoped().Where("username = ?", "users_create_ok").Delete(&models.User{})
database.DB.Unscoped().Where("employee_name = ?", "新技术员").Delete(&models.EmployeeSerial{})
}
func TestUsersService_Create_EmployeeWithoutPasswordGeneratesSerial(t *testing.T) {
svc := UsersService{}
dto, err := svc.Create(models.CreateUserDTO{
Name: "普通员工",
Phone: "13800000002",
EmployeeNo: "employee_no_pwd",
Position: "生产员工",
Role: "employee",
})
assert.NoError(t, err)
assert.NotNil(t, dto)
assert.Equal(t, "employee", dto.Role)
assert.Len(t, dto.EmployeeSerials, 1)
var user models.User
assert.NoError(t, database.DB.Where("employee_no = ?", "employee_no_pwd").First(&user).Error)
assert.Empty(t, user.Password)
database.DB.Unscoped().Where("employee_id = ?", user.ID).Delete(&models.EmployeeSerial{})
database.DB.Unscoped().Delete(&user)
}
func TestUsersService_Create_BackendRoleRequiresPassword(t *testing.T) {
svc := UsersService{}
_, err := svc.Create(models.CreateUserDTO{
Name: "无密码技术员",
Phone: "13800000003",
EmployeeNo: "tech_no_pwd",
Position: "技术员",
Role: "technician",
})
assert.Error(t, err)
assert.Contains(t, err.Error(), "必须设置")
}
func TestUsersService_Create_DuplicateUsername(t *testing.T) {
@@ -39,10 +80,13 @@ func TestUsersService_Create_DuplicateUsername(t *testing.T) {
svc := UsersService{}
_, err := svc.Create(models.CreateUserDTO{
Username: "users_create_dup",
Password: "password123",
Name: "duplicate",
Role: "technician",
Username: "users_create_dup",
Password: "password123",
Name: "duplicate",
Phone: "13800000004",
EmployeeNo: "users_create_dup_2",
Position: "技术员",
Role: "technician",
})
assert.Error(t, err)
assert.Contains(t, err.Error(), "用户名已存在")
@@ -164,7 +208,7 @@ func TestUsersService_Delete_BlocksLastAdmin(t *testing.T) {
func TestUsersService_FindAssignable_ReturnsAdminAndTechnician(t *testing.T) {
a := models.User{Username: "assignable_admin", Password: "x", Name: "A", Role: "admin"}
tech := models.User{Username: "assignable_tech", Password: "x", Name: "T", Role: "technician"}
plain := models.User{Username: "assignable_user", Password: "x", Name: "U", Role: "user"}
plain := models.User{Username: "assignable_user", Password: "x", Name: "U", Role: "employee"}
database.DB.Create(&a)
database.DB.Create(&tech)
database.DB.Create(&plain)
@@ -189,7 +233,7 @@ func TestUsersService_FindAssignable_ReturnsAdminAndTechnician(t *testing.T) {
func TestUsersService_FindAll_FilterByRole(t *testing.T) {
tech1 := models.User{Username: "findall_tech1", Password: "x", Name: "T1", Role: "technician"}
tech2 := models.User{Username: "findall_tech2", Password: "x", Name: "T2", Role: "technician"}
user1 := models.User{Username: "findall_user1", Password: "x", Name: "U1", Role: "user"}
user1 := models.User{Username: "findall_user1", Password: "x", Name: "U1", Role: "employee"}
database.DB.Create(&tech1)
database.DB.Create(&tech2)
database.DB.Create(&user1)