deleteRoleLogic_mock_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package role
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. roleModel "perms-system-server/internal/model/role"
  7. "perms-system-server/internal/testutil/ctxhelper"
  8. "perms-system-server/internal/testutil/mocks"
  9. "perms-system-server/internal/types"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/zeromicro/go-zero/core/stores/sqlx"
  12. "go.uber.org/mock/gomock"
  13. )
  14. // TC-0127: 事务回滚
  15. func TestDeleteRole_Mock_UserRoleDeleteFail(t *testing.T) {
  16. ctrl := gomock.NewController(t)
  17. defer ctrl.Finish()
  18. dbErr := errors.New("db error")
  19. mockRole := mocks.NewMockSysRoleModel(ctrl)
  20. mockRole.EXPECT().FindOne(gomock.Any(), int64(1)).
  21. Return(&roleModel.SysRole{Id: 1, ProductCode: "test"}, nil)
  22. mockRole.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
  23. DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
  24. return fn(ctx, nil)
  25. })
  26. mockRP := mocks.NewMockSysRolePermModel(ctrl)
  27. mockRP.EXPECT().DeleteByRoleIdTx(gomock.Any(), nil, int64(1)).Return(nil)
  28. mockUR := mocks.NewMockSysUserRoleModel(ctrl)
  29. // -D 修复:改为事务内 FOR UPDATE 读取 userIds
  30. mockUR.EXPECT().FindUserIdsByRoleIdForUpdateTx(gomock.Any(), nil, int64(1)).Return([]int64{}, nil)
  31. mockUR.EXPECT().DeleteByRoleIdTx(gomock.Any(), nil, int64(1)).Return(dbErr)
  32. svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
  33. Role: mockRole,
  34. RolePerm: mockRP,
  35. UserRole: mockUR,
  36. })
  37. logic := NewDeleteRoleLogic(ctxhelper.SuperAdminCtx(), svcCtx)
  38. err := logic.DeleteRole(&types.DeleteRoleReq{Id: 1})
  39. assert.Error(t, err)
  40. assert.ErrorIs(t, err, dbErr)
  41. }