bindRolesLogic_mock_test.go 1.7 KB

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