| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package pub
- import (
- "context"
- "errors"
- "testing"
- permModel "perms-system-server/internal/model/perm"
- productModel "perms-system-server/internal/model/product"
- "perms-system-server/internal/testutil/mocks"
- "perms-system-server/internal/types"
- "github.com/stretchr/testify/assert"
- "github.com/zeromicro/go-zero/core/stores/sqlx"
- "go.uber.org/mock/gomock"
- )
- // TC-0044: 事务保护-中途失败回滚
- func TestSyncPerms_Mock_TransactionRollbackOnBatchUpdateFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- dbErr := errors.New("batch update failed")
- mockProduct := mocks.NewMockSysProductModel(ctrl)
- mockProduct.EXPECT().FindOneByAppKey(gomock.Any(), "test_app_key").
- Return(&productModel.SysProduct{
- Id: 1,
- Code: "test_product",
- AppKey: "test_app_key",
- AppSecret: "test_app_secret",
- Status: 1,
- }, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindMapByProductCode(gomock.Any(), "test_product").
- Return(map[string]*permModel.SysPerm{
- "existing_code": {
- Id: 10,
- ProductCode: "test_product",
- Code: "existing_code",
- Name: "Old Name",
- Remark: "old remark",
- Status: 1,
- },
- }, nil)
- mockPerm.EXPECT().TransactCtx(gomock.Any(), gomock.Any()).
- DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error {
- return fn(ctx, nil)
- })
- mockPerm.EXPECT().BatchInsertWithTx(gomock.Any(), nil, gomock.Any()).Return(nil)
- mockPerm.EXPECT().BatchUpdateWithTx(gomock.Any(), nil, gomock.Any()).Return(dbErr)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- Product: mockProduct,
- Perm: mockPerm,
- })
- logic := NewSyncPermsLogic(context.Background(), svcCtx)
- resp, err := logic.SyncPerms(&types.SyncPermsReq{
- AppKey: "test_app_key",
- AppSecret: "test_app_secret",
- Perms: []types.SyncPermItem{
- {Code: "new_code", Name: "New Perm"},
- {Code: "existing_code", Name: "Updated Name", Remark: "new remark"},
- },
- })
- assert.Nil(t, resp)
- assert.Error(t, err)
- assert.ErrorIs(t, err, dbErr)
- }
|