diff --git a/test/unit/TokenDividerTest.audit.divideNft.t.sol b/test/unit/TokenDividerTest.audit.divideNft.t.sol new file mode 100644 index 0000000..a03332e --- /dev/null +++ b/test/unit/TokenDividerTest.audit.divideNft.t.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.18; + + +import {Test, console} from 'forge-std/Test.sol'; +import {DeployTokenDivider} from 'script/DeployTokenDivider.s.sol'; +import {TokenDivider} from 'src/TokenDivider.sol'; +import {ERC721Mock} from '../mocks/ERC721Mock.sol'; +import {ERC20Mock} from '@openzeppelin/contracts/mocks/token/ERC20Mock.sol'; +import {Ownable} from '@openzeppelin/contracts/access/Ownable.sol'; + + +contract TokenDiverTest is Test { + DeployTokenDivider deployer; + TokenDivider tokenDivider; + ERC721Mock erc721Mock; + + address public USER = makeAddr("user"); + address public USER2 = makeAddr("user2"); + uint256 constant public STARTING_USER_BALANCE = 10e18; + uint256 constant public AMOUNT = 2e18; + uint256 constant public TOKEN_ID = 0; + + function setUp() public { + deployer = new DeployTokenDivider(); + tokenDivider = deployer.run(); + + erc721Mock = new ERC721Mock(); + + erc721Mock.mint(USER); // @auditor: user has the NFT + vm.deal(USER2, STARTING_USER_BALANCE); // @auditor: user2 got 10 ether + } + + function test_assertSetUp() public { + // then what? + + // USER has no ERC721 NFT of TOKEN_ID + assertTrue(address(erc721Mock.ownerOf(TOKEN_ID)) == address(USER2)); + // USER has no balance + // USER2 has STARTING_USER_BALANCE + } + + /* + function testDivideNft() public { + + vm.startPrank(USER); + erc721Mock.approve(address(tokenDivider), TOKEN_ID); + + tokenDivider.divideNft(address(erc721Mock), TOKEN_ID, AMOUNT); + vm.stopPrank(); + ERC20Mock erc20Mock = ERC20Mock(tokenDivider.getErc20InfoFromNft(address(erc721Mock)).erc20Address); + + console.log("ERC20 Token name is: ", erc20Mock.name()); + console.log("ERC20 Token symbol is: ", erc20Mock.symbol()); + assertEq(tokenDivider.getErc20TotalMintedAmount(address(erc20Mock)), AMOUNT); + assertEq(erc721Mock.ownerOf(TOKEN_ID), address(tokenDivider)); + assertEq(tokenDivider.getBalanceOf(USER, address(erc20Mock)), AMOUNT); + + } + + + modifier nftDivided() { + vm.startPrank(USER); + erc721Mock.approve(address(tokenDivider), TOKEN_ID); + tokenDivider.divideNft(address(erc721Mock), TOKEN_ID, AMOUNT); + vm.stopPrank(); + + _; + + } + + function testDivideNftFailsIsSenderIsNotNftOwner() public { + vm.prank(USER); + erc721Mock.approve(address(tokenDivider), TOKEN_ID); + + vm.startPrank(USER2); + vm.expectRevert(TokenDivider.TokenDivider__NotFromNftOwner.selector); + tokenDivider.divideNft(address(erc721Mock), TOKEN_ID, AMOUNT); + vm.stopPrank(); + } + */ + +}