removeMemberLogic_mock_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package member
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. "perms-system-server/internal/model/productmember"
  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-0229: 事务回滚
  15. func TestRemoveMember_Mock_UserPermDeleteFail(t *testing.T) {
  16. ctrl := gomock.NewController(t)
  17. defer ctrl.Finish()
  18. dbErr := errors.New("db error")
  19. mockPM := mocks.NewMockSysProductMemberModel(ctrl)
  20. mockPM.EXPECT().FindOne(gomock.Any(), int64(1)).
  21. Return(&productmember.SysProductMember{
  22. Id: 1,
  23. UserId: 10,
  24. ProductCode: "pc",
  25. MemberType: "MEMBER",
  26. }, nil)
  27. mockPM.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
  28. DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
  29. return fn(ctx, nil)
  30. })
  31. // M-A 修复:事务内先 FindOneForUpdateTx 锁行
  32. mockPM.EXPECT().FindOneForUpdateTx(gomock.Any(), nil, int64(1)).
  33. Return(&productmember.SysProductMember{
  34. Id: 1,
  35. UserId: 10,
  36. ProductCode: "pc",
  37. MemberType: "MEMBER",
  38. }, nil)
  39. mockUR := mocks.NewMockSysUserRoleModel(ctrl)
  40. mockUR.EXPECT().DeleteByUserIdForProductTx(gomock.Any(), nil, int64(10), "pc").Return(nil)
  41. mockUP := mocks.NewMockSysUserPermModel(ctrl)
  42. mockUP.EXPECT().DeleteByUserIdForProductTx(gomock.Any(), nil, int64(10), "pc").Return(dbErr)
  43. svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
  44. ProductMember: mockPM,
  45. UserRole: mockUR,
  46. UserPerm: mockUP,
  47. })
  48. logic := NewRemoveMemberLogic(ctxhelper.SuperAdminCtx(), svcCtx)
  49. err := logic.RemoveMember(&types.RemoveMemberReq{Id: 1})
  50. assert.Error(t, err)
  51. assert.ErrorIs(t, err, dbErr)
  52. }