syncPermsLogic_mock_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package pub
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. permModel "perms-system-server/internal/model/perm"
  7. productModel "perms-system-server/internal/model/product"
  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-0044: 事务保护-中途失败回滚
  15. func TestSyncPerms_Mock_TransactionRollbackOnBatchUpdateFail(t *testing.T) {
  16. ctrl := gomock.NewController(t)
  17. defer ctrl.Finish()
  18. dbErr := errors.New("batch update failed")
  19. mockProduct := mocks.NewMockSysProductModel(ctrl)
  20. mockProduct.EXPECT().FindOneByAppKey(gomock.Any(), "test_app_key").
  21. Return(&productModel.SysProduct{
  22. Id: 1,
  23. Code: "test_product",
  24. AppKey: "test_app_key",
  25. AppSecret: "test_app_secret",
  26. Status: 1,
  27. }, nil)
  28. mockPerm := mocks.NewMockSysPermModel(ctrl)
  29. mockPerm.EXPECT().FindMapByProductCode(gomock.Any(), "test_product").
  30. Return(map[string]*permModel.SysPerm{
  31. "existing_code": {
  32. Id: 10,
  33. ProductCode: "test_product",
  34. Code: "existing_code",
  35. Name: "Old Name",
  36. Remark: "old remark",
  37. Status: 1,
  38. },
  39. }, nil)
  40. mockPerm.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
  41. DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
  42. return fn(ctx, nil)
  43. })
  44. mockPerm.EXPECT().BatchInsertWithTx(gomock.Any(), nil, gomock.Any()).Return(nil)
  45. mockPerm.EXPECT().BatchUpdateWithTx(gomock.Any(), nil, gomock.Any()).Return(dbErr)
  46. svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
  47. Product: mockProduct,
  48. Perm: mockPerm,
  49. })
  50. logic := NewSyncPermsLogic(context.Background(), svcCtx)
  51. resp, err := logic.SyncPerms(&types.SyncPermsReq{
  52. AppKey: "test_app_key",
  53. AppSecret: "test_app_secret",
  54. Perms: []types.SyncPermItem{
  55. {Code: "new_code", Name: "New Perm"},
  56. {Code: "existing_code", Name: "Updated Name", Remark: "new remark"},
  57. },
  58. })
  59. assert.Nil(t, resp)
  60. assert.Error(t, err)
  61. assert.ErrorIs(t, err, dbErr)
  62. }