I try to test my smart contract with hardhat. At first I am forking the polygon mainnet like this:

```
npx hardhat node --fork https://polygon-mainnet.g.alchemy.com/v2/...

```

after this I can run the test local with:

```
npx hardhat test --network local

```

Now I want to test a swap with `uniswapV2Router`. So I want to fund my contract with a few tokens.
Because of hardhat creating a few wallets with a lot of eth in it, I try to send eth (Should be matic in my case right?) from a wallet to my contract, but the balance in my contract is still 0.
So at first, how is my smart contract looking like:

```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "hardhat/console.sol";
import "./interfaces/IUniswapV2Router02.sol";

contract MakeSwap is {
    address private owner;
    IUniswapV2Router02 public quickRouter;

    constructor(
        address _quickRouter
    ) {
        owner = msg.sender;
        quickRouter = IUniswapV2Router02(_quickRouter);
    }
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    receive() external payable {}

    function swapExactTokensForTokensQuick(
        uint256 _amountIn,
        uint256 _amountOutMin,
        address _tokenIn,
        address _tokenOut,
        uint256 deadline
    ) external returns (uint256) {
        IERC20(_tokenIn).approve(address(quickRouter), _amountIn);
        address[] memory path;
        path = new address[](2);
        path[0] = _tokenIn;
        path[1] = _tokenOut;
        uint256[] memory amounts = quickRouter.swapExactTokensForTokens(
            _amountIn,
            _amountOutMin,
            path,
            address(this),
            deadline
        );
        console.log(amounts[1]);
        return amounts[1];
    }
}

```

And I am testing the swap like this:

```
const { SignerWithAddress } = require("@nomiclabs/hardhat-ethers/signers");
const { expect } = require("chai");
const { ethers } = require("hardhat");
const {
  IERC20,
} = require("../artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json");
const token_Address_usdc = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
const token_Address_weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
const token_Address_wmatic = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
const router_quick = "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff";
const erc20_abi = require("../abis/erc20abi.json");
const weth_abi = require("../abis/wethabi.json");

describe("test", () => {
  let Contract, owner, addr1, addr2;

  beforeEach(async () => {
    [owner, addr1, addr2, _] = await ethers.getSigners();
    factory = await ethers.getContractFactory("MakeSwap");
    Contract = await factory.deploy(router_quick);
    await Contract.deployed();

    const weth = new ethers.Contract(token_Address_weth, erc20_abi, ethers.provider);
    const usdc = new ethers.Contract(token_Address_usdc, erc20_abi, ethers.provider);
    const wmatic = new ethers.Contract(token_Address_wmatic, erc20_abi, ethers.provider);

    var contractBalance_weth = await weth.balanceOf(Contract.address);
    var contractBalance_usdc = await usdc.balanceOf(Contract.address);
    var contractBalance_wmatic = await wmatic.balanceOf(Contract.address);
    console.log("WETH Balance: ", contractBalance_weth.toString());
    console.log("USDC Balance: ", contractBalance_usdc.toString());
    console.log("WMATIC Balance: ", contractBalance_wmatic.toString());

    //Wallet #17 -> Should have 10000 ETH -> Created from hardhat
    const priv_key_17 =
      "0x...";
    const addr_17 = "0x...";

    const signer = await ethers.provider.getSigner(addr_17);
    await signer.sendTransaction({
      to: Contract.address,
      value: ethers.utils.parseUnits("1", 18),
    });

    var contractBalance_weth = await weth.balanceOf(Contract.address);
    var contractBalance_usdc = await usdc.balanceOf(Contract.address);
    var contractBalance_wmatic = await wmatic.balanceOf(Contract.address);
    console.log("WETH Balance: ", contractBalance_weth.toString());
    console.log("USDC Balance: ", contractBalance_usdc.toString());
    console.log("WMATIC Balance: ", contractBalance_wmatic.toString());
  });

  describe("trade", async () => {
    it("Should create a trade", async () => {
      const weth = new ethers.Contract(token_Address_weth, erc20_abi, ethers.provider);
      const usdc = new ethers.Contract(token_Address_usdc, erc20_abi, ethers.provider);
      const wmatic = new ethers.Contract(token_Address_wmatic, erc20_abi, ethers.provider);

      const timestamp = (await ethers.provider.getBlock("latest")).timestamp;
      const deadline = timestamp + 3000;

      amountOutMin = ethers.utils.parseUnits("2000", 6);
      amountIn = ethers.utils.parseUnits("1", 18);
      var contractBalance_weth = await weth.balanceOf(Contract.address);
      var contractBalance_usdc = await usdc.balanceOf(Contract.address);
      var contractBalance_wmatic = await wmatic.balanceOf(Contract.address);
      console.log("WETH Balance: ", contractBalance_weth.toString());
      console.log("USDC Balance: ", contractBalance_usdc.toString());
      console.log("WMATIC Balance: ", contractBalance_wmatic.toString());
      await Contract.provider.send("hardhat_setBalance", [
        Flashloan.address,
        ethers.utils.parseUnits("5", 18).toHexString(),
      ]);
      var contractBalance_weth = await weth.balanceOf(Contract.address);
      var contractBalance_usdc = await usdc.balanceOf(Contract.address);
      var contractBalance_wmatic = await wmatic.balanceOf(Contract.address);
      console.log("WETH Balance: ", contractBalance_weth.toString());
      console.log("USDC Balance: ", contractBalance_usdc.toString());
      console.log("WMATIC Balance: ", contractBalance_wmatic.toString());
      await expect(
        Contract.swapExactTokensForTokensSushi(
          amountIn,
          amountOutMin,
          token_Address_weth,
          token_Address_usdc,
          deadline
        )
      ); //.to.not.reverted;
      var contractBalance_weth = await weth.balanceOf(Contract.address);
      var contractBalance_usdc = await usdc.balanceOf(Contract.address);
      var contractBalance_wmatic = await wmatic.balanceOf(Contract.address);
      console.log("WETH Balance: ", contractBalance_weth.toString());
      console.log("USDC Balance: ", contractBalance_usdc.toString());
      console.log("WMATIC Balance: ", contractBalance_wmatic.toString());
    });
  });
});

```

And here I can start the test, and it is running without any error which leads to stop the test. But in the log it says: `eth_sendTransaction` in red with additional information: `Error: VM Exception while processing transaction: reverted with reason string 'TransferHelper: TRANSFER_FROM_FAILED'`
and for all the test process my `console.log(...)` statements say balance is 0:

```
WETH Balance:  0
USDC Balance:  0
WMATIC Balance:  0
WETH Balance:  0
USDC Balance:  0
WMATIC Balance:  0
WETH Balance:  0
USDC Balance:  0
WMATIC Balance:  0
WETH Balance:  0
USDC Balance:  0
WMATIC Balance:  0
WETH Balance:  0
USDC Balance:  0
WMATIC Balance:  0

```

Can someone help me to fund my contract and make a swap?
If there is information missing, please tell me and I will add it.

Thank you!