2025-01-cyfrin-pieces-protocol/test/invariant/TokenDividerInvariantTest.t.sol
2025-01-03 10:59:02 -07:00

49 lines
1.5 KiB
Solidity

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {StdInvariant} from 'forge-std/StdInvariant.sol';
import {Test} from 'forge-std/Test.sol';
import {ERC20Mock} from '@openzeppelin/contracts/mocks/token/ERC20Mock.sol';
import {ERC721Mock} from '../mocks/ERC721Mock.sol';
import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {TokenDivider} from 'src/TokenDivider.sol';
import {DeployTokenDivider} from 'script/DeployTokenDivider.s.sol';
contract TokenDividerInvariantTest is StdInvariant, Test {
DeployTokenDivider deployer;
ERC20Mock erc20;
ERC721Mock erc721;
TokenDivider tokenDivider;
uint256 public constant AMOUNT = 10e18;
function setUp() public{
deployer = new DeployTokenDivider();
tokenDivider = deployer.run();
erc721 = new ERC721Mock();
erc20 = new ERC20Mock();
erc20.mint(address(tokenDivider), AMOUNT);
erc721.mint(msg.sender);
vm.prank(msg.sender);
erc721.approve(address(tokenDivider), 0);
targetContract(address(tokenDivider));
}
function invariant__allErc20TokensShouldAlwaysBeEqualToTheTotalSupplyOfThem() public view {
uint256 totalERC20Minted= erc20.totalSupply();
assertEq(totalERC20Minted, AMOUNT);
}
function invariant__gettersShouldNeverRevert() public view {
tokenDivider.getBalanceOf(msg.sender, address(erc20));
tokenDivider.getErc20TotalMintedAmount(address(erc20));
}
}