68 lines
2.3 KiB
Solidity
68 lines
2.3 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity ^0.8.13;
|
|
|
|
import {Test, console} from "forge-std/Test.sol";
|
|
import {MyToken} from "../src/MyToken.sol";
|
|
|
|
contract MyTokenTest is Test {
|
|
MyToken public myToken;
|
|
address public owner;
|
|
address public user;
|
|
|
|
function setUp() public {
|
|
owner = address(0x100);
|
|
user = address(0x101);
|
|
|
|
vm.deal(owner, 100 ether);
|
|
vm.deal(user, 100 ether);
|
|
|
|
vm.startPrank(owner);
|
|
myToken = new MyToken(1000);
|
|
vm.stopPrank();
|
|
}
|
|
|
|
function test_buyAndTransferTokens() public {
|
|
vm.startPrank(user); // User operations under here
|
|
|
|
uint ethAmount = 0.01 ether;
|
|
// uint ethAmount = 0.001 ether; // This will cause myToken.buyTokens() to revert
|
|
|
|
uint userBalanceBeforeBuy = myToken.balanceOf(user);
|
|
uint totalSupplyBeforeBuy = myToken.totalSupply();
|
|
console.log("User balance before buy:", userBalanceBeforeBuy);
|
|
console.log("Total supply before buy:", totalSupplyBeforeBuy);
|
|
|
|
uint expectedBalance = userBalanceBeforeBuy + ethAmount / myToken.tokenPrice();
|
|
|
|
myToken.buyTokens{value: ethAmount}();
|
|
|
|
uint userBalanceAfterBuy = myToken.balanceOf(user);
|
|
uint totalSupplyAfterBuy = myToken.totalSupply();
|
|
console.log("User balance after buy:", userBalanceAfterBuy);
|
|
console.log("Total supply after buy:", totalSupplyAfterBuy);
|
|
|
|
assert(userBalanceAfterBuy > userBalanceBeforeBuy);
|
|
assertEq(userBalanceAfterBuy, expectedBalance);
|
|
assertEq(totalSupplyAfterBuy, totalSupplyBeforeBuy + ethAmount / myToken.tokenPrice());
|
|
|
|
console.log("====================");
|
|
|
|
uint ownerBalanceBeforeTransfer = myToken.balanceOf(owner);
|
|
uint userBalanceBeforeTransfer = myToken.balanceOf(user);
|
|
console.log("Owner balance before transfer:", ownerBalanceBeforeTransfer);
|
|
console.log("User balance before transfer:", userBalanceBeforeTransfer);
|
|
|
|
myToken.transfer(owner, userBalanceBeforeTransfer);
|
|
|
|
uint ownerBalanceAfterTransfer = myToken.balanceOf(owner);
|
|
uint userBalanceAfterTransfer = myToken.balanceOf(user);
|
|
console.log("Owner balance after transfer:", ownerBalanceAfterTransfer);
|
|
console.log("User balance after transfer:", userBalanceAfterTransfer);
|
|
|
|
assert(ownerBalanceAfterTransfer > ownerBalanceBeforeTransfer);
|
|
assertEq(ownerBalanceAfterTransfer, ownerBalanceBeforeTransfer + userBalanceBeforeTransfer);
|
|
|
|
vm.stopPrank();
|
|
}
|
|
}
|