package role import ( "context" "errors" "testing" roleModel "perms-system-server/internal/model/role" "perms-system-server/internal/testutil/ctxhelper" "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-0127: 事务回滚 func TestDeleteRole_Mock_UserRoleDeleteFail(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() dbErr := errors.New("db error") mockRole := mocks.NewMockSysRoleModel(ctrl) mockRole.EXPECT().FindOne(gomock.Any(), int64(1)). Return(&roleModel.SysRole{Id: 1, ProductCode: "test"}, nil) mockRole.EXPECT().TransactCtx(gomock.Any(), gomock.Any()). DoAndReturn(func(ctx context.Context, fn func(context.Context, sqlx.Session) error) error { return fn(ctx, nil) }) mockRP := mocks.NewMockSysRolePermModel(ctrl) mockRP.EXPECT().DeleteByRoleIdTx(gomock.Any(), nil, int64(1)).Return(nil) mockUR := mocks.NewMockSysUserRoleModel(ctrl) mockUR.EXPECT().FindUserIdsByRoleId(gomock.Any(), int64(1)).Return([]int64{}, nil) mockUR.EXPECT().DeleteByRoleIdTx(gomock.Any(), nil, int64(1)).Return(dbErr) svcCtx := mocks.NewMockServiceContext(mocks.MockModels{ Role: mockRole, RolePerm: mockRP, UserRole: mockUR, }) logic := NewDeleteRoleLogic(ctxhelper.SuperAdminCtx(), svcCtx) err := logic.DeleteRole(&types.DeleteRoleReq{Id: 1}) assert.Error(t, err) assert.ErrorIs(t, err, dbErr) }