bindRolesLogic_mock_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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-0187: 事务回滚
  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().FindRoleIdsByUserIdForProduct(gomock.Any(), int64(1), "test_product").Return([]int64{}, nil)
  35. mockUR.EXPECT().TableName().Return("`sys_user_role`").AnyTimes()
  36. mockUR.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
  37. DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
  38. return fn(ctx, nil)
  39. })
  40. mockUR.EXPECT().BatchInsertWithTx(gomock.Any(), nil, gomock.Any()).Return(dbErr)
  41. svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
  42. User: mockUser,
  43. Role: mockRole,
  44. UserRole: mockUR,
  45. ProductMember: mockPM,
  46. })
  47. logic := NewBindRolesLogic(ctxhelper.SuperAdminCtx(), svcCtx)
  48. err := logic.BindRoles(&types.BindRolesReq{
  49. UserId: 1,
  50. RoleIds: []int64{10, 20},
  51. })
  52. assert.Error(t, err)
  53. assert.ErrorIs(t, err, dbErr)
  54. }