| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package role
- import (
- "errors"
- "sync"
- "testing"
- "time"
- roleModel "perms-system-server/internal/model/role"
- "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-0117: 正常创建
- func TestCreateRole_Normal(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- pc := testutil.UniqueId()
- logic := NewCreateRoleLogic(ctx, svcCtx)
- resp, err := logic.CreateRole(&types.CreateRoleReq{
- ProductCode: pc,
- Name: testutil.UniqueId(),
- Remark: "test role",
- PermsLevel: 1,
- })
- require.NoError(t, err)
- assert.Greater(t, resp.Id, int64(0))
- t.Cleanup(func() {
- testutil.CleanTable(ctx, conn, "`sys_role`", resp.Id)
- })
- role, err := svcCtx.SysRoleModel.FindOne(ctx, resp.Id)
- require.NoError(t, err)
- assert.Equal(t, pc, role.ProductCode)
- assert.Equal(t, int64(1), role.Status)
- assert.Equal(t, int64(1), role.PermsLevel)
- }
- // TC-0118: 重复角色名
- func TestCreateRole_DuplicateName(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- pc := testutil.UniqueId()
- name := testutil.UniqueId()
- now := time.Now().Unix()
- res, err := svcCtx.SysRoleModel.Insert(ctx, &roleModel.SysRole{
- ProductCode: pc, Name: name, Status: 1, PermsLevel: 1,
- CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- existingId, _ := res.LastInsertId()
- t.Cleanup(func() {
- testutil.CleanTable(ctx, conn, "`sys_role`", existingId)
- })
- logic := NewCreateRoleLogic(ctx, svcCtx)
- resp, err := logic.CreateRole(&types.CreateRoleReq{
- ProductCode: pc,
- Name: name,
- PermsLevel: 1,
- })
- assert.Nil(t, resp)
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 409, ce.Code())
- assert.Equal(t, "该产品下角色名已存在", ce.Error())
- }
- // TC-0119: 并发同名创建
- func TestCreateRole_ConcurrentSameName(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- pc := testutil.UniqueId()
- name := testutil.UniqueId()
- t.Cleanup(func() {
- testutil.CleanTableByField(ctx, conn, "`sys_role`", "productCode", pc)
- })
- var wg sync.WaitGroup
- results := make(chan error, 2)
- for i := 0; i < 2; i++ {
- wg.Add(1)
- go func() {
- defer wg.Done()
- logic := NewCreateRoleLogic(ctx, svcCtx)
- _, err := logic.CreateRole(&types.CreateRoleReq{
- ProductCode: pc,
- Name: name,
- PermsLevel: 1,
- })
- results <- err
- }()
- }
- wg.Wait()
- close(results)
- var errs []error
- for err := range results {
- errs = append(errs, err)
- }
- require.Len(t, errs, 2)
- successCount := 0
- failCount := 0
- for _, err := range errs {
- if err == nil {
- successCount++
- } else {
- failCount++
- var codeErr *response.CodeError
- require.True(t, errors.As(err, &codeErr))
- assert.Equal(t, 409, codeErr.Code())
- }
- }
- assert.Equal(t, 1, successCount)
- assert.Equal(t, 1, failCount)
- }
- // TC-0538: createRole非管理员拒绝
- func TestCreateRole_MemberRejected(t *testing.T) {
- ctx := ctxhelper.MemberCtx("test_product")
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- logic := NewCreateRoleLogic(ctx, svcCtx)
- _, err := logic.CreateRole(&types.CreateRoleReq{ProductCode: "test", Name: "test", PermsLevel: 1})
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 403, ce.Code())
- }
|