userDetailLogic_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package user
  2. import (
  3. "database/sql"
  4. "errors"
  5. "testing"
  6. "time"
  7. userModel "perms-system-server/internal/model/user"
  8. "perms-system-server/internal/model/userrole"
  9. "perms-system-server/internal/response"
  10. "perms-system-server/internal/svc"
  11. "perms-system-server/internal/testutil"
  12. "perms-system-server/internal/testutil/ctxhelper"
  13. "perms-system-server/internal/types"
  14. "github.com/stretchr/testify/assert"
  15. "github.com/stretchr/testify/require"
  16. )
  17. // TC-0154: 正常查询
  18. func TestUserDetail_Success(t *testing.T) {
  19. ctx := ctxhelper.SuperAdminCtx()
  20. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  21. conn := testutil.GetTestSqlConn()
  22. username := testutil.UniqueId()
  23. userId := insertTestUser(t, ctx, username, testutil.HashPassword("pass"))
  24. now := time.Now().Unix()
  25. var roleRecordIds []int64
  26. for _, roleId := range []int64{10, 20} {
  27. res, err := svcCtx.SysUserRoleModel.Insert(ctx, &userrole.SysUserRole{
  28. UserId: userId,
  29. RoleId: roleId,
  30. CreateTime: now,
  31. UpdateTime: now,
  32. })
  33. require.NoError(t, err)
  34. id, _ := res.LastInsertId()
  35. roleRecordIds = append(roleRecordIds, id)
  36. }
  37. t.Cleanup(func() {
  38. testutil.CleanTable(ctx, conn, "`sys_user_role`", roleRecordIds...)
  39. testutil.CleanTable(ctx, conn, "`sys_user`", userId)
  40. })
  41. logic := NewUserDetailLogic(ctx, svcCtx)
  42. resp, err := logic.UserDetail(&types.UserDetailReq{Id: userId})
  43. require.NoError(t, err)
  44. require.NotNil(t, resp)
  45. assert.Equal(t, userId, resp.Id)
  46. assert.Equal(t, username, resp.Username)
  47. assert.ElementsMatch(t, []int64{10, 20}, resp.RoleIds)
  48. }
  49. // TC-0155: 正常查询-含Avatar
  50. func TestUserDetail_WithAvatar(t *testing.T) {
  51. ctx := ctxhelper.SuperAdminCtx()
  52. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  53. conn := testutil.GetTestSqlConn()
  54. userId := insertTestUserFull(t, ctx, &userModel.SysUser{
  55. Username: testutil.UniqueId(),
  56. Password: testutil.HashPassword("pass"),
  57. Nickname: "avatar_user",
  58. Avatar: sql.NullString{String: "https://example.com/avatar.png", Valid: true},
  59. IsSuperAdmin: 2,
  60. MustChangePassword: 2,
  61. Status: 1,
  62. })
  63. t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_user`", userId) })
  64. logic := NewUserDetailLogic(ctx, svcCtx)
  65. resp, err := logic.UserDetail(&types.UserDetailReq{Id: userId})
  66. require.NoError(t, err)
  67. require.NotNil(t, resp)
  68. assert.Equal(t, "https://example.com/avatar.png", resp.Avatar)
  69. }
  70. // TC-0156: 不存在
  71. func TestUserDetail_NotFound(t *testing.T) {
  72. ctx := ctxhelper.SuperAdminCtx()
  73. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  74. logic := NewUserDetailLogic(ctx, svcCtx)
  75. _, err := logic.UserDetail(&types.UserDetailReq{Id: 999999999})
  76. require.Error(t, err)
  77. var codeErr *response.CodeError
  78. require.True(t, errors.As(err, &codeErr))
  79. assert.Equal(t, 404, codeErr.Code())
  80. assert.Equal(t, "用户不存在", codeErr.Error())
  81. }