package user import ( "errors" "testing" "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-0133: 正常绑定 func TestBindRoles_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")) t.Cleanup(func() { testutil.CleanTableByField(ctx, conn, "`sys_user_role`", "userId", userId) testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewBindRolesLogic(ctx, svcCtx) err := logic.BindRoles(&types.BindRolesReq{ UserId: userId, RoleIds: []int64{10, 20, 30}, }) require.NoError(t, err) roleIds, err := svcCtx.SysUserRoleModel.FindRoleIdsByUserId(ctx, userId) require.NoError(t, err) assert.ElementsMatch(t, []int64{10, 20, 30}, roleIds) } // TC-0134: 用户不存在 func TestBindRoles_UserNotFound(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) logic := NewBindRolesLogic(ctx, svcCtx) err := logic.BindRoles(&types.BindRolesReq{ UserId: 999999999, RoleIds: []int64{1}, }) 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()) } // TC-0135: 清空角色 func TestBindRoles_EmptyRoleIds_ClearsAll(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")) t.Cleanup(func() { testutil.CleanTableByField(ctx, conn, "`sys_user_role`", "userId", userId) testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewBindRolesLogic(ctx, svcCtx) err := logic.BindRoles(&types.BindRolesReq{ UserId: userId, RoleIds: []int64{10, 20}, }) require.NoError(t, err) err = logic.BindRoles(&types.BindRolesReq{ UserId: userId, RoleIds: []int64{}, }) require.NoError(t, err) roleIds, err := svcCtx.SysUserRoleModel.FindRoleIdsByUserId(ctx, userId) require.NoError(t, err) assert.Empty(t, roleIds) } // TC-0133: 正常绑定 func TestBindRoles_Rebind(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")) t.Cleanup(func() { testutil.CleanTableByField(ctx, conn, "`sys_user_role`", "userId", userId) testutil.CleanTable(ctx, conn, "`sys_user`", userId) }) logic := NewBindRolesLogic(ctx, svcCtx) err := logic.BindRoles(&types.BindRolesReq{ UserId: userId, RoleIds: []int64{10, 20}, }) require.NoError(t, err) err = logic.BindRoles(&types.BindRolesReq{ UserId: userId, RoleIds: []int64{30, 40}, }) require.NoError(t, err) roleIds, err := svcCtx.SysUserRoleModel.FindRoleIdsByUserId(ctx, userId) require.NoError(t, err) assert.ElementsMatch(t, []int64{30, 40}, roleIds) }