package user import ( "database/sql" "errors" "testing" "time" userModel "perms-system-server/internal/model/user" "perms-system-server/internal/model/userrole" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/testutil" "perms-system-server/internal/testutil/ctxhelper" "perms-system-server/internal/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TC-0181: 正常查询 func TestUserDetail_Success(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() username := testutil.UniqueId() userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass")) now := time.Now().Unix() var roleRecordIds []int64 for _, roleId := range []int64{10, 20} { res, err := svcCtx.SysUserRoleModel.Insert(ctx, &userrole.SysUserRole{ UserId: userId, RoleId: roleId, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) id, _ := res.LastInsertId() roleRecordIds = append(roleRecordIds, id) } t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user_role`", roleRecordIds...) testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewUserDetailLogic(ctx, svcCtx) resp, err := logic.UserDetail(&types.UserDetailReq{Id: userId}) require.NoError(t, err) require.NotNil(t, resp) assert.Equal(t, userId, resp.Id) assert.Equal(t, username, resp.Username) assert.ElementsMatch(t, []int64{10, 20}, resp.RoleIds) } // TC-0182: 正常查询-含Avatar func TestUserDetail_WithAvatar(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() userId := insertTestUserFull(t, ctx, &userModel.SysUser{ Username: testutil.UniqueId(), Password: testutil.HashPassword("pass"), Nickname: "avatar_user", Avatar: sql.NullString{String: "https://example.com/avatar.png", Valid: true}, IsSuperAdmin: 2, MustChangePassword: 2, Status: 1, }) t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewUserDetailLogic(ctx, svcCtx) resp, err := logic.UserDetail(&types.UserDetailReq{Id: userId}) require.NoError(t, err) require.NotNil(t, resp) assert.Equal(t, "https://example.com/avatar.png", resp.Avatar) } // TC-0183: 不存在 func TestUserDetail_NotFound(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) logic := NewUserDetailLogic(ctx, svcCtx) _, err := logic.UserDetail(&types.UserDetailReq{Id: 999999999}) require.Error(t, err) var codeErr *response.CodeError require.True(t, errors.As(err, &codeErr)) assert.Equal(t, 404, codeErr.Code()) assert.Equal(t, "用户不存在", codeErr.Error()) }