From 4c8b60d62b861d6bce651d5c785cf836a85141f1 Mon Sep 17 00:00:00 2001 From: cryptotechmaker Date: Tue, 4 Jun 2024 11:31:23 +0300 Subject: [PATCH] chore: added Yb test for pearlmit allowance --- test/YieldBox.t.sol | 61 ++++++++++++++++++++++++++++++++++++++++ test/mocks/ERC20Mock.sol | 17 +++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/YieldBox.t.sol create mode 100644 test/mocks/ERC20Mock.sol diff --git a/test/YieldBox.t.sol b/test/YieldBox.t.sol new file mode 100644 index 0000000..dccc72e --- /dev/null +++ b/test/YieldBox.t.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +import {IERC20} from "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol"; + +import {ERC20WithoutStrategy} from "yieldbox/strategies/ERC20WithoutStrategy.sol"; +import {IWrappedNative} from "yieldbox/interfaces/IWrappedNative.sol"; +import {YieldBoxURIBuilder} from "yieldbox/YieldBoxURIBuilder.sol"; +import {TokenType} from "yieldbox/enums/YieldBoxTokenType.sol"; +import {Pearlmit} from "tapioca-periph/pearlmit/Pearlmit.sol"; +import {IYieldBox} from "yieldbox/interfaces/IYieldBox.sol"; +import {IStrategy} from "yieldbox/interfaces/IStrategy.sol"; +import {YieldBox} from "yieldbox/YieldBox.sol"; + +import {ERC20Mock} from "./mocks/ERC20Mock.sol"; + +contract YieldBoxTest { + + ERC20Mock weth; + YieldBox yieldBox; + Pearlmit pearlmit; + + function createErc20Mock() public returns (ERC20Mock) { + return new ERC20Mock(); + } + + function createPearlmit() public returns (Pearlmit) { + return new Pearlmit("Test", "1", address(this), 0); + } + + function createYieldBox(address _weth, address _pearlmit) public returns (YieldBox) { + YieldBoxURIBuilder ybUri = new YieldBoxURIBuilder(); + return new YieldBox(IWrappedNative(_weth), ybUri, Pearlmit(_pearlmit), address(this)); + } + + function registerAsset(address _yieldBox, address _asset) public returns (uint256) { + ERC20WithoutStrategy assetStrategy = new ERC20WithoutStrategy(IYieldBox(_yieldBox), IERC20(_asset)); + return YieldBox(_yieldBox).registerAsset(TokenType.ERC20, _asset, IStrategy(address(assetStrategy)), 0); + } + + function setUp() public { + weth = createErc20Mock(); + pearlmit = createPearlmit(); + yieldBox = createYieldBox(address(weth), address(pearlmit)); + } + + function testDepositUsingPearlmit() public { + setUp(); + + ERC20Mock asset = createErc20Mock(); + uint256 assetId = registerAsset(address(yieldBox), address(asset)); + uint256 amount = 1 ether; + + asset.mint(address(this), amount); + + pearlmit.approve(20, address(asset), 0, address(yieldBox), uint200(amount), uint48(block.timestamp)); + asset.approve(address(pearlmit), amount); + + yieldBox.depositAsset(assetId, address(this), address(this), amount, 0); + } +} \ No newline at end of file diff --git a/test/mocks/ERC20Mock.sol b/test/mocks/ERC20Mock.sol new file mode 100644 index 0000000..2189523 --- /dev/null +++ b/test/mocks/ERC20Mock.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.22; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + + +contract ERC20Mock is ERC20 { + constructor() ERC20("ERC-20C Mock", "MOCK") {} + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } + + function burn(address from, uint256 amount) external { + _burn(from, amount); + } +}