package role import ( "errors" "testing" "time" permModel "perms-system-server/internal/model/perm" roleModel "perms-system-server/internal/model/role" "perms-system-server/internal/model/roleperm" "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-0093: 正常删除+级联 func TestDeleteRole_WithCascading(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() now := time.Now().Unix() pc := testutil.UniqueId() roleRes, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{ ProductCode: pc, Name: testutil.UniqueId(), Status: 1, PermsLevel: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) roleId, _ := roleRes.LastInsertId() pRes, err := svcCtx.SysPermModel.Insert(ctx, &permModel.SysPerm{ ProductCode: pc, Name: testutil.UniqueId(), Code: testutil.UniqueId(), Status: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) permId, _ := pRes.LastInsertId() rpRes, err := svcCtx.SysRolePermModel.Insert(ctx, &roleperm.SysRolePerm{ RoleId: roleId, PermId: permId, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) rpId, _ := rpRes.LastInsertId() urRes, err := svcCtx.SysUserRoleModel.Insert(ctx, &userrole.SysUserRole{ UserId: 888888, RoleId: roleId, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) urId, _ := urRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_role_perm`", rpId) testutil.CleanTable(ctx, conn, "`sys_user_role`", urId) testutil.CleanTable(ctx, conn, "`sys_role`", roleId) testutil.CleanTable(ctx, conn, "`sys_perm`", permId) }) logic := NewDeleteRoleLogic(ctx, svcCtx) err = logic.DeleteRole(&types.DeleteRoleReq{Id: roleId}) require.NoError(t, err) _, err = svcCtx.SysRoleModel.FindOne(ctx, roleId) assert.Error(t, err) permIds, err := svcCtx.SysRolePermModel.FindPermIdsByRoleId(ctx, roleId) require.NoError(t, err) assert.Empty(t, permIds) roleIds, err := svcCtx.SysUserRoleModel.FindRoleIdsByUserId(ctx, 888888) require.NoError(t, err) assert.NotContains(t, roleIds, roleId) } // TC-0095: 无关联数据 func TestDeleteRole_NoAssociations(t *testing.T) { ctx := ctxhelper.SuperAdminCtx() svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) conn := testutil.GetTestSqlConn() now := time.Now().Unix() pc := testutil.UniqueId() roleRes, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{ ProductCode: pc, Name: testutil.UniqueId(), Status: 1, PermsLevel: 1, CreateTime: now, UpdateTime: now, }) require.NoError(t, err) roleId, _ := roleRes.LastInsertId() t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_role`", roleId) }) logic := NewDeleteRoleLogic(ctx, svcCtx) err = logic.DeleteRole(&types.DeleteRoleReq{Id: roleId}) require.NoError(t, err) _, err = svcCtx.SysRoleModel.FindOne(ctx, roleId) assert.Error(t, err) } // TC-0489: deleteRole非管理员拒绝 func TestDeleteRole_MemberRejected(t *testing.T) { ctx := ctxhelper.MemberCtx("test_product") svcCtx := svc.NewServiceContext(testutil.GetTestConfig()) logic := NewDeleteRoleLogic(ctx, svcCtx) err := logic.DeleteRole(&types.DeleteRoleReq{Id: 1}) require.Error(t, err) var ce *response.CodeError require.True(t, errors.As(err, &ce)) assert.Equal(t, 403, ce.Code()) }