bindRolesLogic_mock_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package user
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. memberModel "perms-system-server/internal/model/productmember"
  7. roleModel "perms-system-server/internal/model/role"
  8. userModel "perms-system-server/internal/model/user"
  9. "perms-system-server/internal/testutil/ctxhelper"
  10. "perms-system-server/internal/testutil/mocks"
  11. "perms-system-server/internal/types"
  12. "github.com/stretchr/testify/assert"
  13. "github.com/zeromicro/go-zero/core/stores/sqlx"
  14. "go.uber.org/mock/gomock"
  15. )
  16. // TC-0136: 事务回滚
  17. func TestBindRoles_Mock_BatchInsertFail(t *testing.T) {
  18. ctrl := gomock.NewController(t)
  19. defer ctrl.Finish()
  20. dbErr := errors.New("db error")
  21. mockUser := mocks.NewMockSysUserModel(ctrl)
  22. mockUser.EXPECT().FindOne(gomock.Any(), int64(1)).
  23. Return(&userModel.SysUser{Id: 1}, nil)
  24. mockPM := mocks.NewMockSysProductMemberModel(ctrl)
  25. mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "test_product", int64(1)).
  26. Return(&memberModel.SysProductMember{Id: 1, ProductCode: "test_product", UserId: 1}, nil)
  27. mockRole := mocks.NewMockSysRoleModel(ctrl)
  28. mockRole.EXPECT().FindByIds(gomock.Any(), []int64{10, 20}).
  29. Return([]*roleModel.SysRole{
  30. {Id: 10, ProductCode: "test_product", Status: 1},
  31. {Id: 20, ProductCode: "test_product", Status: 1},
  32. }, nil)
  33. mockUR := mocks.NewMockSysUserRoleModel(ctrl)
  34. mockUR.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
  35. DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
  36. return fn(ctx, nil)
  37. })
  38. mockUR.EXPECT().DeleteByUserIdForProductTx(gomock.Any(), nil, int64(1), "test_product").Return(nil)
  39. mockUR.EXPECT().BatchInsertWithTx(gomock.Any(), nil, gomock.Any()).Return(dbErr)
  40. svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
  41. User: mockUser,
  42. Role: mockRole,
  43. UserRole: mockUR,
  44. ProductMember: mockPM,
  45. })
  46. logic := NewBindRolesLogic(ctxhelper.SuperAdminCtx(), svcCtx)
  47. err := logic.BindRoles(&types.BindRolesReq{
  48. UserId: 1,
  49. RoleIds: []int64{10, 20},
  50. })
  51. assert.Error(t, err)
  52. assert.ErrorIs(t, err, dbErr)
  53. }