Call Balancer Vault Swap failure

I tried to use Balancer Vault Swap in my smart contract.

function swap() external payable returns (uint256 wstETHAmount) {
    uint256 amount = msg.value;
    IBalancerRouter.SingleSwap memory singleSwap = IBalancerRouter.SingleSwap({
        poolId: 0x36bf227d6bac96e2ab1ebb5492ecec69c691943f000200000000000000000316,
        kind: IBalancerRouter.SwapKind.GIVEN_IN,
        assetIn: IAsset(address(0)),
        assetOut: IAsset(wstETH),
        amount: amount,
        userData: bytes("")

    IBalancerRouter.FundManagement memory funds = IBalancerRouter.FundManagement({
        sender: msg.sender,
        fromInternalBalance: false,
        recipient: payable(msg.sender),
        toInternalBalance: false

    uint256 amountOut = amount * _getPrice() / 1e18;
    uint256 limit = 999 * amountOut / 1000;
    uint256 deadline = block.timestamp + 5 minutes;
    wstETHAmount = IBalancerRouter(BalancerVault).swap(singleSwap, funds, limit, deadline);

And i wrote foundry tests for it, but in my case it was failed.
enter image description here
Can anyone help me with this problem´╝č

The division by 1e18 doesn't look like something that should take place onchain (i.e., as part of your contract code).

Other than that, you should first try to figure out exactly where inside function swap, the transaction reverts.

You can do this, for example, by importing "hardhat/console.sol", and then adding a console.log statement before and after every step inside that function.

Or alternatively, by splitting this function into several functions, and then calling them one by one from your test.

How about also sharing some of the test code.
What is the test doing?

This is my test code

function testSwapETHToWstETH() public {, 10 ether);
        vm.prank(alice, alice);
        IBalancerRouter(BalancerVault).setRelayerApproval(alice, address(wstETHSwapper), true);
        bool approved = IBalancerRouter(BalancerVault).hasApprovedRelayer(alice, address(wstETHSwapper));
        vm.prank(alice, alice);
        wstETHSwapper.swap{value: 1 ether}();
        uint256 balance = IERC20(WSTETH).balanceOf(alice);
        emit log_uint(balance);