| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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())
- }
|